mirror of
https://github.com/mudler/luet.git
synced 2025-09-01 15:18:28 +00:00
Revert "Do not allow multiple versions in the results"
This reverts commit 15534ce253
.
This commit is contained in:
@@ -19,7 +19,6 @@ import (
|
||||
"crypto/sha256"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
"unicode"
|
||||
|
||||
pkg "github.com/mudler/luet/pkg/package"
|
||||
@@ -54,23 +53,7 @@ func DecodeModel(model map[string]bool, db pkg.PackageDatabase) (PackagesAsserti
|
||||
}
|
||||
ass = append(ass, PackageAssert{Package: a.(*pkg.DefaultPackage), Value: v})
|
||||
}
|
||||
|
||||
results := make(PackagesAssertions, 0)
|
||||
|
||||
// FIXME: This should go away when BuildFormula() in Packages will take into account different versions in range
|
||||
// That is, it needs to select one of the versions in a requirment range ( >= 0.1 ) that mets the constraints
|
||||
for _, a := range ass {
|
||||
if !results.Contains(a.Package) {
|
||||
results = append(results, a)
|
||||
continue
|
||||
}
|
||||
if results.ContainsBigger(a.Package) {
|
||||
//swap
|
||||
results = results.DropPackageName(a.Package)
|
||||
results = append(results, a)
|
||||
}
|
||||
}
|
||||
return results, nil
|
||||
return ass, nil
|
||||
}
|
||||
|
||||
func (a *PackageAssert) Explain() {
|
||||
@@ -92,37 +75,6 @@ func (a *PackageAssert) ToString() string {
|
||||
return fmt.Sprintf("%s/%s %s %s", a.Package.GetCategory(), a.Package.GetName(), a.Package.GetVersion(), msg)
|
||||
}
|
||||
|
||||
func (assertions PackagesAssertions) Contains(p pkg.Package) bool {
|
||||
for _, a := range assertions {
|
||||
if a.Package.GetPackageName() == p.GetPackageName() && a.Value == true {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (assertions PackagesAssertions) Search(f string) *PackageAssert {
|
||||
for _, a := range assertions {
|
||||
if strings.Contains(a.Package.GetFingerPrint(), f) {
|
||||
return &a
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (assertions PackagesAssertions) ContainsBigger(p pkg.Package) bool {
|
||||
for _, a := range assertions {
|
||||
if a.Package.GetPackageName() == p.GetPackageName() && a.Value == true && a.Package.Bigger(p) {
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (assertions PackagesAssertions) EnsureOrder() PackagesAssertions {
|
||||
|
||||
orderedAssertions := PackagesAssertions{}
|
||||
@@ -175,16 +127,13 @@ func (assertions PackagesAssertions) Order(definitiondb pkg.PackageDatabase, fin
|
||||
orderedAssertions := PackagesAssertions{}
|
||||
unorderedAssertions := PackagesAssertions{}
|
||||
fingerprints := []string{}
|
||||
tmpMap := map[string]PackageAssert{}
|
||||
|
||||
tmpMap := map[string]PackageAssert{}
|
||||
graph := topsort.NewGraph()
|
||||
assertionDb := pkg.NewInMemoryDatabase(false)
|
||||
|
||||
for _, a := range assertions {
|
||||
graph.AddNode(a.Package.GetFingerPrint())
|
||||
assertionDb.CreatePackage(a.Package)
|
||||
tmpMap[a.Package.GetFingerPrint()] = a
|
||||
|
||||
fingerprints = append(fingerprints, a.Package.GetFingerPrint())
|
||||
unorderedAssertions = append(unorderedAssertions, a) // Build a list of the ones that must be ordered
|
||||
|
||||
@@ -202,14 +151,13 @@ func (assertions PackagesAssertions) Order(definitiondb pkg.PackageDatabase, fin
|
||||
// graph.AddNodes(fingerprints...)
|
||||
for _, a := range unorderedAssertions {
|
||||
for _, requiredDef := range a.Package.GetRequires() {
|
||||
req := assertions.Search(requiredDef.GetPackageName())
|
||||
req, err := definitiondb.FindPackageCandidate(requiredDef)
|
||||
if err != nil {
|
||||
req = requiredDef
|
||||
}
|
||||
|
||||
// if req == nil {
|
||||
// req = requiredDef
|
||||
// }
|
||||
// Expand also here, as we need to order them (or instead the solver should give back the dep correctly?)
|
||||
|
||||
graph.AddEdge(a.Package.GetFingerPrint(), req.Package.GetFingerPrint())
|
||||
graph.AddEdge(a.Package.GetFingerPrint(), req.GetFingerPrint())
|
||||
}
|
||||
}
|
||||
result, err := graph.TopSort(fingerprint)
|
||||
@@ -217,17 +165,12 @@ func (assertions PackagesAssertions) Order(definitiondb pkg.PackageDatabase, fin
|
||||
panic(err)
|
||||
}
|
||||
for _, res := range result {
|
||||
a := assertions.Search(res)
|
||||
if a == nil {
|
||||
ass, ok := tmpMap[res]
|
||||
if !ok {
|
||||
//panic("fail")
|
||||
continue
|
||||
}
|
||||
a = &ass
|
||||
a, ok := tmpMap[res]
|
||||
if !ok {
|
||||
panic("fail")
|
||||
// continue
|
||||
}
|
||||
|
||||
orderedAssertions = append(orderedAssertions, *a)
|
||||
orderedAssertions = append(orderedAssertions, a)
|
||||
// orderedAssertions = append(PackagesAssertions{a}, orderedAssertions...) // push upfront
|
||||
}
|
||||
//helpers.ReverseAny(orderedAssertions)
|
||||
@@ -296,14 +239,3 @@ func (assertions PackagesAssertions) Drop(p pkg.Package) PackagesAssertions {
|
||||
}
|
||||
return ass
|
||||
}
|
||||
|
||||
func (assertions PackagesAssertions) DropPackageName(p pkg.Package) PackagesAssertions {
|
||||
ass := PackagesAssertions{}
|
||||
|
||||
for _, a := range assertions {
|
||||
if a.Package.GetPackageName() != p.GetPackageName() {
|
||||
ass = append(ass, a)
|
||||
}
|
||||
}
|
||||
return ass
|
||||
}
|
||||
|
Reference in New Issue
Block a user