Mercurial模板:标签和书签的分隔符

时间:2011-12-01 12:10:03

标签: templates mercurial

只有当我有任何标记或书签时,我才能将空格字符作为分隔符吗?

示例:

hg log --template "{rev} {author} {tags} {bookmarks} {desc|firstline}\n"

Output:
3: Author1 TIP BKMRK_NAME Another commit
2: Author1   Third commit
1: Author1 TAG1  Second commit
0: Author1   Initial commit

没有标签或书签的变更集会打印空格字符。我想压制那些多余的空间:

3: Author1 TAG_NAME BKMRK_NAME Another commit
2: Author1 Third commit
1: Author1 TAG1 Second commit
0: Author1 Initial commit

3 个答案:

答案 0 :(得分:6)

使用最近的Mercurial(2.5之后),您可以使用if模板表达式:

hg log --template '{rev} {author}{if(tags, " {tags}")}{if(bookmarks," {bookmarks}")} {desc|firstline}\n'

答案 1 :(得分:3)

可以创建一个新样式,用于定义集合的开头(即书签),集合本身的元素以及集合的最后一个元素的外观。

将以下样式定义保存在文件中,例如叫做“my_style”:

changeset = '{rev} {author}{bookmarks} {desc|firstline}\n'

start_bookmarks = ' ['
bookmark = '{bookmark}, '
last_bookmark = '{bookmark}]'

然后,您可以使用刚刚创建的样式调用hg log:

> hg log --style /path/to/my_style
6 james [bar, foo, master] b 3
5 james b 2
4 james a 3

如果有书签,则只会插入空格和括号(请注意{author}和{bookmarks}之间没有空格。)

可以找到一些不错的cli模板作为参考here

答案 2 :(得分:2)

我对Mercurial中的模板知之甚少,但您总是可以使用sed过滤掉额外的空格:

hg log --template "{rev} {author} {tags} {bookmarks} {desc|firstline}\n" | sed "s/  */ /g"