Mercurial > hg
changeset 24538:24df92075200
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.
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Sun, 29 Mar 2015 19:23:05 -0700 |
parents | 1818d4dca75c |
children | 3a8eba78803e |
files | mercurial/dirstate.py |
diffstat | 1 files changed, 28 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- 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):