diff --git a/pkg/solver/parallel.go b/pkg/solver/parallel.go index 74929bc9..4cc382fd 100644 --- a/pkg/solver/parallel.go +++ b/pkg/solver/parallel.go @@ -472,10 +472,8 @@ func (s *Parallel) UpgradeUniverse(dropremoved bool) (pkg.Packages, PackagesAsse defer wg.Done() for p := range c { available, err := s.DefinitionDatabase.FindPackageVersions(p) - if err != nil { - removed = append(removed, p) /// FIXME: Racy - } - if len(available) == 0 { + if len(available) == 0 || err != nil { + removed = append(removed, p) continue } diff --git a/pkg/solver/solver.go b/pkg/solver/solver.go index a695ec98..5553ce97 100644 --- a/pkg/solver/solver.go +++ b/pkg/solver/solver.go @@ -413,10 +413,8 @@ func (s *Solver) UpgradeUniverse(dropremoved bool) (pkg.Packages, PackagesAssert // Grab all the installed ones, see if they are eligible for update for _, p := range s.Installed() { available, err := s.DefinitionDatabase.FindPackageVersions(p) - if err != nil { + if len(available) == 0 || err != nil { removed = append(removed, p) - } - if len(available) == 0 { continue } diff --git a/pkg/solver/solver_test.go b/pkg/solver/solver_test.go index bf7866ed..4bcc7c58 100644 --- a/pkg/solver/solver_test.go +++ b/pkg/solver/solver_test.go @@ -1210,6 +1210,8 @@ var _ = Describe("Solver", func() { }) }) Context("Upgrades", func() { + E := pkg.NewPackage("e", "1.5", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{}) + E.SetCategory("test") C := pkg.NewPackage("c", "1.5", []*pkg.DefaultPackage{&pkg.DefaultPackage{Name: "a", Version: ">=1.0", Category: "test"}}, []*pkg.DefaultPackage{}) C.SetCategory("test") B := pkg.NewPackage("b", "1.0", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{}) @@ -1304,5 +1306,30 @@ var _ = Describe("Solver", func() { Expect(len(solution)).To(Equal(3)) }) + + It("Suggests to remove untracked packages", func() { + for _, p := range []pkg.Package{E} { + _, err := dbDefinitions.CreatePackage(p) + Expect(err).ToNot(HaveOccurred()) + } + + for _, p := range []pkg.Package{A, B, C, E} { + _, err := dbInstalled.CreatePackage(p) + Expect(err).ToNot(HaveOccurred()) + } + uninstall, solution, err := s.UpgradeUniverse(true) + Expect(err).ToNot(HaveOccurred()) + Expect(len(uninstall)).To(Equal(3)) + + Expect(uninstall).To(ContainElement(B)) + Expect(uninstall).To(ContainElement(A)) + Expect(uninstall).To(ContainElement(C)) + + Expect(solution).To(ContainElement(PackageAssert{Package: C, Value: false})) + Expect(solution).To(ContainElement(PackageAssert{Package: B, Value: false})) + Expect(solution).To(ContainElement(PackageAssert{Package: A, Value: false})) + + Expect(len(solution)).To(Equal(3)) + }) }) })