// Copyright 2025 WIT.COM Inc Licensed GPL 3.0 package zoopb import ( "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 { return m.Version }) sf.Width = 14 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.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 }