summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
Diffstat (limited to 'Tools')
-rwxr-xr-xTools/scripts/pathfix.py21
1 files changed, 18 insertions, 3 deletions
diff --git a/Tools/scripts/pathfix.py b/Tools/scripts/pathfix.py
index 6cbac10..dd08e0a 100755
--- a/Tools/scripts/pathfix.py
+++ b/Tools/scripts/pathfix.py
@@ -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