Mercurial > hg
diff mercurial/logcmdutil.py @ 41646:d4c9eebdd72d
patch: replace "prefix" and "relroot" arguments by "pathfn" (API)
The two arguments serve a very similar purpose: "relroot" is stripped
from the front of the path, and then "prefix" (a subrepo path) is
added (also to the front). Passing in a function that does that is
more generic and will make it easier to respect ui.relative-paths in
later patches (don't worry, I'm not going to respect that option for
regular patches, only for --stat). I'm deliberately not calling it
"uipathfn", because it's generally for producing valid diffs
(including when prefix is non-empty), so things like using backslash
on Windows is not an option.
Differential Revision: https://phab.mercurial-scm.org/D5894
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Wed, 06 Feb 2019 23:12:56 -0800 |
parents | 3d094bfaf885 |
children | ec37db02fc72 |
line wrap: on
line diff
--- a/mercurial/logcmdutil.py Sat Feb 09 01:24:32 2019 +0100 +++ b/mercurial/logcmdutil.py Wed Feb 06 23:12:56 2019 -0800 @@ -9,6 +9,7 @@ import itertools import os +import posixpath from .i18n import _ from .node import ( @@ -65,6 +66,8 @@ else: relroot = '' copysourcematch = None + def pathfn(f): + return posixpath.join(prefix, f) if relroot != '': # XXX relative roots currently don't work if the root is within a # subrepo @@ -79,14 +82,22 @@ match = matchmod.intersectmatchers(match, relrootmatch) copysourcematch = relrootmatch + checkroot = (repo.ui.configbool('devel', 'all-warnings') or + repo.ui.configbool('devel', 'check-relroot')) + def pathfn(f): + if checkroot and not f.startswith(relroot): + raise AssertionError( + "file %s doesn't start with relroot %s" % (f, relroot)) + return posixpath.join(prefix, f[len(relroot):]) + if stat: diffopts = diffopts.copy(context=0, noprefix=False) width = 80 if not ui.plain(): width = ui.termwidth() - graphwidth - chunks = ctx2.diff(ctx1, match, changes, opts=diffopts, prefix=prefix, - relroot=relroot, copysourcematch=copysourcematch, + chunks = ctx2.diff(ctx1, match, changes, opts=diffopts, pathfn=pathfn, + copysourcematch=copysourcematch, hunksfilterfn=hunksfilterfn) if fp is not None or ui.canwritewithoutlabels():