[PATCH] revset: introduce the summary predicate
Matt Harbison
mharbison72 at gmail.com
Sun Jan 8 20:34:13 UTC 2017
On Sun, 08 Jan 2017 07:59:36 -0500, Pierre-Yves David
<pierre-yves.david at ens-lyon.org> wrote:
> (ha, I wrote my previous reply in a train and it got sent when I
> connected again (and received that one). I'm going to try to adress the
> new content in this email and sometime repeat some of my other reply
> content for clarity)
>
> On 01/08/2017 04:23 AM, Matt Harbison wrote:
>> On Sat, 07 Jan 2017 02:56:48 -0500, Yuya Nishihara <yuya at tcha.org>
>> wrote:
>>
>>> On Fri, 6 Jan 2017 21:29:43 -0500, Matt Harbison wrote:
>>>> > On Jan 6, 2017, at 11:19 AM, Pierre-Yves David
>>>> <pierre-yves.david at ens-lyon.org> wrote:
>>>> >> On 01/04/2017 07:04 PM, Matt Harbison wrote:
>>>> >> # HG changeset patch
>>>> >> # User Matt Harbison <matt_harbison at yahoo.com>
>>>> >> # Date 1483550016 18000
>>>> >> # Wed Jan 04 12:13:36 2017 -0500
>>>> >> # Node ID 76d95ab94b9e206363629059fb7824002e19a9e5
>>>> >> # Parent 0064a1eb28e246ded9b726c696d048143d1b23f1
>>>> >> revset: introduce the summary predicate
>>>> >>
>>> Perhaps stringmatcher can have 3 types, icase literal, literal, and
>>> re, and
>>> the default of desc() is icase literal for backward compatibility. You
>>> can
>>> build a case-insensitive regexp object from a literal pattern.
>>>
>>> https://docs.python.org/2/library/re.html#re.I
>>
>> Yep, that's the API I was thinking of.
>>
>> I'm confused by the rest of your comments. When I first skimmed your
>> message, adding support for 'icasere:' using this API popped into my
>> mind. And that could support a case insensitive literal, because
>> 'icasere:foo' should be equivalent to looking for the substring 'foo'
>> (leaving aside efficiency, how discoverable that is, and that
>> stringmatcher matches the whole string for literals). But you seem to
>> be suggesting adding 'icaseliteral:'.
>
> I'm not 100% sure of what Yuya actually has in mind but here is my
> understanding of the situation and how we could move forward.
>
> Currently:
> ----------
>
> desc(X) → X is customly matched as a case insensitive litteral,
>
> We have a "generic" pattern definition syntax used by various other
> reveset (implemented in "stringmatcher")
>
> foo(X)
> → X is matched as a case sensitive litteral
> foo('literal:X')
> → X is matched as a case sensitive literal (same as the above)
> food('re:X')
> → X is matched as a regular expression (case sensitive)
>
> Proposal: (might be what yuya says)
> ---------
>
> extend the string matcher to
>
> foo('literal:X')
> → X is matched as a case sensitive literal
See the comment in the new patch I sent about 'user()' already lowercasing
'literal:' and 're:'. I'd consider it a bug, but it's been in since mid
2012. Attempting to channel Matt, I'm guessing we are stuck with that
since it is so old, but wanted to see what others think.
> foo('icase-literal:X')
> → X is matched as a case insensitive literal
> food('re:X')
> → X is matched as a regular expression (case sensitive)
>
> Then, desc move to use string matcher (default to "icase-literal").
>
> We do not need a 'icase-re:' spec, because one can easily achieve it
> using 're:(?i)foo'
Ah! I missed the part in the docs where flags could be set in the string
with (?<flag>). I thought you needed to compile with re.FLAG. When he
said string literal, my mind went right to the 'literal:' prefix. Agreed,
no need for 'icase-re:'.
>> […]
>> I'm about to submit a patch to add the current 're:' support to 'desc'
>> in the meantime, to hopefully move this along.
>
> Great!
>
>> I'd also be curious if
>> you have thoughts on how to conditionally limit this predicate to the
>> first line, without limiting future functionality.
>
> So having digged the regexp part a bit more, it seems like one could
> just use 're:^.*issue1337' to match "issue1337" on the first line ('.'
> does not match new-line by default).
Thanks for looking at that. It's way less horrible than I thought it
would be. I'm curious what Sean thinks, since he mentioned {firstline}
being put in as a substitute for a complex regex. I'd be fine with
skipping the firstline=True param if this case is mentioned in the help
for desc().
(I've also got a documentation update that eliminates all of these copies
of how 're:' and 'literal:' works, once the dust settles on this.)
> If you think this is too obscure, what about:
>
> 'desc(issue1337, firstline=True)'
>
> See my other email for details.
>
> Cheers,
More information about the Mercurial-devel
mailing list