Add package Revdeps expansion #12

This commit is contained in:
Ettore Di Giacinto
2019-11-14 23:44:22 +01:00
parent ef54b3d4b5
commit 891daf4b71
2 changed files with 47 additions and 0 deletions

View File

@@ -37,6 +37,7 @@ type Package interface {
GetFingerPrint() string
Requires([]*DefaultPackage) Package
Conflicts([]*DefaultPackage) Package
Revdeps(world *[]Package) []Package
GetRequires() []*DefaultPackage
GetConflicts() []*DefaultPackage
@@ -244,6 +245,23 @@ func (p *DefaultPackage) Expand(world *[]Package) ([]Package, error) {
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) {
return NewInMemoryDatabase(true).GetPackage(ID)
}

View File

@@ -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() {
a := NewPackage("A", ">=1.0", []*DefaultPackage{}, []*DefaultPackage{})
a1 := NewPackage("A", "1.0", []*DefaultPackage{a}, []*DefaultPackage{})