mirror of
https://github.com/mudler/luet.git
synced 2025-09-02 07:45:02 +00:00
Adapt package.Best to take a Versioner interface
This commit is contained in:
@@ -338,7 +338,7 @@ func (db *BoltDatabase) FindPackageCandidate(p Package) (Package, error) {
|
|||||||
if err != nil || len(packages) == 0 {
|
if err != nil || len(packages) == 0 {
|
||||||
required = p
|
required = p
|
||||||
} else {
|
} else {
|
||||||
required = packages.Best()
|
required = packages.Best(nil)
|
||||||
|
|
||||||
}
|
}
|
||||||
return required, nil
|
return required, nil
|
||||||
|
@@ -349,7 +349,7 @@ func (db *InMemoryDatabase) FindPackageCandidate(p Package) (Package, error) {
|
|||||||
if err != nil || len(packages) == 0 {
|
if err != nil || len(packages) == 0 {
|
||||||
required = p
|
required = p
|
||||||
} else {
|
} else {
|
||||||
required = packages.Best()
|
required = packages.Best(nil)
|
||||||
|
|
||||||
}
|
}
|
||||||
return required, nil
|
return required, nil
|
||||||
|
@@ -23,15 +23,14 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
gentoo "github.com/Sabayon/pkgs-checker/pkg/gentoo"
|
gentoo "github.com/Sabayon/pkgs-checker/pkg/gentoo"
|
||||||
"github.com/crillab/gophersat/bf"
|
"github.com/crillab/gophersat/bf"
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
version "github.com/hashicorp/go-version"
|
|
||||||
"github.com/jinzhu/copier"
|
"github.com/jinzhu/copier"
|
||||||
|
version "github.com/mudler/luet/pkg/versioner"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -460,7 +459,13 @@ func (pack *DefaultPackage) RequiresContains(definitiondb PackageDatabase, s Pac
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (set Packages) Best() Package {
|
// Best returns the best version of the package (the most bigger) from a list
|
||||||
|
// Accepts a versioner interface to change the ordering policy. If null is supplied
|
||||||
|
// It defaults to version.WrappedVersioner which supports both semver and debian versioning
|
||||||
|
func (set Packages) Best(v version.Versioner) Package {
|
||||||
|
if v == nil {
|
||||||
|
v = &version.WrappedVersioner{}
|
||||||
|
}
|
||||||
var versionsMap map[string]Package = make(map[string]Package)
|
var versionsMap map[string]Package = make(map[string]Package)
|
||||||
if len(set) == 0 {
|
if len(set) == 0 {
|
||||||
panic("Best needs a list with elements")
|
panic("Best needs a list with elements")
|
||||||
@@ -468,22 +473,12 @@ func (set Packages) Best() Package {
|
|||||||
|
|
||||||
versionsRaw := []string{}
|
versionsRaw := []string{}
|
||||||
for _, p := range set {
|
for _, p := range set {
|
||||||
// TODO: This is temporary!.
|
versionsRaw = append(versionsRaw, p.GetVersion())
|
||||||
sanitizedVersion := strings.ReplaceAll(p.GetVersion(), "_", "-")
|
versionsMap[p.GetVersion()] = p
|
||||||
versionsRaw = append(versionsRaw, sanitizedVersion)
|
|
||||||
versionsMap[sanitizedVersion] = p
|
|
||||||
}
|
}
|
||||||
|
sorted := v.Sort(versionsRaw)
|
||||||
|
|
||||||
versions := make([]*version.Version, len(versionsRaw))
|
return versionsMap[sorted[len(sorted)-1]]
|
||||||
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[len(versions)-1].Original()]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pack *DefaultPackage) BuildFormula(definitiondb PackageDatabase, db PackageDatabase) ([]bf.Formula, error) {
|
func (pack *DefaultPackage) BuildFormula(definitiondb PackageDatabase, db PackageDatabase) ([]bf.Formula, error) {
|
||||||
|
@@ -58,7 +58,7 @@ var _ = Describe("Package", func() {
|
|||||||
Expect(lst).To(ContainElement(a1))
|
Expect(lst).To(ContainElement(a1))
|
||||||
Expect(lst).ToNot(ContainElement(a01))
|
Expect(lst).ToNot(ContainElement(a01))
|
||||||
Expect(len(lst)).To(Equal(2))
|
Expect(len(lst)).To(Equal(2))
|
||||||
p := lst.Best()
|
p := lst.Best(nil)
|
||||||
Expect(p).To(Equal(a11))
|
Expect(p).To(Equal(a11))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@@ -141,7 +141,7 @@ func (s *Solver) getList(db pkg.PackageDatabase, lsp pkg.Packages) (pkg.Packages
|
|||||||
if err != nil || len(packages) == 0 {
|
if err != nil || len(packages) == 0 {
|
||||||
cp = pp
|
cp = pp
|
||||||
} else {
|
} else {
|
||||||
cp = packages.Best()
|
cp = packages.Best(nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ls = append(ls, cp)
|
ls = append(ls, cp)
|
||||||
@@ -229,7 +229,7 @@ func (s *Solver) Upgrade(checkconflicts bool) (pkg.Packages, PackagesAssertions,
|
|||||||
installedcopy.CreatePackage(p)
|
installedcopy.CreatePackage(p)
|
||||||
packages, ok := availableCache[p.GetName()+p.GetCategory()]
|
packages, ok := availableCache[p.GetName()+p.GetCategory()]
|
||||||
if ok && len(packages) != 0 {
|
if ok && len(packages) != 0 {
|
||||||
best := packages.Best()
|
best := packages.Best(nil)
|
||||||
if best.GetVersion() != p.GetVersion() {
|
if best.GetVersion() != p.GetVersion() {
|
||||||
toUninstall = append(toUninstall, p)
|
toUninstall = append(toUninstall, p)
|
||||||
toInstall = append(toInstall, best)
|
toInstall = append(toInstall, best)
|
||||||
@@ -272,7 +272,7 @@ func (s *Solver) Uninstall(c pkg.Package, checkconflicts bool) (pkg.Packages, er
|
|||||||
if err != nil || len(packages) == 0 {
|
if err != nil || len(packages) == 0 {
|
||||||
candidate = c
|
candidate = c
|
||||||
} else {
|
} else {
|
||||||
candidate = packages.Best()
|
candidate = packages.Best(nil)
|
||||||
}
|
}
|
||||||
//Relax search, otherwise we cannot compute solutions for packages not in definitions
|
//Relax search, otherwise we cannot compute solutions for packages not in definitions
|
||||||
// return nil, errors.Wrap(err, "Package not found between installed")
|
// return nil, errors.Wrap(err, "Package not found between installed")
|
||||||
|
@@ -882,7 +882,7 @@ var _ = Describe("Solver", func() {
|
|||||||
Expect(lst).To(ContainElement(a03))
|
Expect(lst).To(ContainElement(a03))
|
||||||
Expect(lst).ToNot(ContainElement(old))
|
Expect(lst).ToNot(ContainElement(old))
|
||||||
Expect(len(lst)).To(Equal(5))
|
Expect(len(lst)).To(Equal(5))
|
||||||
p := lst.Best()
|
p := lst.Best(nil)
|
||||||
Expect(p).To(Equal(a03))
|
Expect(p).To(Equal(a03))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user