Mercurial > hg
changeset 17007:21e18c608b68
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:\")
author | Adrian Buehlmann <adrian@cadifra.com> |
---|---|
date | Thu, 14 Jun 2012 11:43:48 +0200 |
parents | 6fc7fd72ba3e |
children | 553e8f5aba7a |
files | mercurial/scmutil.py |
diffstat | 1 files changed, 6 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- 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 ''