annotate Tools/scripts/diff.py @ 49955:878d40468c4e legacy-trunk

Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
author Vinay Sajip <vinay_sajip@yahoo.co.uk>
date Wed, 03 Dec 2008 23:22:58 +0000
parents ab588ce9e71f
children 7fb0abf928e0 65d5ecefd50d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33319
6d3bdd19beeb Patch #914575: difflib side by side diff support, diff.py s/b/s HTML option.
Martin v. Löwis <martin@v.loewis.de>
parents: 33074
diff changeset
1 """ Command line interface to difflib.py providing diffs in four formats:
29386
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
2
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
3 * ndiff: lists every line and highlights interline changes.
33319
6d3bdd19beeb Patch #914575: difflib side by side diff support, diff.py s/b/s HTML option.
Martin v. Löwis <martin@v.loewis.de>
parents: 33074
diff changeset
4 * context: highlights clusters of changes in a before/after format.
29386
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
5 * unified: highlights clusters of changes in an inline format.
33319
6d3bdd19beeb Patch #914575: difflib side by side diff support, diff.py s/b/s HTML option.
Martin v. Löwis <martin@v.loewis.de>
parents: 33074
diff changeset
6 * html: generates side by side comparison with change highlights.
29386
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
7
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
8 """
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
9
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
10 import sys, os, time, difflib, optparse
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
11
33074
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
12 def main():
29386
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
13
33074
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
14 usage = "usage: %prog [options] fromfile tofile"
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
15 parser = optparse.OptionParser(usage)
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
16 parser.add_option("-c", action="store_true", default=False, help='Produce a context format diff (default)')
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
17 parser.add_option("-u", action="store_true", default=False, help='Produce a unified format diff')
33319
6d3bdd19beeb Patch #914575: difflib side by side diff support, diff.py s/b/s HTML option.
Martin v. Löwis <martin@v.loewis.de>
parents: 33074
diff changeset
18 parser.add_option("-m", action="store_true", default=False, help='Produce HTML side by side diff (can use -c and -l in conjunction)')
33074
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
19 parser.add_option("-n", action="store_true", default=False, help='Produce a ndiff format diff')
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
20 parser.add_option("-l", "--lines", type="int", default=3, help='Set number of context lines (default 3)')
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
21 (options, args) = parser.parse_args()
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
22
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
23 if len(args) == 0:
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
24 parser.print_help()
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
25 sys.exit(1)
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
26 if len(args) != 2:
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
27 parser.error("need to specify both a fromfile and tofile")
29386
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
28
33074
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
29 n = options.lines
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
30 fromfile, tofile = args
29386
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
31
33074
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
32 fromdate = time.ctime(os.stat(fromfile).st_mtime)
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
33 todate = time.ctime(os.stat(tofile).st_mtime)
33666
ab588ce9e71f Read the text files to be compared in universal-newline mode.
Tim Peters <tim.peters@gmail.com>
parents: 33319
diff changeset
34 fromlines = open(fromfile, 'U').readlines()
ab588ce9e71f Read the text files to be compared in universal-newline mode.
Tim Peters <tim.peters@gmail.com>
parents: 33319
diff changeset
35 tolines = open(tofile, 'U').readlines()
29386
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
36
33074
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
37 if options.u:
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
38 diff = difflib.unified_diff(fromlines, tolines, fromfile, tofile, fromdate, todate, n=n)
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
39 elif options.n:
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
40 diff = difflib.ndiff(fromlines, tolines)
33319
6d3bdd19beeb Patch #914575: difflib side by side diff support, diff.py s/b/s HTML option.
Martin v. Löwis <martin@v.loewis.de>
parents: 33074
diff changeset
41 elif options.m:
6d3bdd19beeb Patch #914575: difflib side by side diff support, diff.py s/b/s HTML option.
Martin v. Löwis <martin@v.loewis.de>
parents: 33074
diff changeset
42 diff = difflib.HtmlDiff().make_file(fromlines,tolines,fromfile,tofile,context=options.c,numlines=n)
33074
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
43 else:
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
44 diff = difflib.context_diff(fromlines, tolines, fromfile, tofile, fromdate, todate, n=n)
29386
cd5ecc5b38eb Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
45
33074
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
46 sys.stdout.writelines(diff)
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
47
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
48 if __name__ == '__main__':
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 32538
diff changeset
49 main()