# HG changeset patch # User Siddharth Agarwal # Date 1430682555 25200 # Node ID 986a5c23b1c14954e6ddc3fdcc0b6edfb019b5a0 # Parent c48850339988bb8a5048c93ce1285304b96e0887 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. diff -r c48850339988 -r 986a5c23b1c1 mercurial/util.py --- 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 diff -r c48850339988 -r 986a5c23b1c1 tests/test-subrepo-git.t --- 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