mirror of
https://github.com/mudler/luet.git
synced 2025-08-01 07:21:21 +00:00
🎨 Refactor, use ensureoder where necessary
This commit is contained in:
parent
03e72653c7
commit
2b3a1555f0
@ -30,7 +30,7 @@ func (a *PackageAssert) String() string {
|
||||
return fmt.Sprintf("%s/%s %s %s", a.Package.GetCategory(), a.Package.GetName(), a.Package.GetVersion(), msg)
|
||||
}
|
||||
|
||||
func (assertions PackagesAssertions) EnsureOrder() PackagesAssertions {
|
||||
func (assertions PackagesAssertions) EnsureOrder() (PackagesAssertions, error) {
|
||||
|
||||
orderedAssertions := PackagesAssertions{}
|
||||
unorderedAssertions := PackagesAssertions{}
|
||||
@ -62,19 +62,19 @@ func (assertions PackagesAssertions) EnsureOrder() PackagesAssertions {
|
||||
}
|
||||
result, ok := graph.Toposort()
|
||||
if !ok {
|
||||
panic("Cycle found")
|
||||
return nil, fmt.Errorf("cycle found")
|
||||
}
|
||||
for _, res := range result {
|
||||
a, ok := tmpMap[res]
|
||||
if !ok {
|
||||
panic("fail")
|
||||
// continue
|
||||
return nil, fmt.Errorf("cycle found")
|
||||
|
||||
}
|
||||
orderedAssertions = append(orderedAssertions, a)
|
||||
// orderedAssertions = append(PackagesAssertions{a}, orderedAssertions...) // push upfront
|
||||
}
|
||||
//helpers.ReverseAny(orderedAssertions)
|
||||
return orderedAssertions
|
||||
return orderedAssertions, nil
|
||||
}
|
||||
|
||||
// SearchByName searches a string matching a package in the assetion list
|
||||
|
@ -22,6 +22,8 @@ import (
|
||||
"github.com/ghodss/yaml"
|
||||
"github.com/mudler/luet/pkg/api/core/types"
|
||||
box "github.com/mudler/luet/pkg/box"
|
||||
fileHelper "github.com/mudler/luet/pkg/helpers/file"
|
||||
"github.com/mudler/luet/pkg/tree"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
@ -90,3 +92,47 @@ func NewLuetFinalizerFromYaml(data []byte) (*LuetFinalizer, error) {
|
||||
}
|
||||
return &p, err
|
||||
}
|
||||
|
||||
func OrderFinalizers(allRepos types.PackageDatabase, toInstall map[string]ArtifactMatch, solution types.PackagesAssertions) ([]*types.Package, error) {
|
||||
var toFinalize []*types.Package
|
||||
if len(toInstall) == 1 {
|
||||
for _, w := range toInstall {
|
||||
if fileHelper.Exists(w.Package.Rel(tree.FinalizerFile)) {
|
||||
// Finalizers needs to run in order and in sequence.
|
||||
ordered, err := solution.Order(allRepos, w.Package.GetFingerPrint())
|
||||
if err != nil {
|
||||
return toFinalize, errors.Wrap(err, "While order a solution for "+w.Package.HumanReadableString())
|
||||
}
|
||||
ORDER:
|
||||
for _, ass := range ordered {
|
||||
if ass.Value {
|
||||
installed, ok := toInstall[ass.Package.GetFingerPrint()]
|
||||
if !ok {
|
||||
// It was a dep already installed in the system, so we can skip it safely
|
||||
continue ORDER
|
||||
}
|
||||
treePackage, err := installed.Repository.GetTree().GetDatabase().FindPackage(ass.Package)
|
||||
if err != nil {
|
||||
return toFinalize, errors.Wrap(err, "Error getting package "+ass.Package.HumanReadableString())
|
||||
}
|
||||
|
||||
toFinalize = append(toFinalize, treePackage)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
assertions, err := solution.EnsureOrder()
|
||||
if err != nil {
|
||||
return toFinalize, err
|
||||
}
|
||||
|
||||
for _, o := range assertions {
|
||||
if o.Value {
|
||||
toFinalize = append(toFinalize, o.Package)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return toFinalize, nil
|
||||
}
|
||||
|
@ -816,33 +816,7 @@ func (l *LuetInstaller) computeInstall(o Option, syncedRepos Repositories, cp ty
|
||||
func (l *LuetInstaller) getFinalizers(allRepos types.PackageDatabase, solution types.PackagesAssertions, toInstall map[string]ArtifactMatch, nodeps bool) ([]*types.Package, error) {
|
||||
var toFinalize []*types.Package
|
||||
if !nodeps {
|
||||
// TODO: Lower those errors as l.Options.Context.Warning
|
||||
for _, w := range toInstall {
|
||||
if !fileHelper.Exists(w.Package.Rel(tree.FinalizerFile)) {
|
||||
continue
|
||||
}
|
||||
// Finalizers needs to run in order and in sequence.
|
||||
ordered, err := solution.Order(allRepos, w.Package.GetFingerPrint())
|
||||
if err != nil {
|
||||
return toFinalize, errors.Wrap(err, "While order a solution for "+w.Package.HumanReadableString())
|
||||
}
|
||||
ORDER:
|
||||
for _, ass := range ordered {
|
||||
if ass.Value {
|
||||
installed, ok := toInstall[ass.Package.GetFingerPrint()]
|
||||
if !ok {
|
||||
// It was a dep already installed in the system, so we can skip it safely
|
||||
continue ORDER
|
||||
}
|
||||
treePackage, err := installed.Repository.GetTree().GetDatabase().FindPackage(ass.Package)
|
||||
if err != nil {
|
||||
return toFinalize, errors.Wrap(err, "Error getting package "+ass.Package.HumanReadableString())
|
||||
}
|
||||
|
||||
toFinalize = append(toFinalize, treePackage)
|
||||
}
|
||||
}
|
||||
}
|
||||
return OrderFinalizers(allRepos, toInstall, solution)
|
||||
} else {
|
||||
for _, c := range toInstall {
|
||||
if !fileHelper.Exists(c.Package.Rel(tree.FinalizerFile)) {
|
||||
|
Loading…
Reference in New Issue
Block a user