mirror of
https://github.com/python/cpython.git
synced 2025-01-20 15:34:52 +08:00
Fix Issue10140 - Tools/scripts/pathfix.py: add option to preserve timestamps
This commit is contained in:
parent
e474309bb7
commit
7cd94b8aa2
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user