changeset 41630:035cae1d197f

patch: let caller pass in root-filtering matcher (API) The --root option to `hg diff` does two things: * Shows paths relative to the given root * Filters paths by the given root, including copy sources The root argument is passed through down to patch.diff(). I feel like we can make patch.diff() more generic by not passing down the root argument, but instead pass: * A function for taking a repo-relative path and printing it. I want to reuse this for showing cwd-relative paths later. This is the actual motivation for this patch. * A matcher that's already been filtered by the root argument * A second matcher that filters the copy sources This is one step towards that. Differential Revision: https://phab.mercurial-scm.org/D5892
author Martin von Zweigbergk <martinvonz@google.com>
date Wed, 06 Feb 2019 17:46:20 -0800
parents e834f6f6f221
children 74f53d3bd685
files mercurial/logcmdutil.py mercurial/patch.py
diffstat 2 files changed, 3 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/logcmdutil.py	Wed Feb 06 17:27:43 2019 -0800
+++ b/mercurial/logcmdutil.py	Wed Feb 06 17:46:20 2019 -0800
@@ -74,6 +74,9 @@
                 ui.warn(_('warning: %s not inside relative root %s\n') % (
                     match.uipath(matchroot), uirelroot))
 
+        relrootmatch = scmutil.match(ctx2, pats=[relroot], default='path')
+        match = matchmod.intersectmatchers(match, relrootmatch)
+
     if stat:
         diffopts = diffopts.copy(context=0, noprefix=False)
         width = 80
--- a/mercurial/patch.py	Wed Feb 06 17:27:43 2019 -0800
+++ b/mercurial/patch.py	Wed Feb 06 17:46:20 2019 -0800
@@ -32,7 +32,6 @@
     encoding,
     error,
     mail,
-    match as matchmod,
     mdiff,
     pathutil,
     pycompat,
@@ -2320,10 +2319,6 @@
         return getfilectx
     getfilectx = lrugetfilectx()
 
-    if relroot:
-        relrootmatch = scmutil.match(ctx2, pats=[relroot], default='path')
-        match = matchmod.intersectmatchers(match, relrootmatch)
-
     if not changes:
         changes = ctx1.status(ctx2, match=match)
     modified, added, removed = changes[:3]