summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-08-15 01:37:17 +0000
committerZac Medico <zmedico@gentoo.org>2007-08-15 01:37:17 +0000
commit92cfbd66be130d754c3db19a6ac475ccb9fd3cfb (patch)
tree08a5a10c2991e626210c29b31e8a749dbbfe22a2
parent4e96f8c6317b5f1eae7f9b4b6697a282afde648a (diff)
downloadportage-92cfbd66be130d754c3db19a6ac475ccb9fd3cfb.tar.gz
portage-92cfbd66be130d754c3db19a6ac475ccb9fd3cfb.tar.bz2
portage-92cfbd66be130d754c3db19a6ac475ccb9fd3cfb.zip
For bug #188782, 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.
svn path=/main/trunk/; revision=7604
-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":