我读过的所有文档都说我可以使用正则表达式指定我试图使用tag()谓词的revset,使用正则表达式,例如tag('v334.\*')
列出标有v3340
到v3349
的所有版本。
从https://www.mercurial-scm.org/repo/hg/help/revsets这样的页面(参见“PATTERNS”部分)中可以看出,使用正确的正则表达式语法消除了我遇到的语法错误,最好的机会似乎是:
tag(r're:v334.\*')
这至少解析了,但结果说tag 're:v334.\*' does not exist
。我知道那些标签存在,我做错了什么?
更新1
首先......您的第一个回复显示re:v334
不是正则表达式。我的理解是glob:
前缀指定了一个简单的正则表达式,而re:
前缀使用了Python正则表达式,所以它应该是re:v334.*
...是吗?
然后它就行不通了。这两种形式都是:
$ hg log -r 'tag(r"re:v334.*")'
abort: tag 're:v334.*' does not exist
$ hg log -r 'tag(r"re:v334")'
abort: tag 're:v334' does not exist
哦,并且使用hg tags | grep v334
确实显示存在这些标记。
答案 0 :(得分:0)
你非常接近: - )
列出标有以v334
开头的字符串的所有修订:
hg log -r 'tag(r"re:v334")'
列出标有v334
的所有修订版,后跟一位数字(因此v3347
会匹配但不匹配,例如v33478
):
hg log -r 'tag(r"re:v334\d$")'
一些补充说明:
r
,但它永远不会受到伤害,这是指定原始字符串的Python方式。$
是指定正则表达式中字符串的结尾,否则它会像第一个示例中那样贪婪。更新1
好吧,正则表达式不需要包含特殊字符作为正则表达式:-)如果你看Python documentation for regex,你会看到有两个函数,match()
和{{ 1}}。 Mercurial的行为类似于search()
。
为了给出我的答案,我从头开始创建了一些带有一些标签的回购,所以它对我有用:
search()
我注意到另一个不同之处:如果我搜索一个不存在的标记,我会得到一个空输出,而不是你得到的$ hg log -r 'tag(r"re:v334\d$")'
changeset: 1:d0b5e02bb7d9
tag: v3340
changeset: 2:566e36f5510c
tag: v3344
。我可以做的最后一个建议是使用最近的mercurial。 abort
告诉我4.1.1。
答案 1 :(得分:0)
我相信
hg log -r 'tag("re:v334\d")'
应该足够了。