summaryrefslogtreecommitdiffstats
path: root/bin/emerge
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-08-15 01:38:43 +0000
committerZac Medico <zmedico@gentoo.org>2007-08-15 01:38:43 +0000
commitd4d3ff3cdf0b48d9f1656c8ebed277ee1a3c3f2a (patch)
treeac4de6f751723e2d91286456756201affba4e7b0 /bin/emerge
parent1f1b6fc51596d8aa6257dc415f1ee9a9d3307df6 (diff)
downloadportage-d4d3ff3cdf0b48d9f1656c8ebed277ee1a3c3f2a.tar.gz
portage-d4d3ff3cdf0b48d9f1656c8ebed277ee1a3c3f2a.tar.bz2
portage-d4d3ff3cdf0b48d9f1656c8ebed277ee1a3c3f2a.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. (trunk r7604)
svn path=/main/branches/2.1.2/; revision=7605
Diffstat (limited to 'bin/emerge')
-rwxr-xr-xbin/emerge63
1 files changed, 39 insertions, 24 deletions
diff --git a/bin/emerge b/bin/emerge
index 448608196..3207793a8 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -778,11 +778,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__":
@@ -797,13 +797,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):
@@ -1244,24 +1246,7 @@ class depgraph:
#"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 \
@@ -1303,6 +1288,36 @@ class depgraph:
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":