mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| """ Command line interface to difflib.py providing diffs in four formats:
 | |
| 
 | |
| * ndiff:    lists every line and highlights interline changes.
 | |
| * context:  highlights clusters of changes in a before/after format.
 | |
| * unified:  highlights clusters of changes in an inline format.
 | |
| * html:     generates side by side comparison with change highlights.
 | |
| 
 | |
| """
 | |
| 
 | |
| import sys, os, time, difflib, optparse
 | |
| from datetime import datetime, timezone
 | |
| 
 | |
| def file_mtime(path):
 | |
|     t = datetime.fromtimestamp(os.stat(path).st_mtime,
 | |
|                                timezone.utc)
 | |
|     return t.astimezone().isoformat()
 | |
| 
 | |
| def main():
 | |
| 
 | |
|     usage = "usage: %prog [options] fromfile tofile"
 | |
|     parser = optparse.OptionParser(usage)
 | |
|     parser.add_option("-c", action="store_true", default=False, help='Produce a context format diff (default)')
 | |
|     parser.add_option("-u", action="store_true", default=False, help='Produce a unified format diff')
 | |
|     parser.add_option("-m", action="store_true", default=False, help='Produce HTML side by side diff (can use -c and -l in conjunction)')
 | |
|     parser.add_option("-n", action="store_true", default=False, help='Produce a ndiff format diff')
 | |
|     parser.add_option("-l", "--lines", type="int", default=3, help='Set number of context lines (default 3)')
 | |
|     (options, args) = parser.parse_args()
 | |
| 
 | |
|     if len(args) == 0:
 | |
|         parser.print_help()
 | |
|         sys.exit(1)
 | |
|     if len(args) != 2:
 | |
|         parser.error("need to specify both a fromfile and tofile")
 | |
| 
 | |
|     n = options.lines
 | |
|     fromfile, tofile = args
 | |
| 
 | |
|     fromdate = file_mtime(fromfile)
 | |
|     todate = file_mtime(tofile)
 | |
|     with open(fromfile, 'U') as ff:
 | |
|         fromlines = ff.readlines()
 | |
|     with open(tofile, 'U') as tf:
 | |
|         tolines = tf.readlines()
 | |
| 
 | |
|     if options.u:
 | |
|         diff = difflib.unified_diff(fromlines, tolines, fromfile, tofile, fromdate, todate, n=n)
 | |
|     elif options.n:
 | |
|         diff = difflib.ndiff(fromlines, tolines)
 | |
|     elif options.m:
 | |
|         diff = difflib.HtmlDiff().make_file(fromlines,tolines,fromfile,tofile,context=options.c,numlines=n)
 | |
|     else:
 | |
|         diff = difflib.context_diff(fromlines, tolines, fromfile, tofile, fromdate, todate, n=n)
 | |
| 
 | |
|     sys.stdout.writelines(diff)
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     main()
 | 
