[PATCH 2 of 4 V2] templater: introduce startswith function

Sean Farley sean.michael.farley at gmail.com
Tue Jul 1 16:25:01 CDT 2014


Pierre-Yves David writes:

> On 06/30/2014 10:16 AM, Ryan McElroy wrote:
>> # HG changeset patch
>> # User Ryan McElroy <rmcelroy at fb.com>
>> # Date 1402620817 25200
>> #      Thu Jun 12 17:53:37 2014 -0700
>> # Node ID 761db1c368e2765cb485789eb4d237dad32c76c4
>> # Parent  45d7b890bf0da308b743180101acd80e1d147620
>> templater: introduce startswith function
>>
>> This function returns a string only if it starts with a given string.
>> It is particularly useful when combined with splitlines and/or used with
>> conditionals that fail when empty strings are passed in to take action
>> based on the contents of a line.
>>
>> diff -r 45d7b890bf0d -r 761db1c368e2 mercurial/help/templates.txt
>> --- a/mercurial/help/templates.txt	Thu Jun 12 17:45:41 2014 -0700
>> +++ b/mercurial/help/templates.txt	Thu Jun 12 17:53:37 2014 -0700
>> @@ -66,6 +66,8 @@
>>
>>   - shortest(node)
>>
>> +- startswith(string, text)
>> +
>>   - strip(text[, chars])
>>
>>   - sub(pat, repl, expr)
>> @@ -124,3 +126,7 @@
>>   - Mark the working copy parent with '@'::
>>
>>      $ hg log --template "{ifcontains(rev, revset('.'), '@')}\n"
>> +
>> +- Show only commit descriptions that start with "template"::
>> +
>> +   $ hg log --template "{startswith(\"template\", firstline(desc))}\n"
>> diff -r 45d7b890bf0d -r 761db1c368e2 mercurial/templater.py
>> --- a/mercurial/templater.py	Thu Jun 12 17:45:41 2014 -0700
>> +++ b/mercurial/templater.py	Thu Jun 12 17:53:37 2014 -0700
>> @@ -466,6 +466,17 @@
>>       src = stringify(_evalifliteral(args[2], context, mapping))
>>       yield re.sub(pat, rpl, src)
>>
>> +def startswith(context, mapping, args):
>> +    if len(args) != 2:
>> +        raise error.ParseError(_("startswith expects two arguments"))
>> +
>> +    patn = stringify(args[0][0](context, mapping, args[0][1]))
>> +    text = stringify(args[1][0](context, mapping, args[1][1]))
>> +    if text.startswith(patn):
>> +        return text
>> +    return ''
>
> This `return ''` is bugging me a little. I assume this is standard 
> practice in template? Is there a plan to clean this up?

If you would prefer, you could do something like:

if not text.startswith(patn):
  text = ''
return text

but that seemed like too much nitpicking for me.


More information about the Mercurial-devel mailing list