// Copyright 2025 WIT.COM Inc Licensed GPL 3.0 package zoopb import ( "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 (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.IsInstalled(p.Package) { return " X" } return "" }) col.Width = 3 col = t.AddStringFunc("U", func(p *Package) string { if m.WillUpgrade(p) { return "X" } return "" }) col.Width = 1 col = t.AddPackage() col.Width = 16 col = t.AddVersion() col.Width = 20 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 } /* // this means somehow this machine has a newer version than the mirrors have // true if the package 'p' is newer than the installed package func (m *Machine) MirrorsOutOfDate(p *Package) bool { check := m.FindInstalledByName(p.Package) if check == nil { // not installed return false } v1, _ := fhelp.NewDebVersion(check.Version) v2, _ := fhelp.NewDebVersion(p.Version) if v1.Equal(v2) { // log.Info("do nothing", v1, v2) return false } if v2.LessThan(v1) { log.Info("wow. you have a newer version on this box than the mirrors", v1, "to", v2) return true } return false } */