From 3f23580d1695f39a5fc9e3fef753ce8459312abf Mon Sep 17 00:00:00 2001 From: EnumDev Date: Tue, 24 Feb 2026 20:51:04 +0200 Subject: [PATCH] Add sorting by installation date and last update date in 'list' subcommand --- src/bpm/main.go | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/bpm/main.go b/src/bpm/main.go index 4f66361..fe427eb 100644 --- a/src/bpm/main.go +++ b/src/bpm/main.go @@ -358,20 +358,21 @@ func showPackageList() { return } - installedPackages := make([]struct { + type installedPackage struct { pkgInfo bpmlib.PackageInfo installedSize int64 - }, len(installedPackageNames)) + localInfo bpmlib.PackageLocalInfo + } + + installedPackages := make([]installedPackage, len(installedPackageNames)) for i, pkgName := range installedPackageNames { pkgInfo := *bpmlib.GetPackageInfo(pkgName, rootDir) - installedSize := bpmlib.GetPackage(pkgName, rootDir).GetInstalledSize() + bpmpkg := bpmlib.GetPackage(pkgName, rootDir) - installedPackages[i] = struct { - pkgInfo bpmlib.PackageInfo - installedSize int64 - }{ + installedPackages[i] = installedPackage{ pkgInfo: pkgInfo, - installedSize: installedSize, + installedSize: bpmpkg.GetInstalledSize(), + localInfo: bpmpkg.LocalInfo, } } @@ -382,25 +383,27 @@ func showPackageList() { switch sortPackages { case "", "name": - slices.SortFunc(installedPackages, func(a, b struct { - pkgInfo bpmlib.PackageInfo - installedSize int64 - }) int { + slices.SortFunc(installedPackages, func(a, b installedPackage) int { return strings.Compare(a.pkgInfo.Name, b.pkgInfo.Name) }) slices.SortFunc(databaseEntries, func(a, b *bpmlib.BPMDatabaseEntry) int { return strings.Compare(a.Info.Name, b.Info.Name) }) case "size": - slices.SortFunc(installedPackages, func(a, b struct { - pkgInfo bpmlib.PackageInfo - installedSize int64 - }) int { + slices.SortFunc(installedPackages, func(a, b installedPackage) int { return int(b.installedSize - a.installedSize) }) slices.SortFunc(databaseEntries, func(a, b *bpmlib.BPMDatabaseEntry) int { return int(b.InstalledSize - a.InstalledSize) }) + case "installation-date": + slices.SortFunc(installedPackages, func(a, b installedPackage) int { + return int(b.localInfo.InstalledOn - a.localInfo.InstalledOn) + }) + case "last-update-date": + slices.SortFunc(installedPackages, func(a, b installedPackage) int { + return int(b.localInfo.LastUpdatedOn - a.localInfo.LastUpdatedOn) + }) default: log.Printf("Error: cannot sort by '%s'", sortPackages) exitCode = 1