# HG changeset patch # User FUJIWARA Katsunori # Date 1333176903 -32400 # Node ID 0789d1bbf6c18c9578e1a51f7cc7a33ee6225e23 # Parent ba96dd4655a086ad706d1065ecb19a6ec5802525 dirstate: fix some problems for recursive case normalization (issue3342) file in nested directory causes unexpected abort. problems below should be fixed for recursive normalization route in dirstate._normalize(): 1. rsplit() may cause unpacking into more than 2 elements. it should be called with 'maxsplit' argument to unpack into 'd, f' 2. 'd' is replaced by normalized value prefixed with 'self._root', but this makes 'folded' as absolute path, and it is unexpected one for caller of recursive normalization diff -r ba96dd4655a0 -r 0789d1bbf6c1 mercurial/dirstate.py --- a/mercurial/dirstate.py Sat Mar 31 10:44:31 2012 -0500 +++ b/mercurial/dirstate.py Sat Mar 31 15:55:03 2012 +0900 @@ -406,9 +406,10 @@ # recursively normalize leading directory components # against dirstate if '/' in normed: - d, f = normed.rsplit('/') - d = self._root + "/" + self._normalize(d, isknown) - folded = d + "/" + util.fspath(f, d) + d, f = normed.rsplit('/', 1) + d = self._normalize(d, isknown) + r = self._root + "/" + d + folded = d + "/" + util.fspath(f, r) else: folded = util.fspath(normed, self._root) self._foldmap[normed] = folded diff -r ba96dd4655a0 -r 0789d1bbf6c1 tests/test-casefolding.t --- a/tests/test-casefolding.t Sat Mar 31 10:44:31 2012 -0500 +++ b/tests/test-casefolding.t Sat Mar 31 15:55:03 2012 +0900 @@ -73,6 +73,17 @@ $ cd .. +issue 3342: file in nested directory causes unexpected abort + + $ hg init issue3342 + $ cd issue3342 + + $ mkdir -p a/B/c/D + $ echo e > a/B/c/D/e + $ hg add a/B/c/D/e + + $ cd .. + issue 3340: mq does not handle case changes correctly in addition to reported case, 'hg qrefresh' is also tested against