[PATCH 2 of 3 STABLE] context: ability to manipulate diff feature opt-ins
Matt Mackall
mpm at selenic.com
Mon Jul 20 15:07:56 CDT 2015
On Mon, 2015-07-20 at 20:18 +0900, Yuya Nishihara wrote:
> On Sat, 18 Jul 2015 14:24:30 -0700, Gregory Szorc wrote:
> > # HG changeset patch
> > # User Gregory Szorc <gregory.szorc at gmail.com>
> > # Date 1437254506 25200
> > # Sat Jul 18 14:21:46 2015 -0700
> > # Node ID b6ab3a470c0196159e8931c8c6dd4b5c4a52a4f6
> > # Parent d88519184df5f9538b4f9294bee7a595d5dce6d2
> > context: ability to manipulate diff feature opt-ins
> >
> > Before this patch, basectx.diff respected all diff options. Sometimes
> > consumers want to opt out of certain classes of diff features.
> >
> > Change the function to call patch.difffeatureopts instead of
> > diffallopts and allow the various features to be opted out of via
> > arguments.
> >
> > diff --git a/mercurial/context.py b/mercurial/context.py
> > --- a/mercurial/context.py
> > +++ b/mercurial/context.py
> > @@ -268,15 +268,23 @@ class basectx(object):
> > include, exclude, default,
> > auditor=r.auditor, ctx=self,
> > listsubrepos=listsubrepos, badfn=badfn)
> >
> > - def diff(self, ctx2=None, match=None, **opts):
> > - """Returns a diff generator for the given contexts and matcher"""
> > + def diff(self, ctx2=None, match=None, allowgit=True, allowwhitespace=True,
> > + allowformatchanging=True, **opts):
> > + """Returns a diff generator for the given contexts and matcher.
> > +
> > + The various allow* arguments control whether the diff features under
> > + that category are respected. See patch.difffeatureopts.
> > + """
> > if ctx2 is None:
> > ctx2 = self.p1()
> > if ctx2 is not None:
> > ctx2 = self._repo[ctx2]
> > - diffopts = patch.diffopts(self._repo.ui, opts)
> > + diffopts = patch.difffeatureopts(self._repo.ui, opts=opts,
> > + git=allowgit,
> > + whitespace=allowwhitespace,
> > + formatchanging=allowformatchanging)
> > return patch.diff(self._repo, ctx2, self, match=match, opts=diffopts)
>
> I'm noob about this API, but I think patch.diff*opts() exists to pack various
> diff-related options into one argument. It seems this change goes the opposite
> direction.
Yep. Also, it bears repeating: I really don't want _patch series_ on
stable. The explicit goal of stable is to maximize benefit/churn. If you
can't fix something in stable in one simple patch, it may be too much
churn. I don't see any reason why our diffstat code should be picky
about prefixes, so I think we should instead teach it that prefixes are
optional:
diff -r f8aead51aec0 mercurial/patch.py
--- a/mercurial/patch.py Sun Jul 19 18:11:18 2015 +0200
+++ b/mercurial/patch.py Mon Jul 20 15:02:19 2015 -0500
@@ -15,7 +15,7 @@
import base85, mdiff, scmutil, util, diffhelpers, copies, encoding, error
import pathutil
-gitre = re.compile('diff --git a/(.*) b/(.*)')
+gitre = re.compile('diff --git (?:a/)(.*) (?:b/)(.*)')
tabsplitter = re.compile(r'(\t+|[^\t]+)')
class PatchError(Exception):
@@ -324,7 +324,7 @@
gitpatches = []
for line in lr:
line = line.rstrip(' \r\n')
- if line.startswith('diff --git a/'):
+ if line.startswith('diff --git '):
m = gitre.match(line)
if m:
if gp:
@@ -814,7 +814,7 @@
class header(object):
"""patch header
"""
- diffgit_re = re.compile('diff --git a/(.*) b/(.*)$')
+ diffgit_re = re.compile('diff --git (?:a/)(.*) (?:b/)(.*)$')
diff_re = re.compile('diff -r .* (.*)$')
allhunks_re = re.compile('(?:index|deleted file) ')
pretty_re = re.compile('(?:new file|deleted file) ')
@@ -1752,7 +1752,7 @@
emitfile = False
yield 'file', (afile, bfile, h, gp and gp.copy() or None)
yield 'hunk', h
- elif x.startswith('diff --git a/'):
+ elif x.startswith('diff --git '):
m = gitre.match(x.rstrip(' \r\n'))
if not m:
continue
@@ -2476,7 +2476,7 @@
addresult()
# set numbers to 0 anyway when starting new file
adds, removes, isbinary = 0, 0, False
- if line.startswith('diff --git a/'):
+ if line.startswith('diff --git '):
filename = gitre.search(line).group(2)
elif line.startswith('diff -r'):
# format: "diff -r ... -r ... filename"
This patch may go a little too far since I just did a search and
replace, but we should probably also teach the patcher how to apply
prefixless patches.
--
Mathematics is the supreme nostalgia of our time.
More information about the Mercurial-devel
mailing list