Index: Tools/scripts/pathfix.py =================================================================== --- Tools/scripts/pathfix.py (revision 85705) +++ Tools/scripts/pathfix.py (working copy) @@ -30,20 +30,24 @@ rep = sys.stdout.write new_interpreter = None +preserve_timestamps = False def main(): global new_interpreter + global preserve_timestamps usage = ('usage: %s -i /interpreter 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 @@ # 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 @@ 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