[Python-checkins] r85720 - python/branches/py3k/Tools/scripts/pathfix.py

senthil.kumaran python-checkins at python.org
Tue Oct 19 06:39:35 CEST 2010


Author: senthil.kumaran
Date: Tue Oct 19 06:39:35 2010
New Revision: 85720

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



Modified:
   python/branches/py3k/Tools/scripts/pathfix.py

Modified: python/branches/py3k/Tools/scripts/pathfix.py
==============================================================================
--- python/branches/py3k/Tools/scripts/pathfix.py	(original)
+++ python/branches/py3k/Tools/scripts/pathfix.py	Tue Oct 19 06:39:35 2010
@@ -30,20 +30,24 @@
 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 @@
 
     # 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
 


More information about the Python-checkins mailing list