diff options
author | Zac Medico <zmedico@gentoo.org> | 2012-06-19 21:30:00 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-06-19 21:53:23 -0700 |
commit | fbc46ae218e70401749f43e5f99a17a0b04a0ff4 (patch) | |
tree | e6341d490339cceca94bf34141bdc947d75fc9fb | |
parent | 7fdb5d855e9bd97825c1886e9788ecb1539e7759 (diff) | |
download | portage-fbc46ae218e70401749f43e5f99a17a0b04a0ff4.tar.gz portage-fbc46ae218e70401749f43e5f99a17a0b04a0ff4.tar.bz2 portage-fbc46ae218e70401749f43e5f99a17a0b04a0ff4.zip |
depgraph._iter_atoms_for_pkg: fix for --rebuild-*
The SetArg instances that are generated for --rebuild-if-* behvior need
to be passed into _set_args() in order for _iter_atoms_for_pkg to be
aware of these arguments.
-rw-r--r-- | pym/_emerge/DependencyArg.py | 13 | ||||
-rw-r--r-- | pym/_emerge/depgraph.py | 24 |
2 files changed, 27 insertions, 10 deletions
diff --git a/pym/_emerge/DependencyArg.py b/pym/_emerge/DependencyArg.py index fa1a47fb7..ba36f78d2 100644 --- a/pym/_emerge/DependencyArg.py +++ b/pym/_emerge/DependencyArg.py @@ -7,10 +7,17 @@ from portage import _encodings, _unicode_encode, _unicode_decode class DependencyArg(object): - __slots__ = ('arg', 'root_config') - - def __init__(self, arg=None, root_config=None): + __slots__ = ('arg', 'force_reinstall', 'reset_depth', 'root_config') + + def __init__(self, arg=None, force_reinstall=False, + reset_depth=True, root_config=None): + """ + Use reset_depth=False for special arguments that should not interact + with depth calculations (see the emerge --deep=DEPTH option). + """ self.arg = arg + self.force_reinstall = force_reinstall + self.reset_depth = reset_depth self.root_config = root_config def __eq__(self, other): diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 291080ac7..ad28d695e 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -1316,8 +1316,12 @@ class depgraph(object): # Installing package A, we need to make sure package A's deps are met. # emerge --deep <pkgspec>; we need to recursively check dependencies of pkgspec # If we are in --nodeps (no recursion) mode, we obviously only check 1 level of dependencies. - if arg_atoms: - depth = 0 + if arg_atoms and depth > 0: + for parent, atom in arg_atoms: + if parent.reset_depth: + depth = 0 + break + if previously_added and pkg.depth is not None: depth = min(pkg.depth, depth) pkg.depth = depth @@ -2226,6 +2230,7 @@ class depgraph(object): args = revised_greedy_args del revised_greedy_args + args.extend(self._gen_reinstall_sets()) self._set_args(args) myfavorites = set(myfavorites) @@ -2258,7 +2263,13 @@ class depgraph(object): for (root, set_name), atoms in set_dict.items(): yield SetArg(arg=(SETPREFIX + set_name), + # Set reset_depth=False here, since we don't want these + # special sets to interact with depth calculations (see + # the emerge --deep=DEPTH option), though we want them + # to behave like normal arguments in most other respects. pset=InternalPackageSet(initial_atoms=atoms), + force_reinstall=True, + reset_depth=False, root_config=self._frozen_config.roots[root]) def _resolve(self, myfavorites): @@ -2273,8 +2284,6 @@ class depgraph(object): virtuals = pkgsettings.getvirtuals() args = self._dynamic_config._initial_arg_list[:] - args.extend(self._gen_reinstall_sets()) - for arg in self._expand_set_args(args, add_to_digraph=True): for atom in arg.pset.getAtoms(): self._spinner_update() @@ -3963,9 +3972,10 @@ class depgraph(object): myarg = None if root == self._frozen_config.target_root: try: - myarg = next(self._iter_atoms_for_pkg(pkg)) - except StopIteration: - pass + for myarg, myarg_atom in self._iter_atoms_for_pkg(pkg): + if myarg.force_reinstall: + reinstall = True + break except portage.exception.InvalidDependString: if not installed: # masked by corruption |