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 / +45 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
			print
5881
			print "!!! Creation of the following directories failed."
5882
			print "!!! Please adjust permissions and re-emerge this"
5883
			print "!!! this package or create the directories manually."
5884
			for x in self.failedkeeps:
5885
				print "!!!  ",x
5886
			sys.exit(1)
5876
5887
5877
5888
5878
	def new_protect_filename(self, mydest, newmd5=None):
5889
	def new_protect_filename(self, mydest, newmd5=None):
Lines 6023-6038 Link Here
6023
			elif S_ISDIR(mymode):
6034
			elif S_ISDIR(mymode):
6024
				# we are merging a directory
6035
				# we are merging a directory
6025
				if mydmode!=None:
6036
				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):
6037
					if S_ISLNK(mydmode) or S_ISDIR(mydmode):
6037
						# a symlink to an existing directory will work for us; keep it:
6038
						# a symlink to an existing directory will work for us; keep it:
6038
						print "---",mydest+"/"
6039
						print "---",mydest+"/"
Lines 6048-6057 Link Here
6048
						print ">>>",mydest+"/"
6049
						print ">>>",mydest+"/"
6049
				else:
6050
				else:
6050
					#destination doesn't exist
6051
					#destination doesn't exist
6051
					os.mkdir(mydest)
6052
					try:
6052
					os.chmod(mydest,mystat[0])
6053
						os.mkdir(mydest)
6053
					os.chown(mydest,mystat[4],mystat[5])
6054
						os.chmod(mydest,mystat[0])
6054
					print ">>>",mydest+"/"
6055
						os.chown(mydest,mystat[4],mystat[5])
6056
						print ">>>",mydest+"/"
6057
					except OSError:
6058
					#Don't die here. Die when real files are attempted to be copied.
6059
						print "!!!",mydest+"/"
6055
				outfile.write("dir "+myrealdest+"\n")
6060
				outfile.write("dir "+myrealdest+"\n")
6056
				# recurse and merge this directory
6061
				# recurse and merge this directory
6057
				if self.mergeme(srcroot,destroot,outfile,secondhand,offset+x+"/",cfgfiledict,thismtime):
6062
				if self.mergeme(srcroot,destroot,outfile,secondhand,offset+x+"/",cfgfiledict,thismtime):
Lines 6119-6126 Link Here
6119
				if moveme:
6124
				if moveme:
6120
					mymtime=movefile(mysrc,mydest,thismtime,mystat, mysettings=self.settings)
6125
					mymtime=movefile(mysrc,mydest,thismtime,mystat, mysettings=self.settings)
6121
					if mymtime == None:
6126
					if mymtime == None:
6122
						sys.exit(1)
6127
						#If it's a ".keep" file, simply report the failure.
6123
					zing=">>>"
6128
						if os.path.basename(mydest)==".keep":
6129
							dirname = os.path.dirname(mydest)
6130
							try:
6131
								os.lstat(dirname)
6132
							except:
6133
								self.failedkeeps.append(dirname)
6134
							zing="!!!"
6135
						#Otherwise directory permissions,
6136
						#mounts, whatever are preventing it.
6137
						else:
6138
							pkgstuff = pkgsplit(self.pkg)
6139
							writemsg("\n!!! Cannot write to '"+mydest+"'.\n")
6140
							writemsg("!!! Please check permissions and directories for broken symlinks.\n")
6141
							writemsg("!!! You may start the merge process again by using ebuild:\n")
6142
							writemsg("!!! ebuild "+self.settings["PORTDIR"]+"/"+self.cat+"/"+pkgstuff[0]+"/"+self.pkg+".ebuild merge\n")
6143
							writemsg("!!! And finish by running this: env-update\n\n")
6144
							sys.exit(1)
6145
					else:
6146
						zing=">>>"
6124
				else:
6147
				else:
6125
					mymtime=thismtime
6148
					mymtime=thismtime
6126
					# We need to touch the destination so that on --update the
6149
					# We need to touch the destination so that on --update the

Return to bug 9849