[PATCH 2 of 4 V2] templater: introduce startswith function
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Tue Jul 1 06:33:12 CDT 2014
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?
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list