From f066e26dc25dddd6b34ca222d33d53c59c475a87 Mon Sep 17 00:00:00 2001 From: EnumDev Date: Sun, 19 Oct 2025 14:28:14 +0300 Subject: [PATCH] Add new flags to the 'list' subcommand --- src/bpm/main.go | 35 ++++++++++++++++++++++++++++++++ src/bpmlib/installed_packages.go | 3 +++ 2 files changed, 38 insertions(+) diff --git a/src/bpm/main.go b/src/bpm/main.go index b70fc59..65ceb1f 100644 --- a/src/bpm/main.go +++ b/src/bpm/main.go @@ -62,6 +62,9 @@ func main() { currentFlagSet.StringP("root", "R", "/", "Operate on specified root directory") currentFlagSet.BoolP("count", "c", false, "Show total package count") currentFlagSet.BoolP("names", "n", false, "Show all package names") + currentFlagSet.Bool("manual", false, "Show packages installed as dependencies") + currentFlagSet.Bool("depends", false, "Show packages installed as dependencies") + currentFlagSet.Bool("make-depends", false, "Show packages installed as make dependencies") setupFlagsAndHelp(currentFlagSet, fmt.Sprintf("bpm %s ", subcommand), "List packages", os.Args[2:]) showPackageList() @@ -249,6 +252,15 @@ func showPackageList() { rootDir, _ := currentFlagSet.GetString("root") showPkgCount, _ := currentFlagSet.GetBool("count") showPkgNames, _ := currentFlagSet.GetBool("names") + showManual, _ := currentFlagSet.GetBool("manual") + showDepends, _ := currentFlagSet.GetBool("depends") + showMakeDepends, _ := currentFlagSet.GetBool("make-depends") + + if !isFlagSet(currentFlagSet, "manual") && !isFlagSet(currentFlagSet, "depends") && !isFlagSet(currentFlagSet, "make-depends") { + showManual = true + showDepends = true + showMakeDepends = true + } // Read local databases err := bpmlib.ReadLocalDatabaseFiles() @@ -268,6 +280,17 @@ func showPackageList() { fmt.Println(len(packages)) } else if showPkgNames { for _, pkg := range packages { + installationReason := bpmlib.GetInstallationReason(pkg, rootDir) + if installationReason == bpmlib.InstallationReasonManual && !showManual { + continue + } else if installationReason == bpmlib.InstallationReasonDependency && !showDepends { + continue + } else if installationReason == bpmlib.InstallationReasonMakeDependency && !showMakeDepends { + continue + } else if installationReason == bpmlib.InstallationReasonUnknown && (!showManual || !showDepends || !showMakeDepends) { + continue + } + fmt.Println(pkg) } } else { @@ -281,6 +304,18 @@ func showPackageList() { fmt.Printf("Package (%s) could not be found\n", pkg) continue } + + installationReason := bpmlib.GetInstallationReason(info.Name, rootDir) + if installationReason == bpmlib.InstallationReasonManual && !showManual { + continue + } else if installationReason == bpmlib.InstallationReasonDependency && !showDepends { + continue + } else if installationReason == bpmlib.InstallationReasonMakeDependency && !showMakeDepends { + continue + } else if installationReason == bpmlib.InstallationReasonUnknown && (!showManual || !showDepends || !showMakeDepends) { + continue + } + if n != 0 { fmt.Println() } diff --git a/src/bpmlib/installed_packages.go b/src/bpmlib/installed_packages.go index 8c22171..6c0312a 100644 --- a/src/bpmlib/installed_packages.go +++ b/src/bpmlib/installed_packages.go @@ -75,6 +75,9 @@ func GetInstalledPackages(rootDir string) (ret []string, err error) { ret = append(ret, bpmpkg.PkgInfo.Name) } + // Sort packages + slices.Sort(ret) + return ret, nil }