mirror of https://github.com/python/cpython
Now we handle different the backup copy, because of security
issues regarding user/group and permissions. Fixes 1050828.
This commit is contained in:
parent
27cca3cca7
commit
f88a077f69
|
@ -1378,6 +1378,11 @@ Tests
|
||||||
Tools
|
Tools
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Tools/scripts/reindent.py now creates the backup file using shutil.copy
|
||||||
|
to preserve user/group and permissions. Added also a --nobackup option
|
||||||
|
to not create the backup if the user is concerned regarding this. Check
|
||||||
|
issue 1050828 for more details.
|
||||||
|
|
||||||
- Tools/scripts/win_add2path.py was added. The simple script modifes the
|
- Tools/scripts/win_add2path.py was added. The simple script modifes the
|
||||||
PATH environment var of the HKCU tree and adds the python bin and script
|
PATH environment var of the HKCU tree and adds the python bin and script
|
||||||
directory.
|
directory.
|
||||||
|
|
|
@ -4,10 +4,11 @@
|
||||||
|
|
||||||
"""reindent [-d][-r][-v] [ path ... ]
|
"""reindent [-d][-r][-v] [ path ... ]
|
||||||
|
|
||||||
-d (--dryrun) Dry run. Analyze, but don't make any changes to, files.
|
-d (--dryrun) Dry run. Analyze, but don't make any changes to, files.
|
||||||
-r (--recurse) Recurse. Search for all .py files in subdirectories too.
|
-r (--recurse) Recurse. Search for all .py files in subdirectories too.
|
||||||
-v (--verbose) Verbose. Print informative msgs; else no output.
|
-n (--nobackup) No backup. Does not make a ".bak" file before reindenting.
|
||||||
-h (--help) Help. Print this usage information and exit.
|
-v (--verbose) Verbose. Print informative msgs; else no output.
|
||||||
|
-h (--help) Help. Print this usage information and exit.
|
||||||
|
|
||||||
Change Python (.py) files to use 4-space indents and no hard tab characters.
|
Change Python (.py) files to use 4-space indents and no hard tab characters.
|
||||||
Also trim excess spaces and tabs from ends of lines, and remove empty lines
|
Also trim excess spaces and tabs from ends of lines, and remove empty lines
|
||||||
|
@ -31,17 +32,23 @@ resulting .py file won't change it again).
|
||||||
The hard part of reindenting is figuring out what to do with comment
|
The hard part of reindenting is figuring out what to do with comment
|
||||||
lines. So long as the input files get a clean bill of health from
|
lines. So long as the input files get a clean bill of health from
|
||||||
tabnanny.py, reindent should do a good job.
|
tabnanny.py, reindent should do a good job.
|
||||||
|
|
||||||
|
The backup file is a copy of the one that is being reindented. The ".bak"
|
||||||
|
file is generated with shutil.copy(), but some corner cases regarding
|
||||||
|
user/group and permissions could leave the backup file more readable that
|
||||||
|
you'd prefer. You can always use the --nobackup option to prevent this.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = "1"
|
__version__ = "1"
|
||||||
|
|
||||||
import tokenize
|
import tokenize
|
||||||
import os
|
import os, shutil
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
verbose = 0
|
verbose = 0
|
||||||
recurse = 0
|
recurse = 0
|
||||||
dryrun = 0
|
dryrun = 0
|
||||||
|
makebackup = True
|
||||||
|
|
||||||
def usage(msg=None):
|
def usage(msg=None):
|
||||||
if msg is not None:
|
if msg is not None:
|
||||||
|
@ -57,10 +64,10 @@ def errprint(*args):
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
import getopt
|
import getopt
|
||||||
global verbose, recurse, dryrun
|
global verbose, recurse, dryrun, makebackup
|
||||||
try:
|
try:
|
||||||
opts, args = getopt.getopt(sys.argv[1:], "drvh",
|
opts, args = getopt.getopt(sys.argv[1:], "drnvh",
|
||||||
["dryrun", "recurse", "verbose", "help"])
|
["dryrun", "recurse", "nobackup", "verbose", "help"])
|
||||||
except getopt.error, msg:
|
except getopt.error, msg:
|
||||||
usage(msg)
|
usage(msg)
|
||||||
return
|
return
|
||||||
|
@ -69,6 +76,8 @@ def main():
|
||||||
dryrun += 1
|
dryrun += 1
|
||||||
elif o in ('-r', '--recurse'):
|
elif o in ('-r', '--recurse'):
|
||||||
recurse += 1
|
recurse += 1
|
||||||
|
elif o in ('-n', '--nobackup'):
|
||||||
|
makebackup = False
|
||||||
elif o in ('-v', '--verbose'):
|
elif o in ('-v', '--verbose'):
|
||||||
verbose += 1
|
verbose += 1
|
||||||
elif o in ('-h', '--help'):
|
elif o in ('-h', '--help'):
|
||||||
|
@ -112,11 +121,10 @@ def check(file):
|
||||||
print "But this is a dry run, so leaving it alone."
|
print "But this is a dry run, so leaving it alone."
|
||||||
if not dryrun:
|
if not dryrun:
|
||||||
bak = file + ".bak"
|
bak = file + ".bak"
|
||||||
if os.path.exists(bak):
|
if makebackup:
|
||||||
os.remove(bak)
|
shutil.copyfile(file, bak)
|
||||||
os.rename(file, bak)
|
if verbose:
|
||||||
if verbose:
|
print "backed up", file, "to", bak
|
||||||
print "renamed", file, "to", bak
|
|
||||||
f = open(file, "w")
|
f = open(file, "w")
|
||||||
r.write(f)
|
r.write(f)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
Loading…
Reference in New Issue