diff options
author | Zac Medico <zmedico@gentoo.org> | 2007-03-04 00:34:25 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2007-03-04 00:34:25 +0000 |
commit | 7962c0008ce24ea945b1ee38bcbd3096918d5dcc (patch) | |
tree | 2df49ffafc188a636758af8c2895b8a967c74b0f | |
parent | adaa3f2f593de12b3221ccdbc0c8066dce21d76c (diff) | |
download | portage-7962c0008ce24ea945b1ee38bcbd3096918d5dcc.tar.gz portage-7962c0008ce24ea945b1ee38bcbd3096918d5dcc.tar.bz2 portage-7962c0008ce24ea945b1ee38bcbd3096918d5dcc.zip |
For bug #169187, make --depclean prune unneeded slots such that it is consistent with the world update algorithm.
svn path=/main/trunk/; revision=6160
-rw-r--r-- | pym/emerge/__init__.py | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/pym/emerge/__init__.py b/pym/emerge/__init__.py index 4078d9e29..cd96a6d3f 100644 --- a/pym/emerge/__init__.py +++ b/pym/emerge/__init__.py @@ -4658,6 +4658,8 @@ def action_depclean(settings, trees, ldpath_mtimes, dep_check_trees[myroot]["porttree"] = dep_check_trees[myroot]["vartree"] syslist = getlist(settings, "system") worldlist = getlist(settings, "world") + system_world_dict = genericdict(worldlist) + system_world_dict.update(genericdict(syslist)) fakedb = portage.fakedbapi(settings=settings) myvarlist = vardb.cpv_all() @@ -4694,8 +4696,12 @@ def action_depclean(settings, trees, ldpath_mtimes, if not atom.startswith("!") and priority == hard: unresolveable.setdefault(atom, []).append(parent) continue - # Could put slot checking here to ensure that there aren't two - # packages with the same slot... + if portage.dep_getkey(atom) not in system_world_dict: + # Prune all but the best matching slot, since that's all that a + # deep world update would pull in. Don't prune if the cpv is in + # system or world though, since those sets trigger greedy update + # of all slots. + pkgs = [portage.best(pkgs)] for pkg in pkgs: if fakedb.cpv_exists(pkg): continue |