Mercurial > cpython-lru_cache-weakref
annotate Lib/filecmp.py @ 70817:dd775b1561ba
Fix markup.
| author | Georg Brandl <georg@python.org> |
|---|---|
| date | Tue, 14 Jun 2011 21:09:55 +0200 |
| parents | 287887198e2f |
| children | 2bacaf6a80c4 |
| 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) -> ([], [], []) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
9 |
|
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 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
|
13 import stat |
|
45738
740b5808c57a
Move itertools izip() code to builtins as zip(). Complete the renaming.
Raymond Hettinger <python@rcn.com>
parents:
45736
diff
changeset
|
14 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
|
15 |
|
54168
fbb33390b254
Use PEP 8 and true booleans.
Georg Brandl <georg@python.org>
parents:
52260
diff
changeset
|
16 __all__ = ["cmp", "dircmp", "cmpfiles"] |
| 16072 | 17 |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 _cache = {} |
|
54168
fbb33390b254
Use PEP 8 and true booleans.
Georg Brandl <georg@python.org>
parents:
52260
diff
changeset
|
19 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
|
20 |
|
54168
fbb33390b254
Use PEP 8 and true booleans.
Georg Brandl <georg@python.org>
parents:
52260
diff
changeset
|
21 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
|
22 """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
|
23 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
24 Arguments: |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
26 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
|
27 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
28 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
|
29 |
|
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 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
|
31 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
|
32 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
33 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
|
34 |
|
22830
a9dd5e6d6805
Convert a pile of obvious "yes/no" functions to return bool.
Tim Peters <tim.peters@gmail.com>
parents:
16072
diff
changeset
|
35 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
|
36 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
37 This function uses a cache for past comparisons and the results, |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
38 with a cache invalidation mechanism relying on stale signatures. |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
40 """ |
|
27731
c1ecdde32f86
Add DeprecationWarning when use_statcache argument is supplied
Andrew M. Kuchling <amk@amk.ca>
parents:
27724
diff
changeset
|
41 |
|
27724
3982f117679e
[Bug #680494] filecmp.py uses obsolete statcache module.
Andrew M. Kuchling <amk@amk.ca>
parents:
23634
diff
changeset
|
42 s1 = _sig(os.stat(f1)) |
|
3982f117679e
[Bug #680494] filecmp.py uses obsolete statcache module.
Andrew M. Kuchling <amk@amk.ca>
parents:
23634
diff
changeset
|
43 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
|
44 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
|
45 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
|
46 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
|
47 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
|
48 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
|
49 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
|
50 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
51 result = _cache.get((f1, f2)) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
52 if result and (s1, s2) == result[:2]: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
53 return result[2] |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
54 outcome = _do_cmp(f1, f2) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
55 _cache[f1, f2] = s1, s2, outcome |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
56 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
|
57 |
|
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 def _sig(st): |
|
23625
65cf478950ff
Replaced obsolete stat module constants with equivalent attributes
Raymond Hettinger <python@rcn.com>
parents:
22830
diff
changeset
|
59 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
|
60 st.st_size, |
|
65cf478950ff
Replaced obsolete stat module constants with equivalent attributes
Raymond Hettinger <python@rcn.com>
parents:
22830
diff
changeset
|
61 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
|
62 |
|
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 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
|
64 bufsize = BUFSIZE |
|
54553
287887198e2f
Use new form of with-statement instead of contextlib.nested().
Raymond Hettinger <python@rcn.com>
parents:
54168
diff
changeset
|
65 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
|
66 while True: |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
67 b1 = fp1.read(bufsize) |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
68 b2 = fp2.read(bufsize) |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
69 if b1 != b2: |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
70 return False |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
71 if not b1: |
|
c6688e9156b5
Merged revisions 70507-70508 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48730
diff
changeset
|
72 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
|
73 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
74 # 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
|
75 # |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
76 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
|
77 """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
|
78 |
|
54168
fbb33390b254
Use PEP 8 and true booleans.
Georg Brandl <georg@python.org>
parents:
52260
diff
changeset
|
79 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
|
80 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
|
81 IGNORE is a list of names to ignore, |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
82 defaults to ['RCS', 'CVS', 'tags']. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
83 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
|
84 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
|
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 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
|
87 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
|
88 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
|
89 or |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
90 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
|
91 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
|
92 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
|
93 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
|
94 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
95 Attributes: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
96 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
|
97 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
|
98 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
|
99 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
|
100 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
|
101 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
|
102 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
|
103 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
|
104 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
|
105 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
|
106 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
|
107 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
|
108 """ |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
109 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
110 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
|
111 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
|
112 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
|
113 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
|
114 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
|
115 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
116 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
|
117 if ignore 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
|
118 self.ignore = ['RCS', 'CVS', 'tags'] # Names ignored in comparison |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
119 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
120 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
|
121 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
122 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
|
123 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
|
124 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
|
125 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
|
126 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
|
127 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
|
128 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
|
129 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
130 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
|
131 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
|
132 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
|
133 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
|
134 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
|
135 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
|
136 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
137 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
|
138 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
|
139 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
|
140 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
|
141 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
142 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
|
143 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
|
144 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
|
145 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
146 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
|
147 try: |
|
27724
3982f117679e
[Bug #680494] filecmp.py uses obsolete statcache module.
Andrew M. Kuchling <amk@amk.ca>
parents:
23634
diff
changeset
|
148 a_stat = os.stat(a_path) |
|
40587
6b18a095c2e7
SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents:
39591
diff
changeset
|
149 except os.error as why: |
|
44542
d0465e782b01
Fix more exception slicing.
Georg Brandl <georg@python.org>
parents:
43020
diff
changeset
|
150 # 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
|
151 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
|
152 try: |
|
27724
3982f117679e
[Bug #680494] filecmp.py uses obsolete statcache module.
Andrew M. Kuchling <amk@amk.ca>
parents:
23634
diff
changeset
|
153 b_stat = os.stat(b_path) |
|
40587
6b18a095c2e7
SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents:
39591
diff
changeset
|
154 except os.error as why: |
|
44542
d0465e782b01
Fix more exception slicing.
Georg Brandl <georg@python.org>
parents:
43020
diff
changeset
|
155 # 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
|
156 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
|
157 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
158 if ok: |
|
23625
65cf478950ff
Replaced obsolete stat module constants with equivalent attributes
Raymond Hettinger <python@rcn.com>
parents:
22830
diff
changeset
|
159 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
|
160 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
|
161 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
|
162 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
|
163 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
|
164 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
|
165 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
|
166 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
|
167 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
168 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
|
169 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
170 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
|
171 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
172 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
|
173 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
|
174 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
|
175 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
176 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
|
177 # 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
|
178 # 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
|
179 # 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
|
180 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
|
181 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
|
182 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
|
183 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
|
184 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
|
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_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
|
187 self.phase4() |
|
40809
f340cb045bf9
- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
188 for sd in self.subdirs.values(): |
|
23634
dbee2f628a90
Replaced .keys() with dictionary iterators
Raymond Hettinger <python@rcn.com>
parents:
23625
diff
changeset
|
189 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
|
190 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
191 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
|
192 # Output format is purposely lousy |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
193 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
|
194 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
|
195 self.left_only.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
196 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
|
197 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
|
198 self.right_only.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
199 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
|
200 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
|
201 self.same_files.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
202 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
|
203 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
|
204 self.diff_files.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
205 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
|
206 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
|
207 self.funny_files.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
208 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
|
209 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
|
210 self.common_dirs.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
211 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
|
212 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
|
213 self.common_funny.sort() |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
214 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
|
215 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
216 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
|
217 self.report() |
|
40809
f340cb045bf9
- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
218 for sd in self.subdirs.values(): |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
219 print() |
|
23634
dbee2f628a90
Replaced .keys() with dictionary iterators
Raymond Hettinger <python@rcn.com>
parents:
23625
diff
changeset
|
220 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
|
221 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
222 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
|
223 self.report() |
|
40809
f340cb045bf9
- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
224 for sd in self.subdirs.values(): |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
225 print() |
|
23634
dbee2f628a90
Replaced .keys() with dictionary iterators
Raymond Hettinger <python@rcn.com>
parents:
23625
diff
changeset
|
226 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
|
227 |
| 28084 | 228 methodmap = dict(subdirs=phase4, |
| 229 same_files=phase3, diff_files=phase3, funny_files=phase3, | |
| 230 common_dirs = phase2, common_files=phase2, common_funny=phase2, | |
| 231 common=phase1, left_only=phase1, right_only=phase1, | |
| 232 left_list=phase0, right_list=phase0) | |
| 233 | |
| 234 def __getattr__(self, attr): | |
| 235 if attr not in self.methodmap: | |
|
43020
907a45df1295
Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents:
42142
diff
changeset
|
236 raise AttributeError(attr) |
| 28084 | 237 self.methodmap[attr](self) |
| 238 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
|
239 |
|
54168
fbb33390b254
Use PEP 8 and true booleans.
Georg Brandl <georg@python.org>
parents:
52260
diff
changeset
|
240 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
|
241 """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
|
242 |
|
13316
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
243 a, b -- directory names |
|
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
244 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
|
245 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
|
246 |
|
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
247 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
|
248 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
|
249 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
|
250 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
|
251 |
|
13316
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
252 """ |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
253 res = ([], [], []) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
254 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
|
255 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
|
256 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
|
257 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
|
258 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
|
259 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
260 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
261 # 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
|
262 # Return: |
|
15867
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15543
diff
changeset
|
263 # 0 for equal |
|
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15543
diff
changeset
|
264 # 1 for different |
|
f5a3d98a35bc
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15543
diff
changeset
|
265 # 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
|
266 # |
| 28084 | 267 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
|
268 try: |
|
27724
3982f117679e
[Bug #680494] filecmp.py uses obsolete statcache module.
Andrew M. Kuchling <amk@amk.ca>
parents:
23634
diff
changeset
|
269 return not abs(cmp(a, b, sh)) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
270 except os.error: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
271 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
|
272 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
273 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
274 # 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
|
275 # |
| 28084 | 276 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
|
277 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
|
278 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
279 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
280 # 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
|
281 # |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
282 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
|
283 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
|
284 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
|
285 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
|
286 if len(args) != 2: |
|
27731
c1ecdde32f86
Add DeprecationWarning when use_statcache argument is supplied
Andrew M. Kuchling <amk@amk.ca>
parents:
27724
diff
changeset
|
287 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
|
288 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
|
289 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
|
290 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
|
291 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
292 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
|
293 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
294 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
|
295 demo() |
