Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 9849 | Differences between
and this patch

Collapse All | Expand All

(-)portage-orig/pym/portage.py (-22 / +53 lines)
Lines 2472-2478 Link Here
2472
	try:
2472
	try:
2473
		dstat=os.lstat(dest)
2473
		dstat=os.lstat(dest)
2474
	except:
2474
	except:
2475
		dstat=os.lstat(os.path.dirname(dest))
2475
		try:
2476
			dstat=os.lstat(os.path.dirname(dest))
2477
		# Parent directory does not exist
2478
		except:
2479
			return None
2476
		destexists=0
2480
		destexists=0
2477
2481
2478
	if destexists:
2482
	if destexists:
Lines 2516-2523 Link Here
2516
			import errno
2520
			import errno
2517
			if e[0]!=errno.EXDEV:
2521
			if e[0]!=errno.EXDEV:
2518
				# Some random error.
2522
				# Some random error.
2519
				print "!!! Failed to move",src,"to",dest
2520
				print "!!!",e
2521
				return None
2523
				return None
2522
			# Invalid cross-device-link 'bind' mounted or actually Cross-Device
2524
			# Invalid cross-device-link 'bind' mounted or actually Cross-Device
2523
	if renamefailed:
2525
	if renamefailed:
Lines 2532-2539 Link Here
2532
					os.rename(dest+"#new",dest)
2534
					os.rename(dest+"#new",dest)
2533
				didcopy=1
2535
				didcopy=1
2534
			except Exception, e:
2536
			except Exception, e:
2535
				print '!!! copy',src,'->',dest,'failed.'
2536
				print "!!!",e
2537
				return None
2537
				return None
2538
		else:
2538
		else:
2539
			#we don't yet handle special, so we need to fall back to /bin/mv
2539
			#we don't yet handle special, so we need to fall back to /bin/mv
Lines 5712-5718 Link Here
5712
		# inforoot = root of db entry,
5712
		# inforoot = root of db entry,
5713
		# secondhand = list of symlinks that have been skipped due to
5713
		# secondhand = list of symlinks that have been skipped due to
5714
		#              their target not existing (will merge later),
5714
		#              their target not existing (will merge later),
5715
5715
		
5716
		self.failedkeeps = []
5717
		
5716
		if not os.path.exists(self.dbcatdir):
5718
		if not os.path.exists(self.dbcatdir):
5717
			os.makedirs(self.dbcatdir)
5719
			os.makedirs(self.dbcatdir)
5718
5720
Lines 5873-5878 Link Here
5873
		if dircache.has_key(self.dbcatdir):
5875
		if dircache.has_key(self.dbcatdir):
5874
			del dircache[self.dbcatdir]
5876
			del dircache[self.dbcatdir]
5875
		print ">>>",self.mycpv,"merged."
5877
		print ">>>",self.mycpv,"merged."
5878
		if self.failedkeeps:
5879
			self.failedkeeps.sort()
5880
			writemsg("\n!!! Creation of the following directories failed.\n")
5881
			writemsg("!!! Please adjust permissions and re-emerge this\n")
5882
			writemsg("!!! package or create the directories manually.\n")
5883
			for x in self.failedkeeps:
5884
				writemsg("!!!   "+x+"\n")
5885
			if self.settings.has_key("NONCRITICAL_KEEPDIRS"):
5886
				for okpath in self.settings["NONCRITICAL_KEEPDIRS"].split():
5887
					altpath = os.path.normpath(self.settings["ROOT"]+okpath)
5888
					for x in range(len(self.failedkeeps)-1,-1,-1):
5889
						if self.failedkeeps[x].startswith(okpath):
5890
							del self.failedkeeps[x]
5891
						elif self.failedkeeps[x].startswith(altpath):
5892
							del self.failedkeeps[x]
5893
			if self.failedkeeps:
5894
				sys.exit(1)
5876
5895
5877
5896
5878
	def new_protect_filename(self, mydest, newmd5=None):
5897
	def new_protect_filename(self, mydest, newmd5=None):
Lines 6023-6038 Link Here
6023
			elif S_ISDIR(mymode):
6042
			elif S_ISDIR(mymode):
6024
				# we are merging a directory
