summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/emerge/__init__.py63
1 files changed, 39 insertions, 24 deletions
diff --git a/pym/emerge/__init__.py b/pym/emerge/__init__.py
index 61273b3cb..d37a8c2ec 100644
--- a/pym/emerge/__init__.py
+++ b/pym/emerge/__init__.py
@@ -696,11 +696,11 @@ class DepPriority(object):
SOFT The upper boundary for soft dependencies.
MIN The lower boundary for soft dependencies.
"""
- __slots__ = ("__weakref__", "satisfied", "buildtime", "runtime", "runtime_post")
+ __slots__ = ("__weakref__", "satisfied", "buildtime", "runtime", "runtime_post", "rebuild")
MEDIUM = -1
MEDIUM_SOFT = -2
SOFT = -3
- MIN = -5
+ MIN = -6
def __init__(self, **kwargs):
for myattr in self.__slots__:
if myattr == "__weakref__":
@@ -715,13 +715,15 @@ class DepPriority(object):
return -1
if self.runtime_post:
return -2
- if self.buildtime:
+ if self.rebuild:
return -3
- if self.runtime:
+ if self.buildtime:
return -4
- if self.runtime_post:
+ if self.runtime:
return -5
- return -5
+ if self.runtime_post:
+ return -6
+ return -6
def __lt__(self, other):
return self.__int__() < other
def __le__(self, other):
@@ -1162,24 +1164,7 @@ class depgraph(object):
#"no downgrade" emerge
"""
mytype, myroot, mykey = mybigkey
- existing_node = None
- if addme:
- existing_node = self.pkg_node_map[myroot].get(mykey)
- if existing_node:
- self._parent_child_digraph.add(existing_node, myparent)
- if existing_node != myparent:
- # Refuse to make a node depend on itself so that the we don't
- # don't create a bogus circular dependency in self.altlist().
- if rev_dep and myparent:
- self.digraph.addnode(myparent, existing_node,
- priority=priority)
- else:
- self.digraph.addnode(existing_node, myparent,
- priority=priority)
- return 1
-
- if "--nodeps" not in self.myopts:
- self.spinner.update()
+
if mytype == "blocks":
if myparent and \
"--buildpkgonly" not in self.myopts and \
@@ -1221,6 +1206,36 @@ class depgraph(object):
return 0
del e
+ # normal arg, not system or world
+ if arg and len(self._sets) == 1 and \
+ "selective" not in self.myparams:
+ # For revdep-rebuild, dependencies on packages specified as
+ # arguments are given higher priority since the currently
+ # installed version has been rendered useless by ABI breakage.
+ # It's okay to increase the priority here even if the caller
+ # is not revdep-rebuild.
+ if priority.satisfied:
+ priority.rebuild = True
+
+ existing_node = None
+ if addme:
+ existing_node = self.pkg_node_map[myroot].get(mykey)
+ if existing_node:
+ self._parent_child_digraph.add(existing_node, myparent)
+ if existing_node != myparent:
+ # Refuse to make a node depend on itself so that the we don't
+ # don't create a bogus circular dependency in self.altlist().
+ if rev_dep and myparent:
+ self.digraph.addnode(myparent, existing_node,
+ priority=priority)
+ else:
+ self.digraph.addnode(existing_node, myparent,
+ priority=priority)
+ return 1
+
+ if "--nodeps" not in self.myopts:
+ self.spinner.update()
+
reinstall_for_flags = None
merging=1
if mytype == "installed":