mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	Fixes #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.
This commit is contained in:
		
							parent
							
								
									45dedaafc2
								
							
						
					
					
						commit
						76748b7033
					
				
					 2 changed files with 18 additions and 3 deletions
				
			
		|  | @ -310,6 +310,12 @@ Build | ||||||
|   "make install" creates symlinks in --prefix bin for the "-32" files in the |   "make install" creates symlinks in --prefix bin for the "-32" files in the | ||||||
|   framework bin directory like the installer does. |   framework bin directory like the installer does. | ||||||
| 
 | 
 | ||||||
|  | Tools/Demos | ||||||
|  | ----------- | ||||||
|  | 
 | ||||||
|  | - Issue #10639: reindent.py no longer converts newlines and will raise | ||||||
|  |   an error if attempting to convert a file with mixed newlines. | ||||||
|  | 
 | ||||||
| Tests | Tests | ||||||
| ----- | ----- | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -35,7 +35,7 @@ | ||||||
| 
 | 
 | ||||||
| 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): | ||||||
| 
 | 
 | ||||||
|     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): | ||||||
|         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): | ||||||
|                 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 @@ def __init__(self, f): | ||||||
|         # 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: | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jason R. Coombs
						Jason R. Coombs