mirror of
https://github.com/mudler/luet.git
synced 2025-09-01 23:37:07 +00:00
solver.Order now return error
This commit is contained in:
@@ -185,7 +185,9 @@ func NewTreeValidateCommand() *cobra.Command {
|
|||||||
if withSolver {
|
if withSolver {
|
||||||
Spinner(32)
|
Spinner(32)
|
||||||
solution, err := depSolver.Install(pkg.Packages{r})
|
solution, err := depSolver.Install(pkg.Packages{r})
|
||||||
solution.Order(reciper.GetDatabase(), r.GetFingerPrint())
|
if err == nil {
|
||||||
|
_, err = solution.Order(reciper.GetDatabase(), r.GetFingerPrint())
|
||||||
|
}
|
||||||
SpinnerStop()
|
SpinnerStop()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -438,7 +438,10 @@ func (cs *LuetCompiler) ComputeDepTree(p CompilationSpec) (solver.PackagesAssert
|
|||||||
return nil, errors.Wrap(err, "While computing a solution for "+p.GetPackage().HumanReadableString())
|
return nil, errors.Wrap(err, "While computing a solution for "+p.GetPackage().HumanReadableString())
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies := solution.Order(cs.Database, p.GetPackage().GetFingerPrint())
|
dependencies, err := solution.Order(cs.Database, p.GetPackage().GetFingerPrint())
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "While order a solution for "+p.GetPackage().HumanReadableString())
|
||||||
|
}
|
||||||
|
|
||||||
assertions := solver.PackagesAssertions{}
|
assertions := solver.PackagesAssertions{}
|
||||||
for _, assertion := range dependencies { //highly dependent on the order
|
for _, assertion := range dependencies { //highly dependent on the order
|
||||||
|
@@ -326,7 +326,10 @@ func (l *LuetInstaller) install(syncedRepos Repositories, cp pkg.Packages, s *Sy
|
|||||||
// TODO: Lower those errors as warning
|
// TODO: Lower those errors as warning
|
||||||
for _, w := range p {
|
for _, w := range p {
|
||||||
// Finalizers needs to run in order and in sequence.
|
// Finalizers needs to run in order and in sequence.
|
||||||
ordered := solution.Order(allRepos, w.GetFingerPrint())
|
ordered, err := solution.Order(allRepos, w.GetFingerPrint())
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "While order a solution for "+w.HumanReadableString())
|
||||||
|
}
|
||||||
ORDER:
|
ORDER:
|
||||||
for _, ass := range ordered {
|
for _, ass := range ordered {
|
||||||
if ass.Value {
|
if ass.Value {
|
||||||
|
@@ -23,6 +23,7 @@ import (
|
|||||||
|
|
||||||
pkg "github.com/mudler/luet/pkg/package"
|
pkg "github.com/mudler/luet/pkg/package"
|
||||||
toposort "github.com/philopon/go-toposort"
|
toposort "github.com/philopon/go-toposort"
|
||||||
|
"github.com/pkg/errors"
|
||||||
"github.com/stevenle/topsort"
|
"github.com/stevenle/topsort"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -145,7 +146,7 @@ func (assertions PackagesAssertions) Search(f string) *PackageAssert {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (assertions PackagesAssertions) Order(definitiondb pkg.PackageDatabase, fingerprint string) PackagesAssertions {
|
func (assertions PackagesAssertions) Order(definitiondb pkg.PackageDatabase, fingerprint string) (PackagesAssertions, error) {
|
||||||
|
|
||||||
orderedAssertions := PackagesAssertions{}
|
orderedAssertions := PackagesAssertions{}
|
||||||
unorderedAssertions := PackagesAssertions{}
|
unorderedAssertions := PackagesAssertions{}
|
||||||
@@ -191,19 +192,19 @@ func (assertions PackagesAssertions) Order(definitiondb pkg.PackageDatabase, fin
|
|||||||
}
|
}
|
||||||
result, err := graph.TopSort(fingerprint)
|
result, err := graph.TopSort(fingerprint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
return nil, errors.Wrap(err, "fail on sorting "+fingerprint)
|
||||||
}
|
}
|
||||||
for _, res := range result {
|
for _, res := range result {
|
||||||
a, ok := tmpMap[res]
|
a, ok := tmpMap[res]
|
||||||
if !ok {
|
if !ok {
|
||||||
panic("fail looking for " + res)
|
return nil, errors.New("fail looking for " + res)
|
||||||
// continue
|
// continue
|
||||||
}
|
}
|
||||||
orderedAssertions = append(orderedAssertions, a)
|
orderedAssertions = append(orderedAssertions, a)
|
||||||
// orderedAssertions = append(PackagesAssertions{a}, orderedAssertions...) // push upfront
|
// orderedAssertions = append(PackagesAssertions{a}, orderedAssertions...) // push upfront
|
||||||
}
|
}
|
||||||
//helpers.ReverseAny(orderedAssertions)
|
//helpers.ReverseAny(orderedAssertions)
|
||||||
return orderedAssertions
|
return orderedAssertions, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (assertions PackagesAssertions) Explain() string {
|
func (assertions PackagesAssertions) Explain() string {
|
||||||
|
@@ -72,7 +72,8 @@ var _ = Describe("Decoder", func() {
|
|||||||
|
|
||||||
Expect(len(solution)).To(Equal(6))
|
Expect(len(solution)).To(Equal(6))
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
solution = solution.Order(dbDefinitions, A.GetFingerPrint())
|
solution, err = solution.Order(dbDefinitions, A.GetFingerPrint())
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
// Expect(len(solution)).To(Equal(6))
|
// Expect(len(solution)).To(Equal(6))
|
||||||
Expect(solution[0].Package.GetName()).To(Equal("G"))
|
Expect(solution[0].Package.GetName()).To(Equal("G"))
|
||||||
Expect(solution[1].Package.GetName()).To(Equal("H"))
|
Expect(solution[1].Package.GetName()).To(Equal("H"))
|
||||||
@@ -188,7 +189,8 @@ var _ = Describe("Decoder", func() {
|
|||||||
|
|
||||||
Expect(len(solution)).To(Equal(6))
|
Expect(len(solution)).To(Equal(6))
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
solution = solution.Order(dbDefinitions, A.GetFingerPrint())
|
solution, err = solution.Order(dbDefinitions, A.GetFingerPrint())
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
// Expect(len(solution)).To(Equal(6))
|
// Expect(len(solution)).To(Equal(6))
|
||||||
Expect(solution[0].Package.GetName()).To(Equal("G"))
|
Expect(solution[0].Package.GetName()).To(Equal("G"))
|
||||||
Expect(solution[1].Package.GetName()).To(Equal("H"))
|
Expect(solution[1].Package.GetName()).To(Equal("H"))
|
||||||
@@ -206,7 +208,8 @@ var _ = Describe("Decoder", func() {
|
|||||||
|
|
||||||
Expect(len(solution)).To(Equal(6))
|
Expect(len(solution)).To(Equal(6))
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
solution = solution.Order(dbDefinitions, B.GetFingerPrint())
|
solution, err = solution.Order(dbDefinitions, B.GetFingerPrint())
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
hash2 := solution.AssertionHash()
|
hash2 := solution.AssertionHash()
|
||||||
|
|
||||||
// Expect(len(solution)).To(Equal(6))
|
// Expect(len(solution)).To(Equal(6))
|
||||||
@@ -243,7 +246,11 @@ var _ = Describe("Decoder", func() {
|
|||||||
|
|
||||||
solution2, err := s.Install([]pkg.Package{Z})
|
solution2, err := s.Install([]pkg.Package{Z})
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(solution.Order(dbDefinitions, Y.GetFingerPrint()).Drop(Y).AssertionHash() == solution2.Order(dbDefinitions, Z.GetFingerPrint()).Drop(Z).AssertionHash()).To(BeTrue())
|
orderY, err := solution.Order(dbDefinitions, Y.GetFingerPrint())
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
orderZ, err := solution2.Order(dbDefinitions, Z.GetFingerPrint())
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(orderY.Drop(Y).AssertionHash() == orderZ.Drop(Z).AssertionHash()).To(BeTrue())
|
||||||
})
|
})
|
||||||
|
|
||||||
It("Hashes them, Cuts them and could be used for comparison", func() {
|
It("Hashes them, Cuts them and could be used for comparison", func() {
|
||||||
@@ -267,9 +274,13 @@ var _ = Describe("Decoder", func() {
|
|||||||
|
|
||||||
solution2, err := s.Install([]pkg.Package{Z})
|
solution2, err := s.Install([]pkg.Package{Z})
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(solution.Order(dbDefinitions, Y.GetFingerPrint()).Cut(Y).Drop(Y)).To(Equal(solution2.Order(dbDefinitions, Z.GetFingerPrint()).Cut(Z).Drop(Z)))
|
orderY, err := solution.Order(dbDefinitions, Y.GetFingerPrint())
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
orderZ, err := solution2.Order(dbDefinitions, Z.GetFingerPrint())
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(orderY.Cut(Y).Drop(Y)).To(Equal(orderZ.Cut(Z).Drop(Z)))
|
||||||
|
|
||||||
Expect(solution.Order(dbDefinitions, Y.GetFingerPrint()).Cut(Y).Drop(Y).AssertionHash()).To(Equal(solution2.Order(dbDefinitions, Z.GetFingerPrint()).Cut(Z).Drop(Z).AssertionHash()))
|
Expect(orderY.Cut(Y).Drop(Y).AssertionHash()).To(Equal(orderZ.Cut(Z).Drop(Z).AssertionHash()))
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
@@ -65,7 +65,8 @@ var _ = Describe("Tree", func() {
|
|||||||
solution, err := s.Install([]pkg.Package{pack})
|
solution, err := s.Install([]pkg.Package{pack})
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
solution = solution.Order(generalRecipe.GetDatabase(), pack.GetFingerPrint())
|
solution, err = solution.Order(generalRecipe.GetDatabase(), pack.GetFingerPrint())
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
Expect(solution[0].Package.GetName()).To(Equal("a"))
|
Expect(solution[0].Package.GetName()).To(Equal("a"))
|
||||||
Expect(solution[0].Value).To(BeFalse())
|
Expect(solution[0].Value).To(BeFalse())
|
||||||
@@ -137,7 +138,8 @@ var _ = Describe("Tree", func() {
|
|||||||
solution, err := s.Install([]pkg.Package{Dd})
|
solution, err := s.Install([]pkg.Package{Dd})
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
solution = solution.Order(generalRecipe.GetDatabase(), Dd.GetFingerPrint())
|
solution, err = solution.Order(generalRecipe.GetDatabase(), Dd.GetFingerPrint())
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
pack, err := generalRecipe.GetDatabase().FindPackage(&pkg.DefaultPackage{Name: "a", Category: "test", Version: "1.0"})
|
pack, err := generalRecipe.GetDatabase().FindPackage(&pkg.DefaultPackage{Name: "a", Category: "test", Version: "1.0"})
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user