summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/depgraph.py24
1 files changed, 20 insertions, 4 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 435cc1a98..f933378aa 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -2624,10 +2624,21 @@ class depgraph(object):
# Make --noreplace take precedence over --newuse.
if not pkg.installed and noreplace and \
cpv in vardb.match(atom):
- # If the installed version is masked, it may
- # be necessary to look at lower versions,
- # in case there is a visible downgrade.
- continue
+ inst_pkg = self._pkg(pkg.cpv, "installed",
+ root_config, installed=True)
+ mreasons = None
+ if not inst_pkg.invalid:
+ mreasons = _get_masking_status(inst_pkg,
+ pkgsettings, root_config,
+ use=self._pkg_use_enabled(inst_pkg))
+ if mreasons and len(mreasons) == 1 and \
+ mreasons[0].category == 'KEYWORDS':
+ mreasons = None
+ if not inst_pkg.invalid and not mreasons:
+ # If the installed version is masked, it may
+ # be necessary to look at lower versions,
+ # in case there is a visible downgrade.
+ continue
reinstall_for_flags = None
if not pkg.installed or \
@@ -2890,6 +2901,11 @@ class depgraph(object):
built_timestamp != installed_timestamp:
return built_pkg, existing_node
+ for pkg in matched_packages:
+ if pkg.installed and pkg.invalid:
+ matched_packages = [x for x in \
+ matched_packages if x is not pkg]
+
if avoid_update:
for pkg in matched_packages:
if pkg.installed and self._pkg_visibility_check(pkg, \