Issue #24109: Include Tools/scripts/diff.py instead of duplicating it in difflib documentation.
Patch by Keith Gray.
This commit is contained in:
commit
eb2bdfe72c
|
@ -743,65 +743,4 @@ This example shows how to use difflib to create a ``diff``-like utility.
|
||||||
It is also contained in the Python source distribution, as
|
It is also contained in the Python source distribution, as
|
||||||
:file:`Tools/scripts/diff.py`.
|
:file:`Tools/scripts/diff.py`.
|
||||||
|
|
||||||
.. testcode::
|
.. literalinclude:: ../../Tools/scripts/diff.py
|
||||||
|
|
||||||
""" 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
|
|
||||||
|
|
||||||
def main():
|
|
||||||
# Configure the option parser
|
|
||||||
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')
|
|
||||||
hlp = 'Produce HTML side by side diff (can use -c and -l in conjunction)'
|
|
||||||
parser.add_option("-m", action="store_true", default=False, help=hlp)
|
|
||||||
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 # as specified in the usage string
|
|
||||||
|
|
||||||
# we're passing these as arguments to the diff function
|
|
||||||
fromdate = time.ctime(os.stat(fromfile).st_mtime)
|
|
||||||
todate = time.ctime(os.stat(tofile).st_mtime)
|
|
||||||
with open(fromfile) as fromf, open(tofile) as tof:
|
|
||||||
fromlines, tolines = list(fromf), list(tof)
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
# we're using writelines because diff is a generator
|
|
||||||
sys.stdout.writelines(diff)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
|
|
Loading…
Reference in New Issue