mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Fix Issue10140 - Tools/scripts/pathfix.py: add option to preserve timestamps
This commit is contained in:
parent
e474309bb7
commit
7cd94b8aa2
1 changed files with 18 additions and 3 deletions
|
@ -30,20 +30,24 @@ dbg = err
|
||||||
rep = sys.stdout.write
|
rep = sys.stdout.write
|
||||||
|
|
||||||
new_interpreter = None
|
new_interpreter = None
|
||||||
|
preserve_timestamps = False
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
global new_interpreter
|
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])
|
sys.argv[0])
|
||||||
try:
|
try:
|
||||||
opts, args = getopt.getopt(sys.argv[1:], 'i:')
|
opts, args = getopt.getopt(sys.argv[1:], 'i:p')
|
||||||
except getopt.error as msg:
|
except getopt.error as msg:
|
||||||
err(msg + '\n')
|
err(str(msg) + '\n')
|
||||||
err(usage)
|
err(usage)
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
for o, a in opts:
|
for o, a in opts:
|
||||||
if o == '-i':
|
if o == '-i':
|
||||||
new_interpreter = a.encode()
|
new_interpreter = a.encode()
|
||||||
|
if o == '-p':
|
||||||
|
preserve_timestamps = True
|
||||||
if not new_interpreter or not new_interpreter.startswith(b'/') or \
|
if not new_interpreter or not new_interpreter.startswith(b'/') or \
|
||||||
not args:
|
not args:
|
||||||
err('-i option or file-or-directory missing\n')
|
err('-i option or file-or-directory missing\n')
|
||||||
|
@ -119,9 +123,13 @@ def fix(filename):
|
||||||
|
|
||||||
# Finishing touch -- move files
|
# Finishing touch -- move files
|
||||||
|
|
||||||
|
mtime = None
|
||||||
|
atime = None
|
||||||
# First copy the file's mode to the temp file
|
# First copy the file's mode to the temp file
|
||||||
try:
|
try:
|
||||||
statbuf = os.stat(filename)
|
statbuf = os.stat(filename)
|
||||||
|
mtime = statbuf.st_mtime
|
||||||
|
atime = statbuf.st_atime
|
||||||
os.chmod(tempname, statbuf[ST_MODE] & 0o7777)
|
os.chmod(tempname, statbuf[ST_MODE] & 0o7777)
|
||||||
except os.error as msg:
|
except os.error as msg:
|
||||||
err('%s: warning: chmod failed (%r)\n' % (tempname, msg))
|
err('%s: warning: chmod failed (%r)\n' % (tempname, msg))
|
||||||
|
@ -136,6 +144,13 @@ def fix(filename):
|
||||||
except os.error as msg:
|
except os.error as msg:
|
||||||
err('%s: rename failed (%r)\n' % (filename, msg))
|
err('%s: rename failed (%r)\n' % (filename, msg))
|
||||||
return 1
|
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 succes
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue