equal
deleted
inserted
replaced
85 if normpath in self.audited: |
85 if normpath in self.audited: |
86 return |
86 return |
87 # AIX ignores "/" at end of path, others raise EISDIR. |
87 # AIX ignores "/" at end of path, others raise EISDIR. |
88 if util.endswithsep(path): |
88 if util.endswithsep(path): |
89 raise util.Abort(_("path ends in directory separator: %s") % path) |
89 raise util.Abort(_("path ends in directory separator: %s") % path) |
90 parts = util.splitpath(normpath) |
90 parts = util.splitpath(path) |
91 if (os.path.splitdrive(path)[0] |
91 if (os.path.splitdrive(path)[0] |
92 or parts[0].lower() in ('.hg', '.hg.', '') |
92 or parts[0].lower() in ('.hg', '.hg.', '') |
93 or os.pardir in parts): |
93 or os.pardir in parts): |
94 raise util.Abort(_("path contains illegal component: %s") % path) |
94 raise util.Abort(_("path contains illegal component: %s") % path) |
95 if '.hg' in path.lower(): |
95 if '.hg' in path.lower(): |
99 pos = lparts.index(p) |
99 pos = lparts.index(p) |
100 base = os.path.join(*parts[:pos]) |
100 base = os.path.join(*parts[:pos]) |
101 raise util.Abort(_('path %r is inside nested repo %r') |
101 raise util.Abort(_('path %r is inside nested repo %r') |
102 % (path, base)) |
102 % (path, base)) |
103 |
103 |
|
104 normparts = util.splitpath(normpath) |
|
105 assert len(parts) == len(normparts) |
|
106 |
104 parts.pop() |
107 parts.pop() |
|
108 normparts.pop() |
105 prefixes = [] |
109 prefixes = [] |
106 while parts: |
110 while parts: |
107 prefix = os.sep.join(parts) |
111 prefix = os.sep.join(parts) |
108 if prefix in self.auditeddir: |
112 normprefix = os.sep.join(normparts) |
|
113 if normprefix in self.auditeddir: |
109 break |
114 break |
110 curpath = os.path.join(self.root, prefix) |
115 curpath = os.path.join(self.root, prefix) |
111 try: |
116 try: |
112 st = os.lstat(curpath) |
117 st = os.lstat(curpath) |
113 except OSError, err: |
118 except OSError, err: |
123 elif (stat.S_ISDIR(st.st_mode) and |
128 elif (stat.S_ISDIR(st.st_mode) and |
124 os.path.isdir(os.path.join(curpath, '.hg'))): |
129 os.path.isdir(os.path.join(curpath, '.hg'))): |
125 if not self.callback or not self.callback(curpath): |
130 if not self.callback or not self.callback(curpath): |
126 raise util.Abort(_('path %r is inside nested repo %r') % |
131 raise util.Abort(_('path %r is inside nested repo %r') % |
127 (path, prefix)) |
132 (path, prefix)) |
128 prefixes.append(prefix) |
133 prefixes.append(normprefix) |
129 parts.pop() |
134 parts.pop() |
|
135 normparts.pop() |
130 |
136 |
131 self.audited.add(normpath) |
137 self.audited.add(normpath) |
132 # only add prefixes to the cache after checking everything: we don't |
138 # only add prefixes to the cache after checking everything: we don't |
133 # want to add "foo/bar/baz" before checking if there's a "foo/.hg" |
139 # want to add "foo/bar/baz" before checking if there's a "foo/.hg" |
134 self.auditeddir.update(prefixes) |
140 self.auditeddir.update(prefixes) |