// Copyright 2025 WIT.COM Inc Licensed GPL 3.0 package zoopb import ( "go.wit.com/lib/fhelp" "go.wit.com/log" ) // this is the default table layout for repos in forge func (pb *Packages) PrintTable() { tablePB := pb.makeDefaultTable() tablePB.PrintTable() } func (pb *Packages) makeDefaultTable() *PackagesTable { t := pb.NewTable("apt packages") t.NewUuid() var col *PackageFunc col = t.AddStringFunc(" I", func(p *Package) string { if p.Installed { return " X" } return "" }) col.Width = 3 col = t.AddName() col.Width = 30 col = t.AddVersion() col.Width = 20 col = t.AddPkgName() col.Width = -1 col.Header.Name = "apt package path" return t } func (m *Machine) PrintTable(pb *Packages) { tablePB := m.makeSmartTable(pb) tablePB.PrintTable() } func (m *Machine) PrintInstalledTable() { installed := NewPackages() for p := range m.Wit.IterAll() { if m.IsInstalled(p.Name) { installed.Append(p) } } tablePB := m.makeSmartTable(installed) tablePB.PrintTable() } 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.Name) { 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.AddStringFunc("BAD", func(p *Package) string { if m.MirrorsOutOfDate(p) { return "BAD" } return "" }) col.Width = 3 col = t.AddName() col.Width = 30 col = t.AddVersion() col.Width = 20 col = t.AddPkgName() 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.Name) if check == nil { // not installed. can not upgrade 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 v1.LessThan(v2) { log.Info("upgrading from", v1, "to", v2) return true } log.Info("WEIRD: keeping on machine version:", v1, "newer than mirrors.wit.com:", v2) 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.Name) 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 }