Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 16162
Collapse All | Expand All

(-)portage-2.1.2.orig/pym/portage.py (-8 / +35 lines)
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

Return to bug 16162