depgraph: avoid updates more
authorZac Medico <zmedico@gentoo.org>
Tue, 18 Jan 2011 23:28:49 +0000 (15:28 -0800)
committerZac Medico <zmedico@gentoo.org>
Tue, 18 Jan 2011 23:28:49 +0000 (15:28 -0800)
The fix from bug #351828 broke some of the update avoidance behavior
from bug #275945, and this patch should restore it.

pym/_emerge/depgraph.py
pym/portage/tests/resolver/test_simple.py

index a6f17dbd2aefa2a1ddfc42b97a048f3be660fe30..7375476263e6f56499709df3e752f6d401c698b6 100644 (file)
@@ -2954,7 +2954,8 @@ class depgraph(object):
                                                        continue
                                        reinstall_for_flags = None
 
-                                       if not pkg.installed or matched_packages:
+                                       if not pkg.installed or \
+                                               (matched_packages and not avoid_update):
                                                # Only enforce visibility on installed packages
                                                # if there is at least one other visible package
                                                # available. By filtering installed masked packages
@@ -5486,18 +5487,22 @@ class _dep_check_composite_db(dbapi):
                        myopts = self._depgraph._frozen_config.myopts
                        use_ebuild_visibility = myopts.get(
                                '--use-ebuild-visibility', 'n') != 'n'
+                       avoid_update = "--update" not in myopts and \
+                               "remove" not in self._depgraph._dynamic_config.myparams
                        usepkgonly = "--usepkgonly" in myopts
-                       if not use_ebuild_visibility and usepkgonly:
-                               return False
-                       else:
-                               try:
-                                       pkg_eb = self._depgraph._pkg(
-                                               pkg.cpv, "ebuild", pkg.root_config, myrepo=pkg.repo)
-                               except portage.exception.PackageNotFound:
+                       if not avoid_update:
+                               if not use_ebuild_visibility and usepkgonly:
                                        return False
                                else:
-                                       if not self._depgraph._pkg_visibility_check(pkg_eb):
+                                       try:
+                                               pkg_eb = self._depgraph._pkg(
+                                                       pkg.cpv, "ebuild", pkg.root_config,
+                                                       myrepo=pkg.repo)
+                                       except portage.exception.PackageNotFound:
                                                return False
+                                       else:
+                                               if not self._depgraph._pkg_visibility_check(pkg_eb):
+                                                       return False
 
                in_graph = self._depgraph._dynamic_config._slot_pkg_map[
                        self._root].get(pkg.slot_atom)
index c3ca9f4d553a15c174ff1ecd33f80cc90a755722..b8d403db42a697824b0cff2877df181b4dd4046d 100644 (file)
@@ -31,14 +31,11 @@ class SimpleResolverTestCase(TestCase):
                                options = {"--noreplace": True},
                                success = True,
                                mergelist = []),
-
-                       # This triggers a replacement since the dev-libs/B-1.1 ebuild
-                       # is not available in the portage tree (see bug #351828).
                        ResolverPlaygroundTestCase(
                                ["dev-libs/B"],
                                options = {"--noreplace": True},
                                success = True,
-                               mergelist = ["dev-libs/B-1.2"]),
+                               mergelist = []),
                        ResolverPlaygroundTestCase(
                                ["dev-libs/B"],
                                options = {"--update": True},