diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -313,8 +313,8 @@ def canonpath(root, cwd, myname, auditor try: name_st = os.stat(name) except OSError: - break - if util.samestat(name_st, root_st): + name_st = None + if name_st and util.samestat(name_st, root_st): if not rel: # name was actually the same as root (maybe a symlink) return '' diff --git a/tests/test-symlinks.t b/tests/test-symlinks.t --- a/tests/test-symlinks.t +++ b/tests/test-symlinks.t @@ -168,11 +168,12 @@ now addremove should remove old files ? foo $ hg status ../link ? foo + $ hg add foo + $ hg cp foo "$TESTTMP/link/bar" + foo has not been committed yet, so no copy data will be stored for bar. $ cd .. - - $ hg init b $ cd b $ ln -s nothing dangling