From 2d35ac12a1d1b9dc4288504191d2973d1758bf5b Mon Sep 17 00:00:00 2001 From: EnumDev Date: Mon, 7 Oct 2024 14:47:57 +0300 Subject: [PATCH] Provided packages should now function correctly --- utils/repo_utils.go | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/utils/repo_utils.go b/utils/repo_utils.go index 80fd42b..d28ae00 100644 --- a/utils/repo_utils.go +++ b/utils/repo_utils.go @@ -8,6 +8,7 @@ import ( "net/url" "os" "path" + "sort" "strings" ) @@ -19,8 +20,9 @@ type Repository struct { } type RepositoryEntry struct { - Info *PackageInfo `yaml:"info"` - Download string `yaml:"download"` + Info *PackageInfo `yaml:"info"` + Download string `yaml:"download"` + IsVirtualPackage bool `yaml:"-"` } func (repo *Repository) ContainsPackage(pkg string) bool { @@ -39,6 +41,8 @@ func (repo *Repository) ReadLocalDatabase() error { return err } + virtualPackages := make(map[string][]string) + data := string(bytes) for _, b := range strings.Split(data, "---") { entry := RepositoryEntry{ @@ -58,14 +62,32 @@ func (repo *Repository) ReadLocalDatabase() error { Conflicts: make([]string, 0), Provides: make([]string, 0), }, - Download: "", + Download: "", + IsVirtualPackage: false, } err := yaml.Unmarshal([]byte(b), &entry) if err != nil { return err } + + for _, p := range entry.Info.Provides { + virtualPackages[p] = append(virtualPackages[p], entry.Info.Name) + } repo.Entries[entry.Info.Name] = &entry } + + for key, value := range virtualPackages { + if _, ok := repo.Entries[key]; ok { + continue + } + sort.Strings(value) + entry := RepositoryEntry{ + Info: repo.Entries[value[0]].Info, + Download: repo.Entries[value[0]].Download, + IsVirtualPackage: true, + } + repo.Entries[key] = &entry + } return nil }