--- 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