mirror of
https://github.com/mudler/luet.git
synced 2025-09-14 14:22:38 +00:00
Add package Revdeps expansion #12
This commit is contained in:
@@ -37,6 +37,7 @@ type Package interface {
|
|||||||
GetFingerPrint() string
|
GetFingerPrint() string
|
||||||
Requires([]*DefaultPackage) Package
|
Requires([]*DefaultPackage) Package
|
||||||
Conflicts([]*DefaultPackage) Package
|
Conflicts([]*DefaultPackage) Package
|
||||||
|
Revdeps(world *[]Package) []Package
|
||||||
|
|
||||||
GetRequires() []*DefaultPackage
|
GetRequires() []*DefaultPackage
|
||||||
GetConflicts() []*DefaultPackage
|
GetConflicts() []*DefaultPackage
|
||||||
@@ -244,6 +245,23 @@ func (p *DefaultPackage) Expand(world *[]Package) ([]Package, error) {
|
|||||||
return versionsInWorld, nil
|
return versionsInWorld, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *DefaultPackage) Revdeps(world *[]Package) []Package {
|
||||||
|
var versionsInWorld []Package
|
||||||
|
for _, w := range *world {
|
||||||
|
if w.GetFingerPrint() == p.GetFingerPrint() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
for _, r := range w.GetRequires() {
|
||||||
|
if r.GetFingerPrint() == p.GetFingerPrint() {
|
||||||
|
versionsInWorld = append(versionsInWorld, w)
|
||||||
|
versionsInWorld = append(versionsInWorld, w.Revdeps(world)...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return versionsInWorld
|
||||||
|
}
|
||||||
|
|
||||||
func DecodePackage(ID string) (Package, error) {
|
func DecodePackage(ID string) (Package, error) {
|
||||||
return NewInMemoryDatabase(true).GetPackage(ID)
|
return NewInMemoryDatabase(true).GetPackage(ID)
|
||||||
}
|
}
|
||||||
|
@@ -38,6 +38,35 @@ var _ = Describe("Package", func() {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Context("revdeps", func() {
|
||||||
|
a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
b := NewPackage("B", "1.0", []*DefaultPackage{a}, []*DefaultPackage{})
|
||||||
|
c := NewPackage("C", "1.1", []*DefaultPackage{b}, []*DefaultPackage{})
|
||||||
|
d := NewPackage("D", "0.1", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
It("Computes correctly", func() {
|
||||||
|
lst := a.Revdeps(&[]Package{a, b, c, d})
|
||||||
|
Expect(lst).To(ContainElement(b))
|
||||||
|
Expect(lst).To(ContainElement(c))
|
||||||
|
Expect(len(lst)).To(Equal(2))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Context("revdeps", func() {
|
||||||
|
a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
b := NewPackage("B", "1.0", []*DefaultPackage{a}, []*DefaultPackage{})
|
||||||
|
c := NewPackage("C", "1.1", []*DefaultPackage{b}, []*DefaultPackage{})
|
||||||
|
d := NewPackage("D", "0.1", []*DefaultPackage{c}, []*DefaultPackage{})
|
||||||
|
e := NewPackage("D", "0.1", []*DefaultPackage{c}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
It("Computes correctly", func() {
|
||||||
|
lst := b.Revdeps(&[]Package{a, b, c, d, e})
|
||||||
|
Expect(lst).To(ContainElement(c))
|
||||||
|
Expect(lst).To(ContainElement(d))
|
||||||
|
Expect(lst).To(ContainElement(e))
|
||||||
|
Expect(len(lst)).To(Equal(3))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
Context("RequiresContains", func() {
|
Context("RequiresContains", func() {
|
||||||
a := NewPackage("A", ">=1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
a := NewPackage("A", ">=1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
a1 := NewPackage("A", "1.0", []*DefaultPackage{a}, []*DefaultPackage{})
|
a1 := NewPackage("A", "1.0", []*DefaultPackage{a}, []*DefaultPackage{})
|
||||||
|
Reference in New Issue
Block a user