# HG changeset patch # User Matt Mackall # Date 1428358615 18000 # Node ID b2fb1403994e033584aed8a487ab162a9d75fa80 # Parent 2a3f24786d09aae7c5d2fee1312a00b8b923a260# Parent 1784ca1483921babd792932d1e4575fda1c3359e merge with stable diff -r 2a3f24786d09 -r b2fb1403994e mercurial/dirstate.py --- a/mercurial/dirstate.py Sat Apr 04 19:06:43 2015 -0400 +++ b/mercurial/dirstate.py Mon Apr 06 17:16:55 2015 -0500 @@ -842,9 +842,16 @@ audit_path = pathutil.pathauditor(self._root) for nf in iter(visit): + # If a stat for the same file was already added with a + # different case, don't add one for this, since that would + # make it appear as if the file exists under both names + # on disk. + if (normalizefile and + normalizefile(nf, True, True) in results): + results[nf] = None # Report ignored items in the dmap as long as they are not # under a symlink directory. - if audit_path.check(nf): + elif audit_path.check(nf): try: results[nf] = lstat(join(nf)) # file was just ignored, no links, and exists diff -r 2a3f24786d09 -r b2fb1403994e tests/test-casefolding.t --- a/tests/test-casefolding.t Sat Apr 04 19:06:43 2015 -0400 +++ b/tests/test-casefolding.t Mon Apr 06 17:16:55 2015 -0500 @@ -37,6 +37,15 @@ $ hg mv A a $ hg st +addremove after case-changing rename has no effect (issue4590) + + $ hg mv a A + $ hg addremove + recording removal of a as rename to A (100% similar) + $ hg revert --all + forgetting A + undeleting a + test changing case of path components $ mkdir D