summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2006-07-13 23:33:05 +0000
committerZac Medico <zmedico@gentoo.org>2006-07-13 23:33:05 +0000
commit8995e62e2470c8f0e0ad9edc517950951937f69b (patch)
tree876f58e7a48cc65af85fa6d82abbf72a5a7fc83c /bin
parent93ba2edb6eaa837e087c3c194f1a5aed192cddb1 (diff)
downloadportage-8995e62e2470c8f0e0ad9edc517950951937f69b.tar.gz
portage-8995e62e2470c8f0e0ad9edc517950951937f69b.tar.bz2
portage-8995e62e2470c8f0e0ad9edc517950951937f69b.zip
Move the world file trimming out of dblink.unmerge() since the world file is package set territory and therefore doesn't belong inside dblink.
svn path=/main/trunk/; revision=3868
Diffstat (limited to 'bin')
-rwxr-xr-xbin/emerge30
1 files changed, 28 insertions, 2 deletions
diff --git a/bin/emerge b/bin/emerge
index d834fcda1..305c4b3d3 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -595,6 +595,32 @@ def getlist(settings, mode):
return mynewlines
+def clean_world(vardb, cpv):
+ """Remove a package from the world file when unmerged."""
+ world_filename = os.path.join(vardb.root, portage.WORLD_FILE)
+ worldlist = portage_util.grabfile(world_filename)
+ mykey = portage.cpv_getkey(cpv)
+ newworldlist = []
+ for x in worldlist:
+ if portage.dep_getkey(x) == mykey:
+ matches = vardb.match(x, use_cache=0)
+ if not matches:
+ #zap our world entry
+ pass
+ elif len(matches) == 1 and matches[0] == cpv:
+ #zap our world entry
+ pass
+ else:
+ #others are around; keep it.
+ newworldlist.append(x)
+ else:
+ #this doesn't match the package we're unmerging; keep it.
+ newworldlist.append(x)
+
+ portage_util.ensure_dirs(os.path.join(vardb.root, portage.PRIVATE_PATH),
+ uid=portage.portage_gid, mode=02770)
+ portage_util.write_atomic(world_filename, "\n".join(newworldlist))
+
def genericdict(mylist):
mynewdict={}
for x in mylist:
@@ -2303,13 +2329,13 @@ def unmerge(settings, myopts, vartree, unmerge_action, unmerge_files,
retval = portage.unmerge(mysplit[0], mysplit[1], settings["ROOT"],
mysettings, unmerge_action not in ["clean","prune"],
vartree=vartree, ldpath_mtimes=ldpath_mtimes)
- if retval:
+ if retval != os.EX_OK:
emergelog(xterm_titles, " !!! unmerge FAILURE: "+y)
else:
+ clean_world(vartree.dbapi, y)
emergelog(xterm_titles, " >>> unmerge success: "+y)
return 1
-
def chk_updated_info_files(root, infodirs, prev_mtimes, retval):
print