Skip to content

Commit 7cd94b8

Browse files
committed
Fix Issue10140 - Tools/scripts/pathfix.py: add option to preserve timestamps
1 parent e474309 commit 7cd94b8

1 file changed

Lines changed: 18 additions & 3 deletions

File tree

Tools/scripts/pathfix.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,24 @@
3030
rep = sys.stdout.write
3131

3232
new_interpreter = None
33+
preserve_timestamps = False
3334

3435
def main():
3536
global new_interpreter
36-
usage = ('usage: %s -i /interpreter file-or-directory ...\n' %
37+
global preserve_timestamps
38+
usage = ('usage: %s -i /interpreter -p file-or-directory ...\n' %
3739
sys.argv[0])
3840
try:
39-
opts, args = getopt.getopt(sys.argv[1:], 'i:')
41+
opts, args = getopt.getopt(sys.argv[1:], 'i:p')
4042
except getopt.error as msg:
41-
err(msg + '\n')
43+
err(str(msg) + '\n')
4244
err(usage)
4345
sys.exit(2)
4446
for o, a in opts:
4547
if o == '-i':
4648
new_interpreter = a.encode()
49+
if o == '-p':
50+
preserve_timestamps = True
4751
if not new_interpreter or not new_interpreter.startswith(b'/') or \
4852
not args:
4953
err('-i option or file-or-directory missing\n')
@@ -119,9 +123,13 @@ def fix(filename):
119123

120124
# Finishing touch -- move files
121125

126+
mtime = None
127+
atime = None
122128
# First copy the file's mode to the temp file
123129
try:
124130
statbuf = os.stat(filename)
131+
mtime = statbuf.st_mtime
132+
atime = statbuf.st_atime
125133
os.chmod(tempname, statbuf[ST_MODE] & 0o7777)
126134
except os.error as msg:
127135
err('%s: warning: chmod failed (%r)\n' % (tempname, msg))
@@ -136,6 +144,13 @@ def fix(filename):
136144
except os.error as msg:
137145
err('%s: rename failed (%r)\n' % (filename, msg))
138146
return 1
147+
if preserve_timestamps:
148+
if atime and mtime:
149+
try:
150+
os.utime(filename, (atime, mtime))
151+
except os.error as msg:
152+
err('%s: reset of timestamp failed (%r)\n' % (filename, msg))
153+
return 1
139154
# Return succes
140155
return 0
141156

0 commit comments

Comments
 (0)