21 |
21 |
22 - ends with a directory separator |
22 - ends with a directory separator |
23 - under top-level .hg |
23 - under top-level .hg |
24 - starts at the root of a windows drive |
24 - starts at the root of a windows drive |
25 - contains ".." |
25 - contains ".." |
|
26 |
|
27 More check are also done about the file system states: |
26 - traverses a symlink (e.g. a/symlink_here/b) |
28 - traverses a symlink (e.g. a/symlink_here/b) |
27 - inside a nested repository (a callback can be used to approve |
29 - inside a nested repository (a callback can be used to approve |
28 some nested repositories, e.g., subrepositories) |
30 some nested repositories, e.g., subrepositories) |
|
31 |
|
32 The file system checks are only done when 'realfs' is set to True (the |
|
33 default). They should be disable then we are auditing path for operation on |
|
34 stored history. |
29 ''' |
35 ''' |
30 |
36 |
31 def __init__(self, root, callback=None): |
37 def __init__(self, root, callback=None, realfs=True): |
32 self.audited = set() |
38 self.audited = set() |
33 self.auditeddir = set() |
39 self.auditeddir = set() |
34 self.root = root |
40 self.root = root |
|
41 self._realfs = realfs |
35 self.callback = callback |
42 self.callback = callback |
36 if os.path.lexists(root) and not util.checkcase(root): |
43 if os.path.lexists(root) and not util.checkcase(root): |
37 self.normcase = util.normcase |
44 self.normcase = util.normcase |
38 else: |
45 else: |
39 self.normcase = lambda x: x |
46 self.normcase = lambda x: x |
79 while parts: |
86 while parts: |
80 prefix = os.sep.join(parts) |
87 prefix = os.sep.join(parts) |
81 normprefix = os.sep.join(normparts) |
88 normprefix = os.sep.join(normparts) |
82 if normprefix in self.auditeddir: |
89 if normprefix in self.auditeddir: |
83 break |
90 break |
84 self._checkfs(prefix, path) |
91 if self._realfs: |
|
92 self._checkfs(prefix, path) |
85 prefixes.append(normprefix) |
93 prefixes.append(normprefix) |
86 parts.pop() |
94 parts.pop() |
87 normparts.pop() |
95 normparts.pop() |
88 |
96 |
89 self.audited.add(normpath) |
97 self.audited.add(normpath) |