Mercurial > cpython-lru_cache-weakref
annotate Lib/filecmp.py @ 15842:f6cd36498a50 legacy-trunk
Document extensions to .pth files.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Sat, 13 Jan 2001 09:54:41 +0000 |
| parents | 785155e2cfca |
| children | f5a3d98a35bc |
| 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: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
7 cmp(f1, f2, shallow=1, use_statcache=0) -> int |
|
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 |
|
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 statcache |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 |
|
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 _cache = {} |
|
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 BUFSIZE=8*1024 |
|
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 |
|
13316
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
19 def cmp(f1, f2, shallow=1, use_statcache=0): |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
20 """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
|
21 |
|
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 Arguments: |
|
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 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
|
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 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
|
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 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
|
29 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
|
30 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
31 use_statcache -- Do not stat() each file directly: go through |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
32 the statcache module for more efficiency. |
|
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 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
|
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 integer -- 1 if the files are the same, 0 otherwise. |
|
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 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
|
39 with a cache invalidation mechanism relying on stale signatures. |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
40 Of course, if 'use_statcache' is true, this mechanism is defeated, |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
41 and the cache will never grow stale. |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
43 """ |
|
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 use_statcache: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
45 stat_function = statcache.stat |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
46 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
47 stat_function = os.stat |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
48 s1 = _sig(stat_function(f1)) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
49 s2 = _sig(stat_function(f2)) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
50 if s1[0] != stat.S_IFREG or s2[0] != stat.S_IFREG: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
51 return 0 |
|
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 shallow and s1 == s2: |
|
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 1 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
54 if s1[1] != s2[1]: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
55 return 0 |
|
11411
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 |
|
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 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
|
58 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
|
59 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
|
60 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
|
61 _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
|
62 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
|
63 |
|
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 def _sig(st): |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
65 return (stat.S_IFMT(st[stat.ST_MODE]), |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
66 st[stat.ST_SIZE], |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
67 st[stat.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
|
68 |
|
24138ec3f396
New module by Moshe Zadka (submitted on Sept. 25). This unifies the
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 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
|
70 bufsize = BUFSIZE |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
71 fp1 = open(f1, 'rb') |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
72 fp2 = open(f2, 'rb') |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
73 while 1: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
74 b1 = fp1.read(bufsize) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
75 b2 = fp2.read(bufsize) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
76 if b1 != b2: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
77 return 0 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
78 if not b1: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
79 return 1 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
80 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
81 # 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
|
82 # |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
83 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
|
84 """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
|
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 dircmp(a,b,ignore=None,hide=None) |
|
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 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
|
88 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
|
89 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
|
90 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
|
91 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
|
92 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
93 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
|
94 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
|
95 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
|
96 or |
|
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.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
|
98 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
|
99 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
|
100 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
|
101 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
102 Attributes: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
103 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
|
104 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
|
105 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
|
106 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
|
107 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
|
108 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
|
109 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
|
110 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
|
111 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
|
112 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
|
113 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
|
114 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
|
115 """ |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
116 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
117 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
|
118 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
|
119 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
|
120 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
|
121 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
|
122 else: |
|
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.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
|
124 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
|
125 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
|
126 else: |
|
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.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
|
128 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
129 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
|
130 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
|
131 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
|
132 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
|
133 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
|
134 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
|
135 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
|
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 __p4_attrs = ('subdirs',) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
138 __p3_attrs = ('same_files', 'diff_files', '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
|
139 __p2_attrs = ('common_dirs', 'common_files', '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
|
140 __p1_attrs = ('common', 'left_only', '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
|
141 __p0_attrs = ('left_list', 'right_list') |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
142 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
143 def __getattr__(self, attr): |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
144 if attr in self.__p4_attrs: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
145 self.phase4() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
146 elif attr in self.__p3_attrs: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
147 self.phase3() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
148 elif attr in self.__p2_attrs: |
|
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.phase2() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
150 elif attr in self.__p1_attrs: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
151 self.phase1() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
152 elif attr in self.__p0_attrs: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
153 self.phase0() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
154 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
155 raise AttributeError, attr |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
156 return getattr(self, attr) |
|
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 def phase1(self): # Compute common names |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
159 a_only, b_only = [], [] |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
160 common = {} |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
161 b = {} |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
162 for fnm in self.right_list: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
163 b[fnm] = 1 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
164 for x in self.left_list: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
165 if b.get(x, 0): |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
166 common[x] = 1 |
|
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 a_only.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 for x in self.right_list: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
170 if common.get(x, 0): |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
171 pass |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
172 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
173 b_only.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
|
174 self.common = common.keys() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
175 self.left_only = a_only |
|
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.right_only = b_only |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
177 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
178 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
|
179 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
|
180 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
|
181 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
|
182 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
183 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
|
184 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
|
185 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
|
186 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
187 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
|
188 try: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
189 a_stat = statcache.stat(a_path) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
190 except os.error, why: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
191 # print 'Can\'t stat', a_path, ':', why[1] |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
192 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
|
193 try: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
194 b_stat = statcache.stat(b_path) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
195 except os.error, why: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
196 # print 'Can\'t stat', b_path, ':', why[1] |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
197 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
|
198 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
199 if ok: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
200 a_type = stat.S_IFMT(a_stat[stat.ST_MODE]) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
201 b_type = stat.S_IFMT(b_stat[stat.ST_MODE]) |
|
15543
785155e2cfca
Update the code to better reflect recommended style:
Fred Drake <fdrake@acm.org>
parents:
15469
diff
changeset
|
202 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
|
203 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
|
204 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
|
205 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
|
206 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
|
207 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
|
208 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
209 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
|
210 else: |
|
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.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
|
212 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
213 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
|
214 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
|
215 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
|
216 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
217 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
|
218 # 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
|
219 # 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
|
220 # 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
|
221 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
|
222 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
|
223 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
|
224 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
|
225 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
|
226 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
227 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
|
228 self.phase4() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
229 for x in self.subdirs.keys(): |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
230 self.subdirs[x].phase4_closure() |
|
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(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
|
233 # Output format is purposely lousy |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
234 print 'diff', self.left, 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
|
235 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
|
236 self.left_only.sort() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
237 print 'Only in', self.left, ':', 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
|
238 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
|
239 self.right_only.sort() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
240 print 'Only in', self.right, ':', 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
|
241 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
|
242 self.same_files.sort() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
243 print 'Identical files :', 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
|
244 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
|
245 self.diff_files.sort() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
246 print 'Differing files :', 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
|
247 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
|
248 self.funny_files.sort() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
249 print 'Trouble with common files :', 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
|
250 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
|
251 self.common_dirs.sort() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
252 print 'Common subdirectories :', 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
|
253 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
|
254 self.common_funny.sort() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
255 print 'Common funny cases :', 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
|
256 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
257 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
|
258 self.report() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
259 for x in self.subdirs.keys(): |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
260 print |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
261 self.subdirs[x].report() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
262 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
263 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
|
264 self.report() |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
265 for x in self.subdirs.keys(): |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
266 print |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
267 self.subdirs[x].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
|
268 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
269 |
|
13316
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
270 def cmpfiles(a, b, common, shallow=1, use_statcache=0): |
|
13126
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 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
|
272 |
|
13316
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
273 a, b -- directory names |
|
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
274 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
|
275 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
|
276 use_statcache -- if true, use statcache.stat() instead of os.stat() |
|
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
277 |
|
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
278 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
|
279 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
|
280 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
|
281 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
|
282 |
|
13316
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
283 """ |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
284 res = ([], [], []) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
285 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
|
286 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
|
287 bx = os.path.join(b, x) |
|
fd78bc5f2b2c
cmpfiles(): Added shallow and use_statcache parameters, with same meanings
Fred Drake <fdrake@acm.org>
parents:
13126
diff
changeset
|
288 res[_cmp(ax, bx, shallow, use_statcache)].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
|
289 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
|
290 |
|
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 # 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
|
293 # Return: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
294 # 0 for equal |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
295 # 1 for different |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
296 # 2 for funny cases (can't stat, etc.) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
297 # |
|
15469
ac220c31ddd7
Call of _cmp had wrong number of paramereters.
Moshe Zadka <moshez@math.huji.ac.il>
parents:
13316
diff
changeset
|
298 def _cmp(a, b, sh, st): |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
299 try: |
|
15469
ac220c31ddd7
Call of _cmp had wrong number of paramereters.
Moshe Zadka <moshez@math.huji.ac.il>
parents:
13316
diff
changeset
|
300 return not abs(cmp(a, b, sh, st)) |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
301 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
|
302 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
|
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 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
305 # 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
|
306 # |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
307 def _filter(list, skip): |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
308 result = [] |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
309 for item in list: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
310 if item not in skip: result.append(item) |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
311 return result |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
312 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
313 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
314 # 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
|
315 # |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
316 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
|
317 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
|
318 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
|
319 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
|
320 if len(args) != 2: |
|
785155e2cfca
Update the code to better reflect recommended style:
Fred Drake <fdrake@acm.org>
parents:
15469
diff
changeset
|
321 raise getopt.error, 'need exactly two args' |
|
13126
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
322 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
|
323 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
|
324 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
|
325 else: |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
326 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
|
327 |
|
78ad4f64adc5
Whoops! We just discovered that Gordon's revamp of this module was
Guido van Rossum <guido@python.org>
parents:
12080
diff
changeset
|
328 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
|
329 demo() |
