Mercurial > cpython-lru_cache-weakref
annotate Tools/scripts/diff.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 70bd6f7e013b |
| children |
| rev | line source |
|---|---|
|
71557
65d5ecefd50d
Fix missing or wrong shebangs and missing executable bits for scripts (#10318)
Éric Araujo <merwok@netwok.org>
parents:
33666
diff
changeset
|
1 #!/usr/bin/env python3 |
|
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
|
2 """ 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
|
3 |
|
cd5ecc5b38eb
Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff
changeset
|
4 * 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
|
5 * 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
|
6 * 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
|
7 * 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
|
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 |
|
cd5ecc5b38eb
Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff
changeset
|
11 import sys, os, time, difflib, optparse |
|
77572
ec95b94ea831
Issue #7582: Use ISO timestamp in diff.py
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
71557
diff
changeset
|
12 from datetime import datetime, timezone |
|
ec95b94ea831
Issue #7582: Use ISO timestamp in diff.py
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
71557
diff
changeset
|
13 |
|
ec95b94ea831
Issue #7582: Use ISO timestamp in diff.py
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
71557
diff
changeset
|
14 def file_mtime(path): |
|
ec95b94ea831
Issue #7582: Use ISO timestamp in diff.py
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
71557
diff
changeset
|
15 t = datetime.fromtimestamp(os.stat(path).st_mtime, |
|
ec95b94ea831
Issue #7582: Use ISO timestamp in diff.py
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
71557
diff
changeset
|
16 timezone.utc) |
|
ec95b94ea831
Issue #7582: Use ISO timestamp in diff.py
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
71557
diff
changeset
|
17 return t.astimezone().isoformat() |
|
29386
cd5ecc5b38eb
Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff
changeset
|
18 |
|
33074
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
19 def main(): |
|
29386
cd5ecc5b38eb
Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff
changeset
|
20 |
|
33074
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
21 usage = "usage: %prog [options] fromfile tofile" |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
22 parser = optparse.OptionParser(usage) |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
23 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
|
24 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
|
25 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
|
26 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
|
27 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
|
28 (options, args) = parser.parse_args() |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
29 |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
30 if len(args) == 0: |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
31 parser.print_help() |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
32 sys.exit(1) |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
33 if len(args) != 2: |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
34 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
|
35 |
|
33074
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
36 n = options.lines |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
37 fromfile, tofile = args |
|
29386
cd5ecc5b38eb
Added a command line interface for difflib.py
Raymond Hettinger <python@rcn.com>
parents:
diff
changeset
|
38 |
|
77572
ec95b94ea831
Issue #7582: Use ISO timestamp in diff.py
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
71557
diff
changeset
|
39 fromdate = file_mtime(fromfile) |
|
ec95b94ea831
Issue #7582: Use ISO timestamp in diff.py
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
71557
diff
changeset
|
40 todate = file_mtime(tofile) |
|
87448
70bd6f7e013b
Issue #15204: Deprecated the 'U' mode in file-like objects.
Serhiy Storchaka <storchaka@gmail.com>
parents:
77572
diff
changeset
|
41 with open(fromfile) as ff: |
|
77572
ec95b94ea831
Issue #7582: Use ISO timestamp in diff.py
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
71557
diff
changeset
|
42 fromlines = ff.readlines() |
|
87448
70bd6f7e013b
Issue #15204: Deprecated the 'U' mode in file-like objects.
Serhiy Storchaka <storchaka@gmail.com>
parents:
77572
diff
changeset
|
43 with open(tofile) as tf: |
|
77572
ec95b94ea831
Issue #7582: Use ISO timestamp in diff.py
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
71557
diff
changeset
|
44 tolines = tf.readlines() |
|
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 if options.u: |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
47 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
|
48 elif options.n: |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
49 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
|
50 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
|
51 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
|
52 else: |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
53 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
|
54 |
|
33074
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
55 sys.stdout.writelines(diff) |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
56 |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
57 if __name__ == '__main__': |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
32538
diff
changeset
|
58 main() |
