summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-03-04 00:34:25 +0000
committerZac Medico <zmedico@gentoo.org>2007-03-04 00:34:25 +0000
commit7962c0008ce24ea945b1ee38bcbd3096918d5dcc (patch)
tree2df49ffafc188a636758af8c2895b8a967c74b0f /pym
parentadaa3f2f593de12b3221ccdbc0c8066dce21d76c (diff)
downloadportage-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
Diffstat (limited to 'pym')
-rw-r--r--pym/emerge/__init__.py10
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