Lines 6788-6794
Link Here
|
6788 |
return pkgfiles |
6788 |
return pkgfiles |
6789 |
|
6789 |
|
6790 |
def unmerge(self, pkgfiles=None, trimworld=1, cleanup=1, |
6790 |
def unmerge(self, pkgfiles=None, trimworld=1, cleanup=1, |
6791 |
ldpath_mtimes=None): |
6791 |
ldpath_mtimes=None, alreadyinstalled=0): |
6792 |
""" |
6792 |
""" |
6793 |
Calls prerm |
6793 |
Calls prerm |
6794 |
Unmerges a given package (CPV) |
6794 |
Unmerges a given package (CPV) |
Lines 6867-6873
Link Here
|
6867 |
writemsg("!!! FAILED prerm: %s\n" % retval, noiselevel=-1) |
6867 |
writemsg("!!! FAILED prerm: %s\n" % retval, noiselevel=-1) |
6868 |
return retval |
6868 |
return retval |
6869 |
|
6869 |
|
6870 |
self._unmerge_pkgfiles(pkgfiles) |
6870 |
self._unmerge_pkgfiles(pkgfiles, alreadyinstalled=alreadyinstalled) |
6871 |
|
6871 |
|
6872 |
if myebuildpath: |
6872 |
if myebuildpath: |
6873 |
retval = doebuild(myebuildpath, "postrm", self.myroot, |
6873 |
retval = doebuild(myebuildpath, "postrm", self.myroot, |
Lines 6906-6912
Link Here
|
6906 |
contents=contents) |
6906 |
contents=contents) |
6907 |
return os.EX_OK |
6907 |
return os.EX_OK |
6908 |
|
6908 |
|
6909 |
def _unmerge_pkgfiles(self, pkgfiles): |
6909 |
def _unmerge_pkgfiles(self, pkgfiles, alreadyinstalled=0): |
6910 |
""" |
6910 |
""" |
6911 |
|
6911 |
|
6912 |
Unmerges the contents of a package from the liveFS |
6912 |
Unmerges the contents of a package from the liveFS |
Lines 7014-7024
Link Here
|
7014 |
mydirs.sort() |
7014 |
mydirs.sort() |
7015 |
mydirs.reverse() |
7015 |
mydirs.reverse() |
7016 |
|
7016 |
|
|
|
7017 |
# Get a list of versions for this package to check empty directories |
7018 |
otherversions=[] |
7019 |
for v in self.vartree.dbapi.cp_list(self.mysplit[0]): |
7020 |
otherversions.append(v.split("/")[1]) |
7021 |
# Remove ourselves only if we're upgrading |
7022 |
# If alreadyinstalled is set, we're only replacing ourself with the same package |
7023 |
if not alreadyinstalled and self.pkg in otherversions: |
7024 |
otherversions.remove(self.pkg) |
7025 |
|
7026 |
otherpkglist = [] |
7027 |
destroot = '/' # Setup this for convenience since we only unmerge live packages |
7028 |
for v in otherversions: |
7029 |
# Actual dblink object since package names are not useful |
7030 |
otherpkglist.append( |
7031 |
dblink(self.cat, v, destroot, self.settings, vartree = self.vartree)) |
7032 |
|
7017 |
for obj in mydirs: |
7033 |
for obj in mydirs: |
7018 |
try: |
7034 |
# The directory is empty, then check before removing |
7019 |
os.rmdir(obj) |
7035 |
if len(os.listdir(obj)) == 0: |
7020 |
writemsg_stdout("<<< %s %s\n" % ("dir",obj)) |
7036 |
for p in otherpkglist: |
7021 |
except (OSError, IOError): |
7037 |
if p.isowner(obj, destroot): |
|
|
7038 |
break |
7039 |
else: |
7040 |
# Nothing else owns the directory |
7041 |
os.rmdir(obj) |
7042 |
writemsg_stdout("<<< %s %s\n" % ("dir",obj)) |
7043 |
continue |
7044 |
|
7045 |
# Execution reaches here if something owns the directory |
7046 |
writemsg_stdout("--- !keep dir %s\n" % obj) |
7047 |
else: |
7048 |
# This is for directories that are not empty |
7022 |
writemsg_stdout("--- !empty dir %s\n" % obj) |
7049 |
writemsg_stdout("--- !empty dir %s\n" % obj) |
7023 |
|
7050 |
|
7024 |
#remove self from vartree database so that our own virtual gets zapped if we're the last node |
7051 |
#remove self from vartree database so that our own virtual gets zapped if we're the last node |
Lines 7353-7359
Link Here
|
7353 |
if os.path.exists(self.dbpkgdir): |
7380 |
if os.path.exists(self.dbpkgdir): |
7354 |
writemsg_stdout(">>> Safely unmerging already-installed instance...\n") |
7381 |
writemsg_stdout(">>> Safely unmerging already-installed instance...\n") |
7355 |
self.dbdir = self.dbpkgdir |
7382 |
self.dbdir = self.dbpkgdir |
7356 |
self.unmerge(oldcontents, trimworld=0, ldpath_mtimes=prev_mtimes) |
7383 |
self.unmerge(oldcontents, trimworld=0, ldpath_mtimes=prev_mtimes, alreadyinstalled=1) |
7357 |
self.dbdir = self.dbtmpdir |
7384 |
self.dbdir = self.dbtmpdir |
7358 |
writemsg_stdout(">>> Original instance of package unmerged safely.\n") |
7385 |
writemsg_stdout(">>> Original instance of package unmerged safely.\n") |
7359 |
|
7386 |
|