mirror of
https://github.com/python/cpython.git
synced 2024-11-30 18:51:15 +01:00
002252c4ad
Remove diff.py and ndiff.py scripts of Tools/scripts/: move them to Doc/includes/. * diff.py and ndiff.py files are no longer executable. Remove also their shebang ("#!/usr/bin/env python3"). * Remove the -profile command from ndiff.py to simply the code. * Remove ndiff.py copyright and history command. The Python documentation examples are distributed under the "Zero Clause BSD License".
60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
""" 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, difflib, argparse
|
|
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():
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('-c', action='store_true', default=False,
|
|
help='Produce a context format diff (default)')
|
|
parser.add_argument('-u', action='store_true', default=False,
|
|
help='Produce a unified format diff')
|
|
parser.add_argument('-m', action='store_true', default=False,
|
|
help='Produce HTML side by side diff '
|
|
'(can use -c and -l in conjunction)')
|
|
parser.add_argument('-n', action='store_true', default=False,
|
|
help='Produce a ndiff format diff')
|
|
parser.add_argument('-l', '--lines', type=int, default=3,
|
|
help='Set number of context lines (default 3)')
|
|
parser.add_argument('fromfile')
|
|
parser.add_argument('tofile')
|
|
options = parser.parse_args()
|
|
|
|
n = options.lines
|
|
fromfile = options.fromfile
|
|
tofile = options.tofile
|
|
|
|
fromdate = file_mtime(fromfile)
|
|
todate = file_mtime(tofile)
|
|
with open(fromfile) as ff:
|
|
fromlines = ff.readlines()
|
|
with open(tofile) 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()
|