copies: introduce getdstfctx
authorStanislau Hlebik <stash@fb.com>
Mon, 29 May 2017 06:06:13 -0700
changeset 32598 5313d98089f5
parent 32597 6966e42f833a
child 32599 1b90036f42f0
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.
mercurial/copies.py
--- 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())