[PATCH 1 of 3 stable] extdiff: reintroduce backward compatibility with manual quoting of parameters
Mads Kiilerich
mads at kiilerich.com
Tue Jan 27 19:29:07 CST 2015
On 01/27/2015 11:53 PM, Matt Mackall wrote:
> On Tue, 2015-01-27 at 03:15 +0100, Mads Kiilerich wrote:
>> # HG changeset patch
>> # User Mads Kiilerich <madski at unity3d.com>
>> # Date 1422323932 -3600
>> # Tue Jan 27 02:58:52 2015 +0100
>> # Branch stable
>> # Node ID aa7caa9b564fca7095f860178f18737cf360285d
>> # Parent 0c4419faacbcca691737b5e25820dcbf4c7150ac
>> extdiff: reintroduce backward compatibility with manual quoting of parameters
> This had troubles:
>
> $ python2.6
> Python 2.6.7 (r267:88850, Aug 3 2011, 11:33:52)
> [GCC 4.6.1] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import re
>>>> e = '''(['"]?)([^ '"]*)?'''
>>>> re.compile(e)
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "/usr/lib/python2.6/re.py", line 190, in compile
> return _compile(pattern, flags)
> File "/usr/lib/python2.6/re.py", line 245, in _compile
> raise error, v # invalid expression
> sre_constants.error: nothing to repeat
>>>> re.compile(e[:-1])
> <_sre.SRE_Pattern object at 0x7fd8bd6e7128>
> Seems like the last ? is unnecessary, but I'd like to bounce it back to
> you to confirm.
:-(
Yes, the extra '?' is unnecessary. It was left over from an attempt of
making sure the 'pre' group only matched when there were leading quotes,
as in
(?:(['"])([^ '"]*))?(...)\1
but that doesn't work; you can't back reference an optional group. It
would perhaps be better to have separate expressions for the 3 cases of
no, single and double quoting.
Also, having thought more about it, I would also like to add '$' to the
excluded group to minimize the risk of doing the wrong thing on an
argument with more than one variable reference without whitespace
separation.
Resending.
/Mads
More information about the Mercurial-devel
mailing list