# HG changeset patch # User Siddharth Agarwal # Date 1427682185 25200 # Node ID 24df9207520046b02ed5763c6aa5ae1915e88f65 # Parent 1818d4dca75cb0938a5c7ffd690541e5027c8e2e dirstate: factor out code to discover normalized path In upcoming patches we're going to reuse this code. The storemap is currently always the foldmap, but will vary in future patches. diff -r 1818d4dca75c -r 24df92075200 mercurial/dirstate.py --- a/mercurial/dirstate.py Tue Mar 31 14:27:45 2015 -0400 +++ b/mercurial/dirstate.py Sun Mar 29 19:23:05 2015 -0700 @@ -464,6 +464,32 @@ self._droppath(f) del self._map[f] + def _discoverpath(self, path, normed, ignoremissing, exists, storemap): + if exists is None: + exists = os.path.lexists(os.path.join(self._root, path)) + if not exists: + # Maybe a path component exists + if not ignoremissing and '/' in path: + d, f = path.rsplit('/', 1) + d = self._normalize(d, False, ignoremissing, None) + folded = d + "/" + f + else: + # No path components, preserve original case + folded = path + else: + # recursively normalize leading directory components + # against dirstate + if '/' in normed: + d, f = normed.rsplit('/', 1) + d = self._normalize(d, False, ignoremissing, True) + r = self._root + "/" + d + folded = d + "/" + util.fspath(f, r) + else: + folded = util.fspath(normed, self._root) + storemap[normed] = folded + + return folded + def _normalize(self, path, isknown, ignoremissing=False, exists=None): normed = util.normcase(path) folded = self._foldmap.get(normed, None) @@ -471,29 +497,8 @@ if isknown: folded = path else: - if exists is None: - exists = os.path.lexists(os.path.join(self._root, path)) - if not exists: - # Maybe a path component exists - if not ignoremissing and '/' in path: - d, f = path.rsplit('/', 1) - d = self._normalize(d, isknown, ignoremissing, None) - folded = d + "/" + f - else: - # No path components, preserve original case - folded = path - else: - # recursively normalize leading directory components - # against dirstate - if '/' in normed: - d, f = normed.rsplit('/', 1) - d = self._normalize(d, isknown, ignoremissing, True) - r = self._root + "/" + d - folded = d + "/" + util.fspath(f, r) - else: - folded = util.fspath(normed, self._root) - self._foldmap[normed] = folded - + folded = self._discoverpath(path, normed, ignoremissing, exists, + self._foldmap) return folded def normalize(self, path, isknown=False, ignoremissing=False):