Add Bigger/Lower to Package to allow version comparison easier

This commit is contained in:
Ettore Di Giacinto 2019-12-13 17:18:51 +01:00
parent 69be9a2dd1
commit adcd8df49e
No known key found for this signature in database
GPG Key ID: 1ADA699B145A2D1C

View File

@ -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 {