diff options
author | Zac Medico <zmedico@gentoo.org> | 2006-07-13 23:33:05 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2006-07-13 23:33:05 +0000 |
commit | 8995e62e2470c8f0e0ad9edc517950951937f69b (patch) | |
tree | 876f58e7a48cc65af85fa6d82abbf72a5a7fc83c | |
parent | 93ba2edb6eaa837e087c3c194f1a5aed192cddb1 (diff) | |
download | portage-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
-rwxr-xr-x | bin/emerge | 30 | ||||
-rw-r--r-- | pym/portage.py | 34 |
2 files changed, 28 insertions, 36 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 diff --git a/pym/portage.py b/pym/portage.py index 4ff350ce7..00f6a427f 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -6126,40 +6126,6 @@ class dblink: #remove self from vartree database so that our own virtual gets zapped if we're the last node self.vartree.zap(self.mycpv) - # New code to remove stuff from the world and virtuals files when unmerged. - if trimworld: - worldlist = grabfile(os.path.join(self.myroot, WORLD_FILE)) - mykey=cpv_getkey(self.mycpv) - newworldlist=[] - for x in worldlist: - if dep_getkey(x)==mykey: - matches = self.vartree.dbapi.match(x,use_cache=0) - if not matches: - #zap our world entry - pass - elif (len(matches)==1) and (matches[0]==self.mycpv): - #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) - - # if the base dir doesn't exist, create it. - # (spanky noticed bug) - # XXX: dumb question, but abstracting the root uid might be wise/useful for - # 2nd pkg manager installation setups. - my_private_path = os.path.join(self.myroot, PRIVATE_PATH) - if not os.path.exists(my_private_path): - os.makedirs(my_private_path, mode=0755) - os.chown(my_private_path, 0, portage_gid) - os.chmod(my_private_path, 02770) - - write_atomic(os.path.join(self.myroot, WORLD_FILE), - "\n".join(newworldlist)) - #do original postrm if myebuildpath and os.path.exists(myebuildpath): # XXX: This should be the old config, not the current one. |