Bug #197810 - Don't automatically downgrade packages for which available
authorZac Medico <zmedico@gentoo.org>
Tue, 8 Apr 2008 18:42:49 +0000 (18:42 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 8 Apr 2008 18:42:49 +0000 (18:42 -0000)
matching versions are masked by corruption, but do automatically downgrade
installed packages that themselves have a valid mask such as from
package.mask.

svn path=/main/trunk/; revision=9756

RELEASE-NOTES
pym/_emerge/__init__.py

index 788f9118d6a42791fb746b35265f095942635502..c107bbce3dc0da24613b44730a9972360857d461 100644 (file)
@@ -32,13 +32,6 @@ portage-2.2
 * "world" does no longer include "system" unconditionally, but you can add
   "@system" to the worldfile to restore the old state.
 
-portage-2.1.5
-==================================
-* In the event that a previously installed package has since been masked,
-  emerge will no longer perform an automatic downgrade as part of a "world"
-  update. You should either unmask such packages or else explicitly re-merge
-  them in order to have them dowgraded to an unmasked version.
-
 portage-2.1.4.1
 ==================================
 
index 96c4cbbc40ce6c805b768713db5d9a8d49c417e1..46a569ed4581d7d98c04dba4ed4aed06d97ee28b 100644 (file)
@@ -1433,6 +1433,11 @@ class DepcheckCompositeDB(object):
                                        arg = None
                                if arg:
                                        ret = []
+                       if ret is None and pkg.installed and \
+                               not visible(self._depgraph.pkgsettings[pkg.root], pkg):
+                               # For disjunctive || deps, this will cause alternative
+                               # atoms or packages to be selected if available.
+                               ret = []
                        if ret is None:
                                self._cpv_tree_map[pkg.cpv] = \
                                        self._depgraph.pkg_tree_map[pkg.type_name]
@@ -2550,9 +2555,15 @@ class depgraph(object):
                                                        if not installed:
                                                                # masked by corruption
                                                                continue
-                                       if not installed:
-                                               if myarg:
-                                                       found_available_arg = True
+                                       if not installed and myarg:
+                                               found_available_arg = True
+                                       if not installed or (installed and matched_packages):
+                                               # Only enforce visibility on installed packages
+                                               # if there is at least one other visible package
+                                               # available. By filtering installed masked packages
+                                               # here, packages that have been masked since they
+                                               # were installed can be automatically downgraded
+                                               # to an unmasked version.
                                                if not visible(pkgsettings, pkg):
                                                        continue
                                        if not built and not calculated_use: