merge with stable
authorMatt Mackall <mpm@selenic.com>
Mon, 06 Apr 2015 17:16:55 -0500
changeset 24632 b2fb1403994e
parent 24631 2a3f24786d09 (current diff)
parent 24621 1784ca148392 (diff)
child 24633 2f8f7cc6a53b
merge with stable
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
--- 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