From 619335bbe6c674a67beac03bb0e3d42b2c7603ba Mon Sep 17 00:00:00 2001 From: EnumDev Date: Thu, 5 Feb 2026 14:54:08 +0200 Subject: [PATCH] Replace ResolveVirtualPackage function with GetDatabaseVirtualPackageEntry --- src/bpm/main.go | 4 +++- src/bpmlib/databases.go | 17 +++++++---------- src/bpmlib/dependencies.go | 3 ++- src/bpmlib/general.go | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/bpm/main.go b/src/bpm/main.go index 3c77c22..f5463d8 100644 --- a/src/bpm/main.go +++ b/src/bpm/main.go @@ -234,7 +234,9 @@ func showPackageInfo() { var entry *bpmlib.BPMDatabaseEntry entry, _, err = bpmlib.GetDatabaseEntry(pkg) if err != nil { - if entry = bpmlib.ResolveVirtualPackage(pkg); entry == nil { + if providers := bpmlib.GetDatabaseVirtualPackageEntry(pkg); len(providers) > 0 { + entry = providers[0] + } else { log.Printf("Error: could not find package (%s) in any database\n", pkg) exitCode = 1 return diff --git a/src/bpmlib/databases.go b/src/bpmlib/databases.go index 78b12d5..7cc4d03 100644 --- a/src/bpmlib/databases.go +++ b/src/bpmlib/databases.go @@ -20,7 +20,7 @@ import ( type BPMDatabase struct { DatabaseVersion int `yaml:"database_version"` Entries map[string]*BPMDatabaseEntry `yaml:"entries"` - VirtualPackages map[string][]string + VirtualPackages map[string][]*BPMDatabaseEntry Name string Source string } @@ -59,7 +59,7 @@ func (db *configDatabase) ReadLocalDatabase() error { } // Initialize struct values - database.VirtualPackages = make(map[string][]string) + database.VirtualPackages = make(map[string][]*BPMDatabaseEntry) database.Name = db.Name database.Source = db.Source @@ -105,13 +105,13 @@ func (db *configDatabase) ReadLocalDatabase() error { // Add virtual packages to database for _, p := range splitPkg.Provides { - database.VirtualPackages[p] = append(database.VirtualPackages[p], splitPkg.Name) + database.VirtualPackages[p] = append(database.VirtualPackages[p], database.Entries[splitPkg.Name]) } } } else { // Add virtual packages to database for _, p := range entry.Info.Provides { - database.VirtualPackages[p] = append(database.VirtualPackages[p], entry.Info.Name) + database.VirtualPackages[p] = append(database.VirtualPackages[p], entry) } } } @@ -231,15 +231,12 @@ func FindReplacement(pkg string) *BPMDatabaseEntry { return nil } -func ResolveVirtualPackage(vpkg string) *BPMDatabaseEntry { +func GetDatabaseVirtualPackageEntry(vpkg string) (providers []*BPMDatabaseEntry) { for _, db := range BPMDatabases { - if v, ok := db.VirtualPackages[vpkg]; ok { - slices.Sort(v) - return db.Entries[v[0]] - } + providers = append(providers, db.VirtualPackages[vpkg]...) } - return nil + return providers } func (db *BPMDatabase) FetchPackage(pkg string) (string, error) { diff --git a/src/bpmlib/dependencies.go b/src/bpmlib/dependencies.go index 928b39b..7c9bff2 100644 --- a/src/bpmlib/dependencies.go +++ b/src/bpmlib/dependencies.go @@ -201,8 +201,9 @@ func resolvePackageDependenciesFromDatabase(resolved *[]pkgInstallationReason, u *unresolved = stringSliceRemove(*unresolved, resolvedVirtualPkg) continue - } else if entry = ResolveVirtualPackage(pkgIR.PkgName); entry != nil { + } else if providers := GetDatabaseVirtualPackageEntry(pkgIR.PkgName); len(providers) > 0 { // Virtual package found in database + entry = providers[0] } else { // Virtual package not found if !slices.Contains(*unresolved, pkgIR.PkgName) { diff --git a/src/bpmlib/general.go b/src/bpmlib/general.go index 83ba891..4f149de 100644 --- a/src/bpmlib/general.go +++ b/src/bpmlib/general.go @@ -99,8 +99,8 @@ func InstallPackages(rootDir string, forceInstallationReason InstallationReason, pkgsNotFound = append(pkgsNotFound, pkg) continue } - } else if e := ResolveVirtualPackage(pkg); e != nil { - entry = e + } else if providers := GetDatabaseVirtualPackageEntry(pkg); len(providers) > 0 { + entry = providers[0] } else { pkgsNotFound = append(pkgsNotFound, pkg) continue