Mercurial > cpython-lru_cache-weakref
annotate Lib/filecmp.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 | bfd53dcb02ff |
| children |
| rev | line source |
|---|---|
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
1 """Utilities for comparing files and directories. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
2 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
3 Classes: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
4 dircmp |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
6 Functions: |
|
54168
fbb33390b254
Use PEP 8 and true booleans.
Georg Brandl <georg@python.org>
parents:
52260
diff
changeset
|
7 cmp(f1, f2, shallow=True) -> int |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
8 cmpfiles(a, b, common) -> ([], [], []) |
|
84124
bfd53dcb02ff
Issue #18149: Add filecmp.clear_cache() to manually clear the filecmp cache.
Ned Deily <nad@acm.org>
parents:
81449
diff
changeset
|
9 clear_cache() |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
10 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
11 """ |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
12 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
13 import os |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
14 import stat |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45736
diff
changeset
|
15 from itertools import filterfalse |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 |
|
84124
bfd53dcb02ff
Issue #18149: Add filecmp.clear_cache() to manually clear the filecmp cache.
Ned Deily <nad@acm.org>
parents:
81449
diff
changeset
|
17 __all__ = ['clear_cache', 'cmp', 'dircmp', 'cmpfiles', 'DEFAULT_IGNORES'] |
| 16072 | 18 |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 _cache = {} |
|
54168
fbb33390b254
Use PEP 8 and true booleans.
Georg Brandl <georg@python.org>
parents:
52260
diff
changeset
|
20 BUFSIZE = 8*1024 |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 |
|
81449
a1efab48d8f8
Close #15442: Expand the list of default directories ignored by filecmp.dircmp and expose it as a module attribute
Eli Bendersky <eliben@gmail.com>
parents:
80843
diff
changeset
|
22 DEFAULT_IGNORES = [ |
|
a1efab48d8f8
Close #15442: Expand the list of default directories ignored by filecmp.dircmp and expose it as a module attribute
Eli Bendersky <eliben@gmail.com>
parents:
80843
diff
changeset
|
23 'RCS', 'CVS', 'tags', '.git', '.hg', '.bzr', '_darcs', '__pycache__'] |
|
a1efab48d8f8
Close #15442: Expand the list of default directories ignored by filecmp.dircmp and expose it as a module attribute
Eli Bendersky <eliben@gmail.com>
parents:
80843
diff
changeset
|
24 |
|
84124
bfd53dcb02ff
Issue #18149: Add filecmp.clear_cache() to manually clear the filecmp cache.
Ned Deily <nad@acm.org>
parents:
81449
diff
changeset
|
25 def clear_cache(): |
|
bfd53dcb02ff
Issue #18149: Add filecmp.clear_cache() to manually clear the filecmp cache.
Ned Deily <nad@acm.org>
parents:
81449
diff
changeset
|
26 """Clear the filecmp cache.""" |
|
bfd53dcb02ff
Issue #18149: Add filecmp.clear_cache() to manually clear the filecmp cache.
Ned Deily <nad@acm.org>
parents:
81449
diff
changeset
|
27 _cache.clear() |
|
81449
a1efab48d8f8
Close #15442: Expand the list of default directories ignored by filecmp.dircmp and expose it as a module attribute
Eli Bendersky <eliben@gmail.com>
parents:
80843
diff
changeset
|
28 |
|
54168
fbb33390b254
Use PEP 8 and true booleans.
Georg Brandl <georg@python.org>
parents:
52260
diff
changeset
|
29 def cmp(f1, f2, shallow=True): |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
30 """Compare two files. |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
32 Arguments: |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
34 f1 -- First file name |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
36 f2 -- Second file name |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
38 shallow -- Just check stat signature (do not read the files). |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
39 defaults to 1. |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
41 Return value: |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 |
|
22830
a9dd5e6d6805
Convert a pile of obvious "yes/no" functions to return bool.
Tim Peters <tim.peters@gmail.com>
parents:
16072
diff
changeset
|
43 True if the files are the same, False otherwise. |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
45 This function uses a cache for past comparisons and the results, |
|
84124
bfd53dcb02ff
Issue #18149: Add filecmp.clear_cache() to manually clear the filecmp cache.
Ned Deily <nad@acm.org>
parents:
81449
diff
changeset
|
46 with a cache invalidation mechanism relying on stale signatures |
|
bfd53dcb02ff
Issue #18149: Add filecmp.clear_cache() to manually clear the filecmp cache.
Ned Deily <nad@acm.org>
parents:
81449
diff
changeset
|
47 or by explicitly calling clear_cache(). |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
49 """ |
|
27731
c1ecdde32f86
Add DeprecationWarning when use_statcache argument is supplied
Andrew M. Kuchling <amk@amk.ca>
parents:
27724
diff
changeset
|
50 |
|
27724
3982f117679e
[Bug #680494] filecmp.py uses obsolete statcache module.
Andrew M. Kuchling <amk@amk.ca>
parents:
23634
diff
changeset
|
51 s1 = _sig(os.stat(f1)) |
|
3982f117679e
[Bug #680494] filecmp.py uses obsolete statcache module.
Andrew M. Kuchling <amk@amk.ca>
parents:
23634
diff
changeset
|
52 s2 = _sig(os.stat(f2)) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
53 if s1[0] != stat.S_IFREG or s2[0] != stat.S_IFREG: |
|
22830
a9dd5e6d6805
Convert a pile of obvious "yes/no" functions to return bool.
Tim Peters <tim.peters@gmail.com>
parents:
16072
diff
changeset
|
54 return False |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
55 if shallow and s1 == s2: |
|
22830
a9dd5e6d6805
Convert a pile of obvious "yes/no" functions to return bool.
Tim Peters <tim.peters@gmail.com>
parents:
16072
diff
changeset
|
56 return True |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
57 if s1[1] != s2[1]: |
|
22830
a9dd5e6d6805
Convert a pile of obvious "yes/no" functions to return bool.
Tim Peters <tim.peters@gmail.com>
parents:
16072
diff
changeset
|
58 return False |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 |
|
70977
2bacaf6a80c4
Issue 11802: filecmp cache was growing without bound.
Raymond Hettinger <python@rcn.com>
parents:
54553
diff
changeset
|
60 outcome = _cache.get((f1, f2, s1, s2)) |
|
2bacaf6a80c4
Issue 11802: filecmp cache was growing without bound.
Raymond Hettinger <python@rcn.com>
parents:
54553
diff
changeset
|
61 if outcome is None: |
|
2bacaf6a80c4
Issue 11802: filecmp cache was growing without bound.
Raymond Hettinger <python@rcn.com>
parents:
54553
diff
changeset
|
62 outcome = _do_cmp(f1, f2) |
|
2bacaf6a80c4
Issue 11802: filecmp cache was growing without bound.
Raymond Hettinger <python@rcn.com>
parents:
54553
diff
changeset
|
63 if len(_cache) > 100: # limit the maximum size of the cache |
|
84124
bfd53dcb02ff
Issue #18149: Add filecmp.clear_cache() to manually clear the filecmp cache.
Ned Deily <nad@acm.org>
parents:
81449
diff
changeset
|
64 clear_cache() |
|
70977
2bacaf6a80c4
Issue 11802: filecmp cache was growing without bound.
Raymond Hettinger <python@rcn.com>
parents:
54553
diff
changeset
|
65 _cache[f1, f2, s1, s2] = outcome |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
66 return outcome |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 |
|
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 def _sig(st): |
|
23625
65cf478950ff
Replaced obsolete stat module constants with equivalent attributes
Raymond Hettinger <python@rcn.com>
parents:
22830
diff
changeset
|
69 return (stat.S_IFMT(st.st_mode), |
|
65cf478950ff
Replaced obsolete stat module constants with equivalent attributes
Raymond Hettinger <python@rcn.com>
parents:
22830
diff
changeset
|
70 st.st_size, |
|
65cf478950ff
Replaced obsolete stat module constants with equivalent attributes
Raymond Hettinger <python@rcn.com>
parents:
22830
diff
changeset
|
71 st.st_mtime) |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 |
|
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 def _do_cmp(f1, f2): |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
74 bufsize = BUFSIZE |
|
54553
287887198e2f
Use new form of with-statement instead of contextlib.nested().
Raymond Hettinger <python@rcn.com>
parents:
54168
diff
changeset
|
75 with open(f1, 'rb') as fp1, open(f2, 'rb') as fp2: |
|
52260
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
76 while True: |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
77 b1 = fp1.read(bufsize) |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
78 b2 = fp2.read(bufsize) |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
79 if b1 != b2: |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
80 return False |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
81 if not b1: |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
82 return True |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
83 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
84 # Directory comparison class. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
85 # |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
86 class dircmp: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
87 """A class that manages the comparison of 2 directories. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
88 |
|
54168
fbb33390b254
Use PEP 8 and true booleans.
Georg Brandl <georg@python.org>
parents:
52260
diff
changeset
|
89 dircmp(a, b, ignore=None, hide=None) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
90 A and B are directories. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
91 IGNORE is a list of names to ignore, |
|
81449
a1efab48d8f8
Close #15442: Expand the list of default directories ignored by filecmp.dircmp and expose it as a module attribute
Eli Bendersky <eliben@gmail.com>
parents:
80843
diff
changeset
|
92 defaults to DEFAULT_IGNORES. |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
93 HIDE is a list of names to hide, |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
94 defaults to [os.curdir, os.pardir]. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
95 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
96 High level usage: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
97 x = dircmp(dir1, dir2) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
98 x.report() -> prints a report on the differences between dir1 and dir2 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
99 or |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
100 x.report_partial_closure() -> prints report on differences between dir1 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
101 and dir2, and reports on common immediate subdirectories. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
102 x.report_full_closure() -> like report_partial_closure, |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
103 but fully recursive. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
104 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
105 Attributes: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
106 left_list, right_list: The files in dir1 and dir2, |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
107 filtered by hide and ignore. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
108 common: a list of names in both dir1 and dir2. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
109 left_only, right_only: names only in dir1, dir2. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
110 common_dirs: subdirectories in both dir1 and dir2. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
111 common_files: files in both dir1 and dir2. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
112 common_funny: names in both dir1 and dir2 where the type differs between |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
113 dir1 and dir2, or the name is not stat-able. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
114 same_files: list of identical files. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
115 diff_files: list of filenames which differ. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
116 funny_files: list of files which could not be compared. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
117 subdirs: a dictionary of dircmp objects, keyed by names in common_dirs. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
118 """ |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
119 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
120 def __init__(self, a, b, ignore=None, hide=None): # Initialize |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
121 self.left = a |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
122 self.right = b |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
123 if hide is None: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
124 self.hide = [os.curdir, os.pardir] # Names never to be shown |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
125 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
126 self.hide = hide |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
127 if ignore is None: |
|
81449
a1efab48d8f8
Close #15442: Expand the list of default directories ignored by filecmp.dircmp and expose it as a module attribute
Eli Bendersky <eliben@gmail.com>
parents:
80843
diff
changeset
|
128 self.ignore = DEFAULT_IGNORES |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
129 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
130 self.ignore = ignore |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
131 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
132 def phase0(self): # Compare everything except common subdirectories |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
133 self.left_list = _filter(os.listdir(self.left), |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
134 self.hide+self.ignore) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
135 self.right_list = _filter(os.listdir(self.right), |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
136 self.hide+self.ignore) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
137 self.left_list.sort() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
138 self.right_list.sort() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
139 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
140 def phase1(self): # Compute common names |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45736
diff
changeset
|
141 a = dict(zip(map(os.path.normcase, self.left_list), self.left_list)) |
|
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45736
diff
changeset
|
142 b = dict(zip(map(os.path.normcase, self.right_list), self.right_list)) |
|
45734
e09bc1c5295b
Issue 2186 and 2187. Move filter from itertools to builtins.
Raymond Hettinger <python@rcn.com>
parents:
44542
diff
changeset
|
143 self.common = list(map(a.__getitem__, filter(b.__contains__, a))) |
|
45736
7752a57f9c49
Rename ifilterfalse() to filterfalse() and izip_longest() to zip_longest().
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
144 self.left_only = list(map(a.__getitem__, filterfalse(b.__contains__, a))) |
|
7752a57f9c49
Rename ifilterfalse() to filterfalse() and izip_longest() to zip_longest().
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
145 self.right_only = list(map(b.__getitem__, filterfalse(a.__contains__, b))) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
146 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
147 def phase2(self): # Distinguish files, directories, funnies |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
148 self.common_dirs = [] |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
149 self.common_files = [] |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
150 self.common_funny = [] |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
151 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
152 for x in self.common: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
153 a_path = os.path.join(self.left, x) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
154 b_path = os.path.join(self.right, x) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
155 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
156 ok = 1 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
157 try: |
|
27724
3982f117679e
[Bug #680494] filecmp.py uses obsolete statcache module.
Andrew M. Kuchling <amk@amk.ca>
parents:
23634
diff
changeset
|
158 a_stat = os.stat(a_path) |
|
80843
091e68e08c3c
Cleanup filecmp: starting from 3.3 os.error is alias for OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
70977
diff
changeset
|
159 except OSError as why: |
|
44542
d0465e782b01
Fix more exception slicing.
Georg Brandl <georg@python.org>
parents:
43020
diff
changeset
|
160 # print('Can\'t stat', a_path, ':', why.args[1]) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
161 ok = 0 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
162 try: |
|
27724
3982f117679e
[Bug #680494] filecmp.py uses obsolete statcache module.
Andrew M. Kuchling <amk@amk.ca>
parents:
23634
diff
changeset
|
163 b_stat = os.stat(b_path) |
|
80843
091e68e08c3c
Cleanup filecmp: starting from 3.3 os.error is alias for OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
70977
diff
changeset
|
164 except OSError as why: |
|
44542
d0465e782b01
Fix more exception slicing.
Georg Brandl <georg@python.org>
parents:
43020
diff
changeset
|
165 # print('Can\'t stat', b_path, ':', why.args[1]) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
166 ok = 0 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
167 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
168 if ok: |
|
23625
65cf478950ff
Replaced obsolete stat module constants with equivalent attributes
Raymond Hettinger <python@rcn.com>
parents:
22830
diff
changeset
|
169 a_type = stat.S_IFMT(a_stat.st_mode) |
|
65cf478950ff
Replaced obsolete stat module constants with equivalent attributes
Raymond Hettinger <python@rcn.com>
parents:
22830
diff
changeset
|
170 b_type = stat.S_IFMT(b_stat.st_mode) |
|
15543
785155e2cfca
Update the code to better reflect recommended style:
Fred Drake <fdrake@acm.org>
parents:
15469
diff
changeset
|
171 if a_type != b_type: |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
172 self.common_funny.append(x) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
173 elif stat.S_ISDIR(a_type): |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
174 self.common_dirs.append(x) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
175 elif stat.S_ISREG(a_type): |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
176 self.common_files.append(x) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
177 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
178 self.common_funny.append(x) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
179 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
180 self.common_funny.append(x) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
181 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
182 def phase3(self): # Find out differences between common files |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
183 xx = cmpfiles(self.left, self.right, self.common_files) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
184 self.same_files, self.diff_files, self.funny_files = xx |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
185 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
186 def phase4(self): # Find out differences between common subdirectories |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
187 # A new dircmp object is created for each common subdirectory, |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
188 # these are stored in a dictionary indexed by filename. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
189 # The hide and ignore properties are inherited from the parent |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
190 self.subdirs = {} |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
191 for x in self.common_dirs: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
192 a_x = os.path.join(self.left, x) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
193 b_x = os.path.join(self.right, x) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
194 self.subdirs[x] = dircmp(a_x, b_x, self.ignore, self.hide) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
195 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
196 def phase4_closure(self): # Recursively call phase4() on subdirectories |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
197 self.phase4() |
|
40809
f340cb045bf9
- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
198 for sd in self.subdirs.values(): |
|
23634
dbee2f628a90
Replaced .keys() with dictionary iterators
Raymond Hettinger <python@rcn.com>
parents:
23625
diff
changeset
|
199 sd.phase4_closure() |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
200 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
201 def report(self): # Print a report on the differences between a and b |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
202 # Output format is purposely lousy |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
203 print('diff', self.left, self.right) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
204 if self.left_only: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
205 self.left_only.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
206 print('Only in', self.left, ':', self.left_only) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
207 if self.right_only: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
208 self.right_only.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
209 print('Only in', self.right, ':', self.right_only) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
210 if self.same_files: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
211 self.same_files.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
212 print('Identical files :', self.same_files) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
213 if self.diff_files: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
214 self.diff_files.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
215 print('Differing files :', self.diff_files) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
216 if self.funny_files: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
217 self.funny_files.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
218 print('Trouble with common files :', self.funny_files) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
219 if self.common_dirs: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
220 self.common_dirs.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
221 print('Common subdirectories :', self.common_dirs) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
222 if self.common_funny: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
223 self.common_funny.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
224 print('Common funny cases :', self.common_funny) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
225 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
226 def report_partial_closure(self): # Print reports on self and on subdirs |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
227 self.report() |
|
40809
f340cb045bf9
- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
228 for sd in self.subdirs.values(): |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
229 print() |
|
23634
dbee2f628a90
Replaced .keys() with dictionary iterators
Raymond Hettinger <python@rcn.com>
parents:
23625
diff
changeset
|
230 sd.report() |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
231 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
232 def report_full_closure(self): # Report on self and subdirs recursively |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
233 self.report() |
|
40809
f340cb045bf9
- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
234 for sd in self.subdirs.values(): |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
235 print() |
|
23634
dbee2f628a90
Replaced .keys() with dictionary iterators
Raymond Hettinger <python@rcn.com>
parents:
23625
diff
changeset
|
236 sd.report_full_closure() |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
237 |
| 28084 | 238 methodmap = dict(subdirs=phase4, |
| 239 same_files=phase3, diff_files=phase3, funny_files=phase3, | |
| 240 common_dirs = phase2, common_files=phase2, common_funny=phase2, | |
| 241 common=phase1, left_only=phase1, right_only=phase1, | |
| 242 left_list=phase0, right_list=phase0) | |
| 243 | |
| 244 def __getattr__(self, attr): | |
| 245 if attr not in self.methodmap: | |
|
43020
907a45df1295
Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents:
42142
diff
changeset
|
246 raise AttributeError(attr) |
| 28084 | 247 self.methodmap[attr](self) |
| 248 return getattr(self, attr) | |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
249 |
|
54168
fbb33390b254
Use PEP 8 and true booleans.
Georg Brandl <georg@python.org>
parents:
52260
diff
changeset
|
250 def cmpfiles(a, b, common, shallow=True): |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
251 """Compare common files in two directories. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
252 |
|
13316
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
253 a, b -- directory names |
|
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
254 common -- list of file names found in both directories |
|
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
255 shallow -- if true, do comparison based solely on stat() information |
|
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
256 |
|
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
257 Returns a tuple of three lists: |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
258 files that compare equal |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
259 files that are different |
|
13316
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
260 filenames that aren't regular files. |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
261 |
|
13316
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
262 """ |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
263 res = ([], [], []) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
264 for x in common: |
|
13316
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
265 ax = os.path.join(a, x) |
|
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
266 bx = os.path.join(b, x) |
|
27724
3982f117679e
[Bug #680494] filecmp.py uses obsolete statcache module.
Andrew M. Kuchling <amk@amk.ca>
parents:
23634
diff
changeset
|
267 res[_cmp(ax, bx, shallow)].append(x) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
268 return res |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
269 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
270 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
271 # Compare two files. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
272 # Return: |
|
15867
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15543
diff
changeset
|
273 # 0 for equal |
|
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15543
diff
changeset
|
274 # 1 for different |
|
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15543
diff
changeset
|
275 # 2 for funny cases (can't stat, etc.) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
276 # |
| 28084 | 277 def _cmp(a, b, sh, abs=abs, cmp=cmp): |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
278 try: |
|
27724
3982f117679e
[Bug #680494] filecmp.py uses obsolete statcache module.
Andrew M. Kuchling <amk@amk.ca>
parents:
23634
diff
changeset
|
279 return not abs(cmp(a, b, sh)) |
|
80843
091e68e08c3c
Cleanup filecmp: starting from 3.3 os.error is alias for OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
70977
diff
changeset
|
280 except OSError: |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
281 return 2 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
282 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
283 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
284 # Return a copy with items that occur in skip removed. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
285 # |
| 28084 | 286 def _filter(flist, skip): |
|
45736
7752a57f9c49
Rename ifilterfalse() to filterfalse() and izip_longest() to zip_longest().
Raymond Hettinger <python@rcn.com>
parents:
45735
diff
changeset
|
287 return list(filterfalse(skip.__contains__, flist)) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
288 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
289 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
290 # Demonstration and testing. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
291 # |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
292 def demo(): |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
293 import sys |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
294 import getopt |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
295 options, args = getopt.getopt(sys.argv[1:], 'r') |
|
15543
785155e2cfca
Update the code to better reflect recommended style:
Fred Drake <fdrake@acm.org>
parents:
15469
diff
changeset
|
296 if len(args) != 2: |
|
27731
c1ecdde32f86
Add DeprecationWarning when use_statcache argument is supplied
Andrew M. Kuchling <amk@amk.ca>
parents:
27724
diff
changeset
|
297 raise getopt.GetoptError('need exactly two args', None) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
298 dd = dircmp(args[0], args[1]) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
299 if ('-r', '') in options: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
300 dd.report_full_closure() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
301 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
302 dd.report() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
303 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
304 if __name__ == '__main__': |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
305 demo() |
