Commit dc007d7f authored by Jason R. Coombs's avatar Jason R. Coombs

Merge with 3.2 Issue #10639: reindent.py should not convert newlines.

reindent.py now will use the newline detected in the original file and will report an error if mixed newlines are encountered.
parents 23666678 904a569a
...@@ -1073,6 +1073,9 @@ Tools/Demos ...@@ -1073,6 +1073,9 @@ Tools/Demos
- Issue #11179: Make ccbench work under Python 3.1 and 2.7 again. - Issue #11179: Make ccbench work under Python 3.1 and 2.7 again.
- Issue #10639: reindent.py no longer converts newlines and will raise
an error if attempting to convert a file with mixed newlines.
Extension Modules Extension Modules
----------------- -----------------
...@@ -6661,4 +6664,4 @@ Docs ...@@ -6661,4 +6664,4 @@ Docs
---- ----
**(For information about older versions, consult the HISTORY file.)** **(For information about older versions, consult the HISTORY file.)**
\ No newline at end of file
...@@ -35,7 +35,7 @@ tabnanny.py, reindent should do a good job. ...@@ -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" 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 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. you'd prefer. You can always use the --nobackup option to prevent this.
""" """
...@@ -109,7 +109,7 @@ def check(file): ...@@ -109,7 +109,7 @@ def check(file):
if verbose: if verbose:
print("checking", file, "...", end=' ') print("checking", file, "...", end=' ')
with open(file, 'rb') as f: with open(file, 'rb') as f:
encoding, _ = tokenize.detect_encoding(f.readline) encoding, _ = tokenize.detect_encoding(f.readline)
try: try:
with open(file, encoding=encoding) as f: with open(file, encoding=encoding) as f:
...@@ -118,6 +118,11 @@ def check(file): ...@@ -118,6 +118,11 @@ def check(file):
errprint("%s: I/O Error: %s" % (file, str(msg))) errprint("%s: I/O Error: %s" % (file, str(msg)))
return return
newline = r.newlines
if isinstance(newline, tuple):
errprint("%s: mixed newlines detected; cannot process file" % file)
return
if r.run(): if r.run():
if verbose: if verbose:
print("changed.") print("changed.")
...@@ -129,7 +134,7 @@ def check(file): ...@@ -129,7 +134,7 @@ def check(file):
shutil.copyfile(file, bak) shutil.copyfile(file, bak)
if verbose: if verbose:
print("backed up", file, "to", bak) print("backed up", file, "to", bak)
with open(file, "w", encoding=encoding) as f: with open(file, "w", encoding=encoding, newline=newline) as f:
r.write(f) r.write(f)
if verbose: if verbose:
print("wrote new", file) print("wrote new", file)
...@@ -177,6 +182,10 @@ class Reindenter: ...@@ -177,6 +182,10 @@ class Reindenter:
# indeed, they're our headache! # indeed, they're our headache!
self.stats = [] 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): def run(self):
tokens = tokenize.generate_tokens(self.getline) tokens = tokenize.generate_tokens(self.getline)
for _token in tokens: for _token in tokens:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment