summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--RELEASE-NOTES7
-rw-r--r--pym/_emerge/__init__.py17
2 files changed, 14 insertions, 10 deletions
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 788f9118d..c107bbce3 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -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
==================================
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 96c4cbbc4..46a569ed4 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -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: