diff options
author | Zac Medico <zmedico@gentoo.org> | 2007-08-15 01:37:17 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2007-08-15 01:37:17 +0000 |
commit | 92cfbd66be130d754c3db19a6ac475ccb9fd3cfb (patch) | |
tree | 08a5a10c2991e626210c29b31e8a749dbbfe22a2 | |
parent | 4e96f8c6317b5f1eae7f9b4b6697a282afde648a (diff) | |
download | portage-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__.py | 63 |
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": |