summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2011-07-27 18:05:37 (GMT)
committerJason R. Coombs <jaraco@jaraco.com>2011-07-27 18:05:37 (GMT)
commitfee7745ebb1c344d35e2245c4cf9aeb6f0f929a1 (patch)
tree396c89f2b17d46035a7f3d1555eb8fde9727db66 /Tools
parent0cf7e25c28d48cd41819bc60ced0c9daa785c67a (diff)
downloadcpython-fee7745ebb1c344d35e2245c4cf9aeb6f0f929a1.zip
cpython-fee7745ebb1c344d35e2245c4cf9aeb6f0f929a1.tar.gz
cpython-fee7745ebb1c344d35e2245c4cf9aeb6f0f929a1.tar.bz2
Fixes #10639: reindent.py should not convert newlines
Backport of changeset 070dc6e359fb, reindent.py now will use the newline detected in the original file and will report an error if mixed newlines are encountered.
Diffstat (limited to 'Tools')
-rwxr-xr-xTools/scripts/reindent.py17
1 files changed, 14 insertions, 3 deletions
diff --git a/Tools/scripts/reindent.py b/Tools/scripts/reindent.py
index 3e9affb..df15edb 100755
--- a/Tools/scripts/reindent.py
+++ b/Tools/scripts/reindent.py
@@ -35,7 +35,7 @@ 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
+user/group and permissions could leave the backup file more readable than
you'd prefer. You can always use the --nobackup option to prevent this.
"""
@@ -44,6 +44,7 @@ __version__ = "1"
import tokenize
import os, shutil
import sys
+import io
verbose = 0
recurse = 0
@@ -108,13 +109,19 @@ def check(file):
if verbose:
print "checking", file, "...",
try:
- f = open(file)
+ f = io.open(file)
except IOError, msg:
errprint("%s: I/O Error: %s" % (file, str(msg)))
return
r = Reindenter(f)
f.close()
+
+ newline = r.newlines
+ if isinstance(newline, tuple):
+ errprint("%s: mixed newlines detected; cannot process file" % file)
+ return
+
if r.run():
if verbose:
print "changed."
@@ -126,7 +133,7 @@ def check(file):
shutil.copyfile(file, bak)
if verbose:
print "backed up", file, "to", bak
- f = open(file, "w")
+ f = io.open(file, "w", newline=newline)
r.write(f)
f.close()
if verbose:
@@ -173,6 +180,10 @@ class Reindenter:
# indeed, they're our headache!
self.stats = []
+ # Save the newlines found in the file so they can be used to
+ # create output without mutating the newlines.
+ self.newlines = f.newlines
+
def run(self):
tokenize.tokenize(self.getline, self.tokeneater)
# Remove trailing empty lines.