[PATCH] patch: allow copy information to be passed in

Henrik Stuart henriks+hg at unity3d.com
Mon Jun 27 13:11:23 UTC 2016


# HG changeset patch
# User Henrik Stuart <henriks at unity3d.com>
# Date 1467022278 -7200
#      Mon Jun 27 12:11:18 2016 +0200
# Node ID de6b1dadad4feafa702bf9eef71699d37edd254f
# Parent  b62bce819d0cafcd94e3838e97062b42c9cb13b2
patch: allow copy information to be passed in

When displaying patches from graphical tools where you can browse through
individual files, with diff being called separately on each, recomputing the
limits of file copy history can become rather expensive on large repositories.
Instead, we can compute it once and pass it in for subsequent calls.

diff --git a/mercurial/patch.py b/mercurial/patch.py
--- a/mercurial/patch.py
+++ b/mercurial/patch.py
@@ -2184,7 +2184,7 @@
     return mdiff.diffopts(**buildopts)
 
 def diff(repo, node1=None, node2=None, match=None, changes=None, opts=None,
-         losedatafn=None, prefix='', relroot=''):
+         losedatafn=None, prefix='', relroot='', copy=None):
     '''yields diff of changes to files between two nodes, or node and
     working directory.
 
@@ -2203,7 +2203,10 @@
     display (used for subrepos).
 
     relroot, if not empty, must be normalized with a trailing /. Any match
-    patterns that fall outside it will be ignored.'''
+    patterns that fall outside it will be ignored.
+
+    copy, if not empty, should contain mappings {dst at y: src at x} of copy
+    information.'''
 
     if opts is None:
         opts = mdiff.defaultopts
@@ -2250,9 +2253,10 @@
         hexfunc = short
     revs = [hexfunc(node) for node in [ctx1.node(), ctx2.node()] if node]
 
-    copy = {}
-    if opts.git or opts.upgrade:
-        copy = copies.pathcopies(ctx1, ctx2, match=match)
+    if copy is None:
+        copy = {}
+        if opts.git or opts.upgrade:
+            copy = copies.pathcopies(ctx1, ctx2, match=match)
 
     if relroot is not None:
         if not relfiltered:


More information about the Mercurial-devel mailing list