| 
									
										
										
										
											2010-03-11 22:53:45 +00:00
										 |  |  | #! /usr/bin/env python3 | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | "Replace tabs with spaces in argument files.  Print names of changed files." | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | import getopt | 
					
						
							| 
									
										
										
										
											2010-11-30 17:30:43 +00:00
										 |  |  | import tokenize | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  | def main(): | 
					
						
							|  |  |  |     tabsize = 8 | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         opts, args = getopt.getopt(sys.argv[1:], "t:") | 
					
						
							|  |  |  |         if not args: | 
					
						
							| 
									
										
										
										
											2007-08-22 23:05:06 +00:00
										 |  |  |             raise getopt.error("At least one file argument required") | 
					
						
							| 
									
										
										
										
											2007-01-10 16:19:56 +00:00
										 |  |  |     except getopt.error as msg: | 
					
						
							| 
									
										
										
										
											2007-08-03 17:06:41 +00:00
										 |  |  |         print(msg) | 
					
						
							|  |  |  |         print("usage:", sys.argv[0], "[-t tabwidth] file ...") | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  |         return | 
					
						
							| 
									
										
										
										
											1998-10-20 15:33:33 +00:00
										 |  |  |     for optname, optvalue in opts: | 
					
						
							|  |  |  |         if optname == '-t': | 
					
						
							|  |  |  |             tabsize = int(optvalue) | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-10 14:40:08 +01:00
										 |  |  |     return max(process(filename, tabsize) for filename in args) | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-21 12:49:28 +00:00
										 |  |  | def process(filename, tabsize, verbose=True): | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2010-11-30 17:30:43 +00:00
										 |  |  |         with tokenize.open(filename) as f: | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  |             text = f.read() | 
					
						
							| 
									
										
										
										
											2010-11-30 17:30:43 +00:00
										 |  |  |             encoding = f.encoding | 
					
						
							| 
									
										
										
										
											2007-01-10 16:19:56 +00:00
										 |  |  |     except IOError as msg: | 
					
						
							| 
									
										
										
										
											2007-08-03 17:06:41 +00:00
										 |  |  |         print("%r: I/O error: %s" % (filename, msg)) | 
					
						
							| 
									
										
										
										
											2023-10-10 14:40:08 +01:00
										 |  |  |         return 2 | 
					
						
							| 
									
										
										
										
											2002-09-11 20:36:02 +00:00
										 |  |  |     newtext = text.expandtabs(tabsize) | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  |     if newtext == text: | 
					
						
							| 
									
										
										
										
											2023-10-10 14:40:08 +01:00
										 |  |  |         return 0 | 
					
						
							| 
									
										
										
										
											2003-05-13 18:14:25 +00:00
										 |  |  |     backup = filename + "~" | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  |     try: | 
					
						
							|  |  |  |         os.unlink(backup) | 
					
						
							| 
									
										
										
										
											2012-12-24 19:58:48 +02:00
										 |  |  |     except OSError: | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  |         pass | 
					
						
							|  |  |  |     try: | 
					
						
							| 
									
										
										
										
											2003-05-13 18:14:25 +00:00
										 |  |  |         os.rename(filename, backup) | 
					
						
							| 
									
										
										
										
											2012-12-24 19:58:48 +02:00
										 |  |  |     except OSError: | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  |         pass | 
					
						
							| 
									
										
										
										
											2010-11-30 17:30:43 +00:00
										 |  |  |     with open(filename, "w", encoding=encoding) as f: | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  |         f.write(newtext) | 
					
						
							| 
									
										
										
										
											2010-10-21 12:49:28 +00:00
										 |  |  |     if verbose: | 
					
						
							|  |  |  |         print(filename) | 
					
						
							| 
									
										
										
										
											2023-10-10 14:40:08 +01:00
										 |  |  |     return 1 | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-09-14 15:43:38 +00:00
										 |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											2023-10-10 14:40:08 +01:00
										 |  |  |     raise SystemExit(main()) |