summaryrefslogtreecommitdiffstats
path: root/bin/emerge
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-04-29 18:33:35 +0000
committerZac Medico <zmedico@gentoo.org>2008-04-29 18:33:35 +0000
commit4ecd3597067cf059b72aa4ade156fc9905604357 (patch)
tree06721336accf2bfd92fc48a8df915ace817320de /bin/emerge
parentbc219a1c095c700c0935c98d9b43bad2a3f3c66b (diff)
downloadportage-4ecd3597067cf059b72aa4ade156fc9905604357.tar.gz
portage-4ecd3597067cf059b72aa4ade156fc9905604357.tar.bz2
portage-4ecd3597067cf059b72aa4ade156fc9905604357.zip
Make unmerge() group packages by cat/pn when the order doesn't matter, so
the display appears like earlier versions of portage. (trunk r10037) svn path=/main/branches/2.1.2/; revision=10038
Diffstat (limited to 'bin/emerge')
-rwxr-xr-xbin/emerge35
1 files changed, 29 insertions, 6 deletions
diff --git a/bin/emerge b/bin/emerge
index e2c20582c..9753386ed 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -5706,7 +5706,7 @@ class MergeTask(object):
return os.EX_OK
def unmerge(settings, myopts, vartree, unmerge_action, unmerge_files,
- ldpath_mtimes, autoclean=0, clean_world=1):
+ ldpath_mtimes, autoclean=0, clean_world=1, ordered=0):
candidate_catpkgs=[]
global_unmerge=0
xterm_titles = "notitles" not in settings.features
@@ -5933,6 +5933,25 @@ def unmerge(settings, myopts, vartree, unmerge_action, unmerge_files,
finally:
if vdb_lock:
portage_locks.unlockdir(vdb_lock)
+
+ # Unmerge order only matters in some cases
+ if not ordered:
+ unordered = {}
+ for d in pkgmap:
+ selected = d["selected"]
+ if not selected:
+ continue
+ cp = portage.cpv_getkey(iter(selected).next())
+ cp_dict = unordered.get(cp)
+ if cp_dict is None:
+ cp_dict = {}
+ unordered[cp] = cp_dict
+ for k in d:
+ cp_dict[k] = set()
+ for k, v in d.iteritems():
+ cp_dict[k].update(v)
+ pkgmap = [unordered[cp] for cp in sorted(unordered)]
+
for x in xrange(len(pkgmap)):
selected = pkgmap[x]["selected"]
if not selected:
@@ -7449,11 +7468,12 @@ def action_depclean(settings, trees, ldpath_mtimes,
if cpv in clean_set:
graph.add(cpv, node, priority=priority)
+ ordered = True
if len(graph.order) == len(graph.root_nodes()):
# If there are no dependencies between packages
- # then just unmerge them alphabetically.
- cleanlist = graph.order[:]
- cleanlist.sort()
+ # let unmerge() group them by cat/pn.
+ ordered = False
+ cleanlist = graph.all_nodes()
else:
# Order nodes from lowest to highest overall reference count for
# optimal root node selection.
@@ -7484,7 +7504,7 @@ def action_depclean(settings, trees, ldpath_mtimes,
cleanlist.append(node)
unmerge(settings, myopts, trees[settings["ROOT"]]["vartree"],
- "unmerge", cleanlist, ldpath_mtimes)
+ "unmerge", cleanlist, ldpath_mtimes, ordered=ordered)
if action == "prune":
return
@@ -8369,8 +8389,11 @@ def emerge_main():
(myaction == "prune" and "--nodeps" in myopts):
validate_ebuild_environment(trees)
vartree = trees[settings["ROOT"]]["vartree"]
+ # When given a list of atoms, unmerge
+ # them in the order given.
+ ordered = myaction == "unmerge"
if 1 == unmerge(settings, myopts, vartree, myaction, myfiles,
- mtimedb["ldpath"]):
+ mtimedb["ldpath"], ordered=ordered):
if not (buildpkgonly or fetchonly or pretend):
post_emerge(settings, mtimedb, 0)