diff mercurial/merge.py @ 27571:6a6e78f84cc6 stable

merge: while checking for unknown files don't follow symlinks (issue5027) Previously, we were using Python's native 'os.path.isfile' method which follows symlinks. In this case, since we're operating on repo contents, we don't want to follow symlinks. There's a behaviour change here, as shown by the second part of the added test. Consider a symlink 'f' pointing to a file containing 'abc'. If we try and replace it with a file with contents 'abc', previously we would have let it though. Now we don't. Although this breaks naive inspection with tools like 'cat' and 'diff', on balance I believe this is the right change.
author Siddharth Agarwal <sid0@fb.com>
date Mon, 28 Dec 2015 22:51:37 -0800
parents 27683c63f44c
children b8405d739149
line wrap: on
line diff
--- a/mercurial/merge.py	Sat Dec 26 15:18:16 2015 +0900
+++ b/mercurial/merge.py	Mon Dec 28 22:51:37 2015 -0800
@@ -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]))