util.checkcase: don't abort on broken symlinks
One case where that would happen is while trying to resolve a subrepo, if the
path to the subrepo was actually a broken symlink. This bug was exposed by an
hg-git test.
--- a/mercurial/util.py Fri May 01 16:49:15 2015 -0500
+++ b/mercurial/util.py Sun May 03 12:49:15 2015 -0700
@@ -877,7 +877,7 @@
Requires a path (like /foo/.hg) ending with a foldable final
directory component.
"""
- s1 = os.stat(path)
+ s1 = os.lstat(path)
d, b = os.path.split(path)
b2 = b.upper()
if b == b2:
@@ -886,7 +886,7 @@
return True # no evidence against case sensitivity
p2 = os.path.join(d, b2)
try:
- s2 = os.stat(p2)
+ s2 = os.lstat(p2)
if s2 == s1:
return False
return True
--- a/tests/test-subrepo-git.t Fri May 01 16:49:15 2015 -0500
+++ b/tests/test-subrepo-git.t Sun May 03 12:49:15 2015 -0700
@@ -381,6 +381,20 @@
$ hg commit --subrepos -qm missing
abort: subrepo s is missing (in subrepo s)
[255]
+
+#if symlink
+Don't crash if subrepo is a broken symlink
+ $ ln -s broken s
+ $ hg status -S
+ $ hg push -q
+ abort: subrepo s is missing (in subrepo s)
+ [255]
+ $ hg commit --subrepos -qm missing
+ abort: subrepo s is missing (in subrepo s)
+ [255]
+ $ rm s
+#endif
+
$ hg update -C 2> /dev/null
cloning subrepo s from $TESTTMP/gitroot
1 files updated, 0 files merged, 0 files removed, 0 files unresolved