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 (-21 / +28 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 6023-6038 Link Here
6023
			elif S_ISDIR(mymode):
6023
			elif S_ISDIR(mymode):
6024
				# we are merging a directory
6024
				# we are merging a directory
6025
				if mydmode!=None:
6025
				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):
6026
					if S_ISLNK(mydmode) or S_ISDIR(mydmode):
6037
						# a symlink to an existing directory will work for us; keep it:
6027
						# a symlink to an existing directory will work for us; keep it:
6038
						print "---",mydest+"/"
6028
						print "---",mydest+"/"
Lines 6048-6057 Link Here
6048
						print ">>>",mydest+"/"
6038
						print ">>>",mydest+"/"
6049
				else:
6039
				else:
6050
					#destination doesn't exist
6040
					#destination doesn't exist
6051
					os.mkdir(mydest)
6041
					try:
6052
					os.chmod(mydest,mystat[0])
6042
						os.mkdir(mydest)
6053
					os.chown(mydest,mystat[4],mystat[5])
6043
						os.chmod(mydest,mystat[0])
6054
					print ">>>",mydest+"/"
6044
						os.chown(mydest,mystat[4],mystat[5])
6045
						print ">>>",mydest+"/"
6046
					except OSError:
6047
					#Don't die here. Die when real files are attempted to be copied.
6048
						print "!!!",mydest+"/"
6055
				outfile.write("dir "+myrealdest+"\n")
6049
				outfile.write("dir "+myrealdest+"\n")
6056
				# recurse and merge this directory
6050
				# recurse and merge this directory
6057
				if self.mergeme(srcroot,destroot,outfile,secondhand,offset+x+"/",cfgfiledict,thismtime):
6051
				if self.mergeme(srcroot,destroot,outfile,secondhand,offset+x+"/",cfgfiledict,thismtime):
Lines 6119-6126 Link Here
6119
				if moveme:
6113
				if moveme:
6120
					mymtime=movefile(mysrc,mydest,thismtime,mystat, mysettings=self.settings)
6114
					mymtime=movefile(mysrc,mydest,thismtime,mystat, mysettings=self.settings)
6121
					if mymtime == None:
6115
					if mymtime == None:
6122
						sys.exit(1)
6116
						#If it's a ".keep" file, simply report the failure.
6123
					zing=">>>"
6117
						if os.path.basename(mydest)==".keep":
6118
							zing="!!!"
6119
						#Otherwise directory permissions,
6120
						#mounts, whatever are preventing it.
6121
						else:
6122
							pkgstuff = pkgsplit(self.pkg)
6123
							writemsg("\n!!! Cannot write to '"+mydest+"'.\n")
6124
							writemsg("!!! Please check permissions and directories for broken symlinks.\n")
6125
							writemsg("!!! You may start the merge process again by using ebuild:\n")
6126
							writemsg("!!! ebuild "+self.settings["PORTDIR"]+"/"+self.cat+"/"+pkgstuff[0]+"/"+self.pkg+".ebuild merge\n")
6127
							writemsg("!!! And finish by running this: env-update\n\n")
6128
							sys.exit(1)
6129
					else:
6130
						zing=">>>"
6124
				else:
6131
				else:
6125
					mymtime=thismtime
6132
					mymtime=thismtime
6126
					# We need to touch the destination so that on --update the
6133
					# We need to touch the destination so that on --update the

Return to bug 9849