// Copyright 2025 WIT.COM Inc Licensed GPL 3.0 package zoopb import ( "fmt" "strconv" "strings" "go.wit.com/lib/cobol" "go.wit.com/log" ) // tables for what packages are currently installed func (m *Machine) PrintTable(pb *Packages) { tablePB := m.makeSmartTable(pb) tablePB.PrintTable() var i int for p := range pb.IterAll() { if m.IsInstalled(p.Package) { i += 1 } } log.Printf("pb.SmartTable: packages: total=%d installed=%d\n", pb.Len(), i) } func (m *Machine) PrintInstalledTable() { installed := NewPackages() for p := range m.Wit.IterAll() { if m.IsInstalled(p.Package) { installed.Append(p) } } tablePB := m.makeSmartTable(installed) if tablePB == nil { panic("WTF") } tablePB.PrintTable() log.Printf("pb.SmartTable: %d installed packages\n", installed.Len()) } func (t *PackagesTable) AddSmartVersion() *PackageFunc { sf := t.AddStringFunc("Version", func(m *Package) string { version := m.Version if strings.Contains(version, "+b") { parts := strings.Split(version, "+b") if len(parts) == 2 { version = parts[0] } } if strings.HasSuffix(version, "-0") { version = version[0 : len(version)-2] } return version }) sf.Width = 12 return sf } func (p *Package) GetBuildCount() int { bcount := 0 if strings.Contains(p.Version, "+b") { parts := strings.Split(p.Version, "+b") if len(parts) == 2 { bcount, _ = strconv.Atoi(parts[1]) } } return bcount } func (t *PackagesTable) AddBuildCount() *PackageFunc { sf := t.AddStringFunc(" b#", func(m *Package) string { bcount := m.GetBuildCount() if bcount == 0 { return "" } return fmt.Sprintf("+b%d", bcount) }) sf.Width = 5 return sf } func (m *Machine) makeSmartTable(pb *Packages) *PackagesTable { t := pb.NewTable("apt packages") t.NewUuid() var col *PackageFunc col = t.AddStringFunc(" I", func(p *Package) string { if m.WillUpgrade(p) { return " U" } if m.IsInstalled(p.Package) { return " X" } return "" }) col.Width = 3 col = t.AddPackage() col.Width = 16 col = t.AddSmartVersion() col = t.AddBuildCount() col = t.AddStringFunc("mirrors .deb ctime", func(p *Package) string { if p.DebInfo == nil { return "debinfo == nil" } if p.DebInfo.DebCtime != "" { return cobol.Time(p.DebInfo.DebCtime) } return "" }) col.Width = 28 col = t.AddStringFunc("Build Date", func(p *Package) string { if p.DebInfo == nil { return "debinfo == nil" } if p.BuildDate != nil { return cobol.Time(p.BuildDate) } if p.Ctime != nil { return "lies " + cobol.Time(p.Ctime) } return "p.Ctime == nil" }) col.Width = 28 col = t.AddStringFunc("md5sum", func(p *Package) string { if p.DebInfo == nil { return "" } return p.DebInfo.MD5SUM }) col.Width = 3 col = t.AddFilename() col.Width = -1 col.Header.Name = "apt package path" return t } // true if the package 'p' is newer than the installed package func (m *Machine) WillUpgrade(p *Package) bool { check := m.FindInstalledByName(p.Package) if check == nil { // not installed. can not upgrade return false } if check.Version != p.Version { return true } return false }