# HG changeset patch # User Matt Mackall # Date 1321902677 21600 # Node ID 49a5db5b10de5dfe281647239a8da7b7934b0188 # Parent e19302598df88b5d16aed57fbbec07f547470946# Parent b0a88bda3381a04f2294d9fdcf9101283b62c006 merge with stable diff -r e19302598df8 -r 49a5db5b10de mercurial/merge.py --- a/mercurial/merge.py Mon Nov 21 00:39:32 2011 +0100 +++ b/mercurial/merge.py Mon Nov 21 13:11:17 2011 -0600 @@ -81,12 +81,20 @@ self.mark(dfile, 'r') return r -def _checkunknown(wctx, mctx): +def _checkunknown(wctx, mctx, folding): "check for collisions between unknown files and files in mctx" - for f in wctx.unknown(): - if f in mctx and mctx[f].cmp(wctx[f]): + if folding: + foldf = util.normcase + else: + foldf = lambda fn: fn + folded = {} + for fn in mctx: + folded[foldf(fn)] = fn + for fn in wctx.unknown(): + f = foldf(fn) + if f in folded and mctx[folded[f]].cmp(wctx[f]): raise util.Abort(_("untracked file in working directory differs" - " from file in requested revision: '%s'") % f) + " from file in requested revision: '%s'") % fn) def _checkcollision(mctx): "check for case folding collisions in the destination context" @@ -537,9 +545,10 @@ ### calculate phase action = [] wc.status(unknown=True) # prime cache + folding = not util.checkcase(repo.path) if not force: - _checkunknown(wc, p2) - if not util.checkcase(repo.path): + _checkunknown(wc, p2, folding) + if folding: _checkcollision(p2) action += _forgetremoved(wc, p2, branchmerge) action += manifestmerge(repo, wc, p2, pa, overwrite, partial) diff -r e19302598df8 -r 49a5db5b10de tests/test-casefolding.t --- a/tests/test-casefolding.t Mon Nov 21 00:39:32 2011 +0100 +++ b/tests/test-casefolding.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,5 +1,8 @@ $ "$TESTDIR/hghave" icasefs || exit 80 + $ hg debugfs | grep 'case-sensitive:' + case-sensitive: no + test file addition with bad case $ hg init repo1 @@ -56,4 +59,16 @@ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg up -C 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + +no clobbering of untracked files with wrong casing + + $ hg up -r null + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo gold > a + $ hg up + abort: untracked file in working directory differs from file in requested revision: 'a' + [255] + $ cat a + gold + $ cd ..