2017-03-22 49 views
1

我讀過的所有文檔都說我可以在指定revset時使用正則表達式我正在嘗試使用tag()謂詞和正則表達式,例如, tag('v334.\*')以列出所有標有v3340v3349的版本。在hg revset中使用正則表達式

離開了我所遇到的語法錯誤,使用正確的正則表達式的語法,只要我可以從網頁告訴像https://www.mercurial-scm.org/repo/hg/help/revsets(參見「模式」一節)的最佳機會似乎是:

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

你好,我更新了你的問題,把你的評論放到我的答案中,我的回答在你的評論之後。未來,請遵循以下建議: 1.不要在評論中提問。相反,更新你的問題,並留下評論的答案只是提到你更新了你的問題。 2.不要使用HTML格式。瞭解StackOverflow支持的非常簡單的Markdown語法。 感謝:-) –

回答

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()search()。 Mercurial的行爲如同search()

給我的答案上面我創建的一些標籤刮回購,所以它的工作對我來說:

$ hg log -r 'tag(r"re:v334\d$")' 
changeset: 1:d0b5e02bb7d9 
tag:   v3340 

changeset: 2:566e36f5510c 
tag:   v3344 

我注意到另一個不同之處:如果我搜索一個不存在的標籤,我得到一個空的輸出,而不是你得到的abort。我最後的建議是使用最近的mercurial。 hg --version對我來說4.1.1。

+0

首先......你的第一個反應顯示「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'不存在 – rmhartman

+0

oh#$ @ !!您可以在主帖子中使用的html標記不能用於評論我希望你可以閱讀... – rmhartman

+0

哦,並使用「hg tags | grep v334」確實顯示這些標籤存在。 – rmhartman

0

我相信

hg log -r 'tag("re:v334\d")' 

應該夠了。

+0

...和我的回答相比有什麼不同? –

+0

@ marco.m簡單 –