6043
				# we are merging a directory
6025
				if mydmode!=None:
6044
				if mydmode!=None:
6026
					# destination exists
6027
					if not os.access(mydest, os.W_OK):
6028
						pkgstuff = pkgsplit(self.pkg)
6029
						writemsg("\n!!! Cannot write to '"+mydest+"'.\n")
6030
						writemsg("!!! Please check permissions and directories for broken symlinks.\n")
6031
						writemsg("!!! You may start the merge process again by using ebuild:\n")
6032
						writemsg("!!! ebuild "+self.settings["PORTDIR"]+"/"+self.cat+"/"+pkgstuff[0]+"/"+self.pkg+".ebuild merge\n")
6033
						writemsg("!!! And finish by running this: env-update\n\n")
6034
						return 1
6035
6036
					if S_ISLNK(mydmode) or S_ISDIR(mydmode):
6045
					if S_ISLNK(mydmode) or S_ISDIR(mydmode):
6037
						# a symlink to an existing directory will work for us; keep it:
6046
						# a symlink to an existing directory will work for us; keep it:
6038
						print "---",mydest+"/"
6047
						print "---",mydest+"/"
Lines 6048-6057 Link Here
6048
						print ">>>",mydest+"/"
6057
						print ">>>",mydest+"/"
6049
				else:
6058
				else:
6050
					#destination doesn't exist
6059
					#destination doesn't exist
6051
					os.mkdir(mydest)
6060
					try:
6052
					os.chmod(mydest,mystat[0])
6061
						os.mkdir(mydest)
6053
					os.chown(mydest,mystat[4],mystat[5])
6062
						os.chmod(mydest,mystat[0])
6054
					print ">>>",mydest+"/"
6063
						os.chown(mydest,mystat[4],mystat[5])
6064
						print ">>>",mydest+"/"
6065
					except OSError:
6066
					#Don't die here. Die when real files are attempted to be copied.
6067
						print "!!!",mydest+"/"
6055
				outfile.write("dir "+myrealdest+"\n")
6068
				outfile.write("dir "+myrealdest+"\n")
6056
				# recurse and merge this directory
6069
				# recurse and merge this directory
6057
				if self.mergeme(srcroot,destroot,outfile,secondhand,offset+x+"/",cfgfiledict,thismtime):
6070
				if self.mergeme(srcroot,destroot,outfile,secondhand,offset+x+"/",cfgfiledict,thismtime):
Lines 6119-6126 Link Here
6119
				if moveme:
6132
				if moveme:
6120
					mymtime=movefile(mysrc,mydest,thismtime,mystat, mysettings=self.settings)
6133
					mymtime=movefile(mysrc,mydest,thismtime,mystat, mysettings=self.settings)
6121
					if mymtime == None:
6134
					if mymtime == None:
6122
						sys.exit(1)
6135
						#If it's a ".keep" file, simply report the failure.
6123
					zing=">>>"
6136
						if os.path.basename(mydest)==".keep":
6137
							dirname = os.path.dirname(mydest)
6138
							try:
6139
								os.lstat(dirname)
6140
							except:
6141
								self.failedkeeps.append(dirname)
6142
							zing="!!!"
6143
						#Otherwise directory permissions,
6144
						#mounts, whatever are preventing it.
6145
						else:
6146
							pkgstuff = pkgsplit(self.pkg)
6147
							writemsg("\n!!! Cannot write to '"+mydest+"'.\n")
6148
							writemsg("!!! Please check permissions and directories for broken symlinks.\n")
6149
							writemsg("!!! You may start the merge process again by using ebuild:\n")
6150
							writemsg("!!! ebuild "+self.settings["PORTDIR"]+"/"+self.cat+"/"+pkgstuff[0]+"/"+self.pkg+".ebuild merge\n")
6151
							writemsg("!!! And finish by running this: env-update\n\n")
6152
							sys.exit(1)
6153
					else:
6154
						zing=">>>"
6124
				else:
6155
				else:
6125
					mymtime=thismtime
6156
					mymtime=thismtime
6126
					# We need to touch the destination so that on --update the
6157
					# We need to touch the destination so that on --update the

Return to bug 9849