31 some nested repositories, e.g., subrepositories) |
31 some nested repositories, e.g., subrepositories) |
32 |
32 |
33 The file system checks are only done when 'realfs' is set to True (the |
33 The file system checks are only done when 'realfs' is set to True (the |
34 default). They should be disable then we are auditing path for operation on |
34 default). They should be disable then we are auditing path for operation on |
35 stored history. |
35 stored history. |
|
36 |
|
37 If 'cached' is set to True, audited paths and sub-directories are cached. |
|
38 Be careful to not keep the cache of unmanaged directories for long because |
|
39 audited paths may be replaced with symlinks. |
36 ''' |
40 ''' |
37 |
41 |
38 def __init__(self, root, callback=None, realfs=True): |
42 def __init__(self, root, callback=None, realfs=True, cached=False): |
39 self.audited = set() |
43 self.audited = set() |
40 self.auditeddir = set() |
44 self.auditeddir = set() |
41 self.root = root |
45 self.root = root |
42 self._realfs = realfs |
46 self._realfs = realfs |
|
47 self._cached = cached |
43 self.callback = callback |
48 self.callback = callback |
44 if os.path.lexists(root) and not util.fscasesensitive(root): |
49 if os.path.lexists(root) and not util.fscasesensitive(root): |
45 self.normcase = util.normcase |
50 self.normcase = util.normcase |
46 else: |
51 else: |
47 self.normcase = lambda x: x |
52 self.normcase = lambda x: x |
94 continue |
99 continue |
95 if self._realfs: |
100 if self._realfs: |
96 self._checkfs(prefix, path) |
101 self._checkfs(prefix, path) |
97 prefixes.append(normprefix) |
102 prefixes.append(normprefix) |
98 |
103 |
99 self.audited.add(normpath) |
104 if self._cached: |
100 # only add prefixes to the cache after checking everything: we don't |
105 self.audited.add(normpath) |
101 # want to add "foo/bar/baz" before checking if there's a "foo/.hg" |
106 # only add prefixes to the cache after checking everything: we don't |
102 self.auditeddir.update(prefixes) |
107 # want to add "foo/bar/baz" before checking if there's a "foo/.hg" |
|
108 self.auditeddir.update(prefixes) |
103 |
109 |
104 def _checkfs(self, prefix, path): |
110 def _checkfs(self, prefix, path): |
105 """raise exception if a file system backed check fails""" |
111 """raise exception if a file system backed check fails""" |
106 curpath = os.path.join(self.root, prefix) |
112 curpath = os.path.join(self.root, prefix) |
107 try: |
113 try: |