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 |