# HG changeset patch # User Martin von Zweigbergk # Date 1549503980 28800 # Node ID 035cae1d197f7ca954859357ad82064ec26d42f5 # Parent e834f6f6f221838297408f9846fa49b31b8115b1 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 diff -r e834f6f6f221 -r 035cae1d197f mercurial/logcmdutil.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 diff -r e834f6f6f221 -r 035cae1d197f mercurial/patch.py --- 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]