From adcd8df49eaca6cc3aa9033645fab29b28ec6d94 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Fri, 13 Dec 2019 17:18:51 +0100 Subject: [PATCH] Add Bigger/Lower to Package to allow version comparison easier --- pkg/package/package.go | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/pkg/package/package.go b/pkg/package/package.go index 84c77a5d..d7dc685c 100644 --- a/pkg/package/package.go +++ b/pkg/package/package.go @@ -57,6 +57,7 @@ type Package interface { GetVersion() string RequiresContains(PackageDatabase, Package) (bool, error) Matches(m Package) bool + Bigger(m Package) bool AddUse(use string) RemoveUse(use string) @@ -254,13 +255,19 @@ func (p *DefaultPackage) Clone() Package { copier.Copy(&new, &p) return new } - func (p *DefaultPackage) Matches(m Package) bool { if p.GetFingerPrint() == m.GetFingerPrint() { return true } return false } +func (p *DefaultPackage) Bigger(m Package) bool { + low := Lower([]Package{p, m}) + if low.Matches(m) { + return true + } + return false +} func (p *DefaultPackage) Expand(definitiondb PackageDatabase) ([]Package, error) { var versionsInWorld []Package @@ -332,7 +339,29 @@ func (pack *DefaultPackage) RequiresContains(definitiondb PackageDatabase, s Pac return false, nil } +func Lower(set []Package) Package { + var versionsMap map[string]Package = make(map[string]Package) + if len(set) == 0 { + panic("Best needs a list with elements") + } + versionsRaw := []string{} + for _, p := range set { + versionsRaw = append(versionsRaw, p.GetVersion()) + versionsMap[p.GetVersion()] = p + } + + versions := make([]*version.Version, len(versionsRaw)) + for i, raw := range versionsRaw { + v, _ := version.NewVersion(raw) + versions[i] = v + } + + // After this, the versions are properly sorted + sort.Sort(version.Collection(versions)) + + return versionsMap[versions[0].Original()] +} func Best(set []Package) Package { var versionsMap map[string]Package = make(map[string]Package) if len(set) == 0 {