Mercurial > hg
changeset 13717:bc41d08a5ccc stable
dirstate: introduce a public case normalizing method
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Tue, 22 Mar 2011 11:59:43 -0500 |
parents | a083c6e62acb |
children | 5b3383ea67d2 |
files | mercurial/dirstate.py |
diffstat | 1 files changed, 26 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/dirstate.py Fri Mar 18 11:36:36 2011 -0500 +++ b/mercurial/dirstate.py Tue Mar 22 11:59:43 2011 -0500 @@ -362,16 +362,34 @@ except KeyError: self._ui.warn(_("not in dirstate: %s\n") % f) - def _normalize(self, path, knownpath): - norm_path = os.path.normcase(path) - fold_path = self._foldmap.get(norm_path, None) - if fold_path is None: - if knownpath or not os.path.lexists(os.path.join(self._root, path)): - fold_path = path + def _normalize(self, path, isknown): + normed = os.path.normcase(path) + folded = self._foldmap.get(normed, None) + if folded is None: + if isknown or not os.path.lexists(os.path.join(self._root, path)): + folded = path else: - fold_path = self._foldmap.setdefault(norm_path, + folded = self._foldmap.setdefault(normed, util.fspath(path, self._root)) - return fold_path + return folded + + def normalize(self, path, isknown=False): + ''' + normalize the case of a pathname when on a casefolding filesystem + + isknown specifies whether the filename came from walking the + disk, to avoid extra filesystem access + + The normalized case is determined based on the following precedence: + + - version of name already stored in the dirstate + - version of name stored on disk + - version provided via command arguments + ''' + + if self._checkcase: + return self._normalize(path, isknown) + return path def clear(self): self._map = {}