changeset 32565:5313d98089f5

copies: introduce getdstfctx Previously `c2` may had an incorrect linkrev because getsrcfctx set wrong _descendantrev. getsrcfctx() sets descendant rev equals to srcctx.rev() (see _makegetfctx()), but for `c2` descendant rev should be dstctx. While we were lucky it didn't broke copytracing it made it significantly slower in some cases. Besides it broke some external extensions, for example remotefilelog.
author Stanislau Hlebik <stash@fb.com>
date Mon, 29 May 2017 06:06:13 -0700
parents 6966e42f833a
children 1b90036f42f0
files mercurial/copies.py
diffstat 1 files changed, 2 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/copies.py	Mon May 29 05:58:08 2017 -0700
+++ b/mercurial/copies.py	Mon May 29 06:06:13 2017 -0700
@@ -632,6 +632,7 @@
     # We use 'backwards = False' in that case.
     backwards = not remotebase and base != tca and f in mb
     getsrcfctx = _makegetfctx(srcctx)
+    getdstfctx = _makegetfctx(dstctx)
 
     if msrc[f] == mb.get(f) and not remotebase:
         # Nothing to merge
@@ -658,7 +659,7 @@
             continue # no match, keep looking
         if mdst[of] == mb.get(of):
             return # no merge needed, quit early
-        c2 = getsrcfctx(of, mdst[of])
+        c2 = getdstfctx(of, mdst[of])
         # c2 might be a plain new file on added on destination side that is
         # unrelated to the droids we are looking for.
         cr = _related(oc, c2, tca.rev())