Mercurial > cpython-lru_cache-weakref
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 |
| 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() |
