diff --git a/pkg/package/database_boltdb.go b/pkg/package/database_boltdb.go index 785748c4..9e9b13d5 100644 --- a/pkg/package/database_boltdb.go +++ b/pkg/package/database_boltdb.go @@ -362,10 +362,22 @@ func (db *BoltDatabase) FindPackageCandidate(p Package) (Package, error) { // FindPackages return the list of the packages beloging to cat/name (any versions in requested range) // FIXME: Optimize, see inmemorydb func (db *BoltDatabase) FindPackages(p Package) (Packages, error) { + if !p.IsSelector() { + pack, err := db.FindPackage(p) + if err != nil { + return []Package{}, err + } + return []Package{pack}, nil + } + // Provides: Treat as the replaced package here if provided, err := db.getProvide(p); err == nil { p = provided + if !provided.IsSelector() { + return Packages{provided}, nil + } } + var versionsInWorld []Package for _, w := range db.World() { if w.GetName() != p.GetName() || w.GetCategory() != p.GetCategory() { diff --git a/pkg/package/database_boltdb_test.go b/pkg/package/database_boltdb_test.go index cfc8992c..238a06d6 100644 --- a/pkg/package/database_boltdb_test.go +++ b/pkg/package/database_boltdb_test.go @@ -81,7 +81,6 @@ var _ = Describe("BoltDB Database", func() { }) It("Find best package candidate", func() { - db := NewInMemoryDatabase(false) a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{}) a3 := NewPackage("A", "1.3", []*DefaultPackage{}, []*DefaultPackage{}) @@ -102,7 +101,6 @@ var _ = Describe("BoltDB Database", func() { }) It("Find specific package candidate", func() { - db := NewInMemoryDatabase(false) a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{}) a3 := NewPackage("A", "1.3", []*DefaultPackage{}, []*DefaultPackage{}) @@ -123,7 +121,6 @@ var _ = Describe("BoltDB Database", func() { }) It("Provides replaces definitions", func() { - db := NewInMemoryDatabase(false) a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{}) a3 := NewPackage("A", "1.3", []*DefaultPackage{}, []*DefaultPackage{}) @@ -147,6 +144,144 @@ var _ = Describe("BoltDB Database", func() { Expect(pack).To(Equal(a3)) }) + Context("Provides", func() { + + It("replaces definitions", func() { + a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) + a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{}) + a3 := NewPackage("A", "1.3", []*DefaultPackage{}, []*DefaultPackage{}) + + a3.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}}) + Expect(a3.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}})) + + _, err := db.CreatePackage(a) + Expect(err).ToNot(HaveOccurred()) + + _, err = db.CreatePackage(a1) + Expect(err).ToNot(HaveOccurred()) + + _, err = db.CreatePackage(a3) + Expect(err).ToNot(HaveOccurred()) + + s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) + + pack, err := db.FindPackage(s) + Expect(err).ToNot(HaveOccurred()) + Expect(pack).To(Equal(a3)) + }) + + It("replaces definitions", func() { + a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) + a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{}) + a3 := NewPackage("A", "1.3", []*DefaultPackage{}, []*DefaultPackage{}) + + a3.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}}) + Expect(a3.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}})) + + _, err := db.CreatePackage(a) + Expect(err).ToNot(HaveOccurred()) + + _, err = db.CreatePackage(a1) + Expect(err).ToNot(HaveOccurred()) + + _, err = db.CreatePackage(a3) + Expect(err).ToNot(HaveOccurred()) + + s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) + + packs, err := db.FindPackages(s) + Expect(err).ToNot(HaveOccurred()) + Expect(packs).To(ContainElement(a3)) + }) + + It("replaces definitions", func() { + a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) + a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{}) + z := NewPackage("Z", "1.3", []*DefaultPackage{}, []*DefaultPackage{}) + + z.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}}) + Expect(z.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}})) + + _, err := db.CreatePackage(a) + Expect(err).ToNot(HaveOccurred()) + + _, err = db.CreatePackage(a1) + Expect(err).ToNot(HaveOccurred()) + + _, err = db.CreatePackage(z) + Expect(err).ToNot(HaveOccurred()) + + s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) + + packs, err := db.FindPackages(s) + Expect(err).ToNot(HaveOccurred()) + Expect(packs).To(ContainElement(z)) + }) + + It("replaces definitions of unexisting packages", func() { + a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{}) + z := NewPackage("Z", "1.3", []*DefaultPackage{}, []*DefaultPackage{}) + + z.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}}) + Expect(z.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}})) + + _, err := db.CreatePackage(a1) + Expect(err).ToNot(HaveOccurred()) + + _, err = db.CreatePackage(z) + Expect(err).ToNot(HaveOccurred()) + + s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) + + packs, err := db.FindPackages(s) + Expect(err).ToNot(HaveOccurred()) + Expect(packs).To(ContainElement(z)) + }) + + It("replaces definitions of a required package", func() { + + c := NewPackage("C", "1.1", []*DefaultPackage{{Name: "A", Category: "", Version: ">=0"}}, []*DefaultPackage{}) + z := NewPackage("Z", "1.3", []*DefaultPackage{}, []*DefaultPackage{}) + + z.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}}) + Expect(z.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}})) + + _, err := db.CreatePackage(z) + Expect(err).ToNot(HaveOccurred()) + _, err = db.CreatePackage(c) + Expect(err).ToNot(HaveOccurred()) + + s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) + + packs, err := db.FindPackages(s) + Expect(err).ToNot(HaveOccurred()) + Expect(packs).To(ContainElement(z)) + }) + + When("Searching with selectors", func() { + It("replaces definitions of a required package", func() { + + c := NewPackage("C", "1.1", []*DefaultPackage{{Name: "A", Category: "", Version: ">=0"}}, []*DefaultPackage{}) + z := NewPackage("Z", "1.3", []*DefaultPackage{}, []*DefaultPackage{}) + + z.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}}) + Expect(z.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: ">=1.0"}})) + + _, err := db.CreatePackage(z) + Expect(err).ToNot(HaveOccurred()) + _, err = db.CreatePackage(c) + Expect(err).ToNot(HaveOccurred()) + + s := NewPackage("A", ">=1.0", []*DefaultPackage{}, []*DefaultPackage{}) + + packs, err := db.FindPackages(s) + Expect(err).ToNot(HaveOccurred()) + Expect(packs).To(ContainElement(z)) + }) + }) + + }) + }) })