[PATCH V3] templater: introduce word function
Ryan McElroy
ryanmce at gmail.com
Mon Jul 7 18:10:08 CDT 2014
Thanks Pierre-Yves! I'll do better next time.
~Ryan (mobile)
> On Jul 7, 2014, at 3:27 PM, Pierre-Yves David <pierre-yves.david at ens-lyon.org> wrote:
>
>
>
>> On 07/06/2014 07:24 PM, Ryan McElroy wrote:
>> # HG changeset patch
>> # User Ryan McElroy <rmcelroy at fb.com>
>> # Date 1402621343 25200
>> # Thu Jun 12 18:02:23 2014 -0700
>> # Node ID 5efbb2b98205e1951e0a9e68bfdd8b5c226ed0c8
>> # Parent 61b333b982ea7baab198a188306fc05fb2850179
>> templater: introduce word function
>>
>> This function allows returning only the nth "word" from a string. By default
>> a string is split as by Python's split() function default, but an optional
>> third parameter can also override what string the string is split by.
>>
>> diff -r 61b333b982ea -r 5efbb2b98205 mercurial/help/templates.txt
>> --- a/mercurial/help/templates.txt Fri Jun 13 15:59:18 2014 -0700
>> +++ b/mercurial/help/templates.txt Thu Jun 12 18:02:23 2014 -0700
>> @@ -72,6 +72,8 @@
>>
>> - sub(pat, repl, expr)
>>
>> +- word(number, text[, separator])
>> +
>> Also, for any expression that returns a list, there is a list operator:
>>
>> - expr % "{template}"
>> @@ -130,3 +132,7 @@
>> - Show only commit descriptions that start with "template"::
>>
>> $ hg log --template "{startswith(\"template\", firstline(desc))}\n"
>> +
>> +- Print the first word of each line of a commit message::
>> +
>> + $ hg log --template "{word(\"0\", desc)}\n"
>> diff -r 61b333b982ea -r 5efbb2b98205 mercurial/templater.py
>> --- a/mercurial/templater.py Fri Jun 13 15:59:18 2014 -0700
>> +++ b/mercurial/templater.py Thu Jun 12 18:02:23 2014 -0700
>> @@ -477,6 +477,25 @@
>> return ''
>>
>>
>> +def word(context, mapping, args):
>> + """return nth word from a string"""
>> + if not (2 <= len(args) <= 3):
>> + raise error.ParseError(
>> + _("word expects two or three arguments, got %d" % len(args)))
>
> 1. Content should be aligned with opening bracket.
> 2. Substitution should be done outside the i18n
> _("bla %i") % 6
>
> This was friendly pointed by test-check-code-hg.t if you had run it ☺
>
> I fixed thoses and pushed the updated patches to the clowncopter.
>
> Thanks!
>
>
>> +
>> + num = int(stringify(args[0][0](context, mapping, args[0][1])))
>> + text = stringify(args[1][0](context, mapping, args[1][1]))
>> + if len(args) == 3:
>> + splitter = stringify(args[2][0](context, mapping, args[2][1]))
>> + else:
>> + splitter = None
>> +
>> + tokens = text.split(splitter)
>> + if num >= len(tokens):
>> + return ''
>> + else:
>> + return tokens[num]
>> +
>> methods = {
>> "string": lambda e, c: (runstring, e[1]),
>> "rawstring": lambda e, c: (runrawstring, e[1]),
>> @@ -504,6 +523,7 @@
>> "startswith": startswith,
>> "strip": strip,
>> "sub": sub,
>> + "word": word,
>> }
>>
>> # template engine
>> diff -r 61b333b982ea -r 5efbb2b98205 tests/test-command-template.t
>> --- a/tests/test-command-template.t Fri Jun 13 15:59:18 2014 -0700
>> +++ b/tests/test-command-template.t Thu Jun 12 18:02:23 2014 -0700
>> @@ -1917,3 +1917,61 @@
>> $ hg log -Gv -R a --template '{desc|user()}'
>> hg: parse error: expected a symbol, got 'func'
>> [255]
>> +
>> +Test word function (including index out of bounds graceful failure)
>> +
>> + $ hg log -Gv -R a --template "{word('1', desc)}"
>> + @
>> + |
>> + o
>> + |
>> + o
>> +
>> + o
>> + |\
>> + | o head
>> + | |
>> + o | branch
>> + |/
>> + o user,
>> + |
>> + o person
>> + |
>> + o 1
>> + |
>> + o 1
>> +
>> +
>> +Test word third parameter used as splitter
>> +
>> + $ hg log -Gv -R a --template "{word('0', desc, 'o')}"
>> + @ future
>> + |
>> + o third
>> + |
>> + o sec
>> +
>> + o merge
>> + |\
>> + | o new head
>> + | |
>> + o | new branch
>> + |/
>> + o n
>> + |
>> + o n
>> + |
>> + o
>> + |
>> + o line 1
>> + line 2
>> +
>> +Test word error messages for not enough and too many arguments
>> +
>> + $ hg log -Gv -R a --template "{word('0')}"
>> + hg: parse error: word expects two or three arguments, got 1
>> + [255]
>> +
>> + $ hg log -Gv -R a --template "{word('0', desc, 'o', 'h', 'b', 'o', 'y')}"
>> + hg: parse error: word expects two or three arguments, got 7
>> + [255]
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at selenic.com
>> http://selenic.com/mailman/listinfo/mercurial-devel
>
> --
> Pierre-Yves David
More information about the Mercurial-devel
mailing list