106 raise error.InputError( |
106 raise error.InputError( |
107 _(b"path '%s' is inside nested repo %r") |
107 _(b"path '%s' is inside nested repo %r") |
108 % (path, pycompat.bytestr(base)) |
108 % (path, pycompat.bytestr(base)) |
109 ) |
109 ) |
110 |
110 |
111 parts.pop() |
111 if self._realfs: |
112 # It's important that we check the path parts starting from the root. |
112 parts.pop() |
113 # We don't want to add "foo/bar/baz" to auditeddir before checking if |
113 # It's important that we check the path parts starting from the root. |
114 # there's a "foo/.hg" directory. This also means we won't accidentally |
114 # We don't want to add "foo/bar/baz" to auditeddir before checking if |
115 # traverse a symlink into some other filesystem (which is potentially |
115 # there's a "foo/.hg" directory. This also means we won't accidentally |
116 # expensive to access). |
116 # traverse a symlink into some other filesystem (which is potentially |
117 for i in range(len(parts)): |
117 # expensive to access). |
118 prefix = pycompat.ossep.join(parts[: i + 1]) |
118 for i in range(len(parts)): |
119 if prefix in self.auditeddir: |
119 prefix = pycompat.ossep.join(parts[: i + 1]) |
120 continue |
120 if prefix in self.auditeddir: |
121 if self._realfs: |
121 continue |
122 res = self._checkfs_exists(prefix, path) |
122 res = self._checkfs_exists(prefix, path) |
123 if self._cached: |
123 if self._cached: |
124 self.auditeddir.add(prefix) |
124 self.auditeddir.add(prefix) |
125 if not res: |
125 if not res: |
126 break |
126 break |
127 |
127 |
128 if self._cached: |
128 if self._cached: |
129 self.audited.add(path) |
129 self.audited.add(path) |
130 |
130 |
131 def _checkfs_exists(self, prefix, path): |
131 def _checkfs_exists(self, prefix, path): |