scmutil: change canonpath to use util.samefile (issue2167)
authorAdrian Buehlmann <adrian@cadifra.com>
Thu, 14 Jun 2012 11:43:48 +0200
changeset 17007 21e18c608b68
parent 17006 6fc7fd72ba3e
child 17008 553e8f5aba7a
scmutil: change canonpath to use util.samefile (issue2167) Fixes (on Windows in cmd.exe): $ hg -R v:\x\a status V:\x\a\bar abort: V:\x\a\bar not under root where v:\x\a is a valid repository with a checked-out file "bar" (Note the difference in casing: "v:\" versus "V:\")
mercurial/scmutil.py
--- a/mercurial/scmutil.py	Thu Jun 14 11:03:20 2012 +0200
+++ b/mercurial/scmutil.py	Thu Jun 14 11:43:48 2012 +0200
@@ -324,18 +324,16 @@
     else:
         # Determine whether `name' is in the hierarchy at or beneath `root',
         # by iterating name=dirname(name) until that causes no change (can't
-        # check name == '/', because that doesn't work on windows).  For each
-        # `name', compare dev/inode numbers.  If they match, the list `rel'
-        # holds the reversed list of components making up the relative file
-        # name we want.
-        root_st = os.stat(root)
+        # check name == '/', because that doesn't work on windows). The list
+        # `rel' holds the reversed list of components making up the relative
+        # file name we want.
         rel = []
         while True:
             try:
-                name_st = os.stat(name)
+                s = util.samefile(name, root)
             except OSError:
-                name_st = None
-            if name_st and util.samestat(name_st, root_st):
+                s = False
+            if s:
                 if not rel:
                     # name was actually the same as root (maybe a symlink)
                     return ''