# HG changeset patch # User Matt Mackall # Date 1451695758 -3600 # Node ID ea389970c08449440587712117f178d33bab3f1e # Parent ffffe735175fc66b9a10a61d00e3fd4b555ed3c6# Parent 6a6e78f84cc6a3bcb0c429ce2c19aad170a78c1f merge with i18n diff -r ffffe735175f -r ea389970c084 mercurial/merge.py --- a/mercurial/merge.py Fri Jan 01 12:21:11 2016 +0900 +++ b/mercurial/merge.py Sat Jan 02 01:49:18 2016 +0100 @@ -404,7 +404,7 @@ def _checkunknownfile(repo, wctx, mctx, f, f2=None): if f2 is None: f2 = f - return (os.path.isfile(repo.wjoin(f)) + return (repo.wvfs.isfileorlink(f) and repo.wvfs.audit.check(f) and repo.dirstate.normalize(f) not in repo.dirstate and mctx[f2].cmp(wctx[f])) diff -r ffffe735175f -r ea389970c084 mercurial/scmutil.py --- a/mercurial/scmutil.py Fri Jan 01 12:21:11 2016 +0900 +++ b/mercurial/scmutil.py Sat Jan 02 01:49:18 2016 +0100 @@ -312,6 +312,17 @@ def islink(self, path=None): return os.path.islink(self.join(path)) + def isfileorlink(self, path=None): + '''return whether path is a regular file or a symlink + + Unlike isfile, this doesn't follow symlinks.''' + try: + st = self.lstat(path) + except OSError: + return False + mode = st.st_mode + return stat.S_ISREG(mode) or stat.S_ISLNK(mode) + def reljoin(self, *paths): """join various elements of a path together (as os.path.join would do) diff -r ffffe735175f -r ea389970c084 tests/test-merge1.t --- a/tests/test-merge1.t Fri Jan 01 12:21:11 2016 +0900 +++ b/tests/test-merge1.t Sat Jan 02 01:49:18 2016 +0100 @@ -102,6 +102,28 @@ b: untracked file differs abort: untracked files in working directory differ from files in requested revision [255] + +#if symlink +symlinks to directories should be treated as regular files (issue5027) + $ rm b + $ ln -s 'This is file b2' b + $ hg merge 1 + b: untracked file differs + abort: untracked files in working directory differ from files in requested revision + [255] +symlinks shouldn't be followed + $ rm b + $ echo This is file b1 > .hg/b + $ ln -s .hg/b b + $ hg merge 1 + b: untracked file differs + abort: untracked files in working directory differ from files in requested revision + [255] + + $ rm b + $ echo This is file b2 > b +#endif + merge of b expected $ hg merge -f 1 merging b