Mercurial > hg
changeset 15543:49a5db5b10de
merge with stable
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 21 Nov 2011 13:11:17 -0600 |
parents | e19302598df8 (current diff) b0a88bda3381 (diff) |
children | 53ef627cda30 |
files | |
diffstat | 2 files changed, 30 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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)
--- 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 ..