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 |