diff options
author | Senthil Kumaran <orsenthil@gmail.com> | 2010-10-19 04:39:35 (GMT) |
---|---|---|
committer | Senthil Kumaran <orsenthil@gmail.com> | 2010-10-19 04:39:35 (GMT) |
commit | 7cd94b8aa2bff16d06b254b697c62d52a3f6f5fa (patch) | |
tree | 982e9e51255e4df258630e91a5fbf36de1bcfba7 /Tools/scripts | |
parent | e474309bb7f0ba6e6ae824c215c45f00db691889 (diff) | |
download | cpython-7cd94b8aa2bff16d06b254b697c62d52a3f6f5fa.zip cpython-7cd94b8aa2bff16d06b254b697c62d52a3f6f5fa.tar.gz cpython-7cd94b8aa2bff16d06b254b697c62d52a3f6f5fa.tar.bz2 |
Fix Issue10140 - Tools/scripts/pathfix.py: add option to preserve timestamps
Diffstat (limited to 'Tools/scripts')
-rwxr-xr-x | Tools/scripts/pathfix.py | 21 |
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 |