# HG changeset patch # User Henrik Stuart # Date 2016-06-27 10:11:18 # Node ID 40d53d4b5925e7c173ea66dd1fd4ea9f853ef707 # Parent ecbbf4d56ee82b48fe4fa19d68056b9d17eff570 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 @@ def difffeatureopts(ui, opts=None, untru 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 @@ def diff(repo, node1=None, node2=None, m 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@y: src@x} of copy + information.''' if opts is None: opts = mdiff.defaultopts @@ -2250,9 +2253,10 @@ def diff(repo, node1=None, node2=None, m 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: