Fix Issue10140 - Tools/scripts/pathfix.py: add option to preserve timestamps

This commit is contained in:
Senthil Kumaran 2010-10-19 04:39:35 +00:00
parent e474309bb7
commit 7cd94b8aa2

View File

@ -30,20 +30,24 @@ dbg = err
rep = sys.stdout.write
new_interpreter = None
preserve_timestamps = False
def main():
global new_interpreter
usage = ('usage: %s -i /interpreter file-or-directory ...\n' %
global preserve_timestamps
usage = ('usage: %s -i /interpreter -p file-or-directory ...\n' %
sys.argv[0])
try:
opts, args = getopt.getopt(sys.argv[1:], 'i:')
opts, args = getopt.getopt(sys.argv[1:], 'i:p')
except getopt.error as msg:
err(msg + '\n')
err(str(msg) + '\n')
err(usage)
sys.exit(2)
for o, a in opts:
if o == '-i':
new_interpreter = a.encode()
if o == '-p':
preserve_timestamps = True
if not new_interpreter or not new_interpreter.startswith(b'/') or \
not args:
err('-i option or file-or-directory missing\n')
@ -119,9 +123,13 @@ def fix(filename):
# Finishing touch -- move files
mtime = None
atime = None
# First copy the file's mode to the temp file
try:
statbuf = os.stat(filename)
mtime = statbuf.st_mtime
atime = statbuf.st_atime
os.chmod(tempname, statbuf[ST_MODE] & 0o7777)
except os.error as msg:
err('%s: warning: chmod failed (%r)\n' % (tempname, msg))
@ -136,6 +144,13 @@ def fix(filename):
except os.error as msg:
err('%s: rename failed (%r)\n' % (filename, msg))
return 1
if preserve_timestamps:
if atime and mtime:
try:
os.utime(filename, (atime, mtime))
except os.error as msg:
err('%s: reset of timestamp failed (%r)\n' % (filename, msg))
return 1
# Return succes
return 0