patch: let caller pass in root-filtering matcher (API)
authorMartin von Zweigbergk <martinvonz@google.com>
Wed, 06 Feb 2019 17:46:20 -0800
changeset 41619 035cae1d197f
parent 41618 e834f6f6f221
child 41620 74f53d3bd685
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
mercurial/logcmdutil.py
mercurial/patch.py
--- 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]