2011-11-17 62 views
2

我有一個修訂哈希鍵。我想獲得包含任何內容的最近版本,但是.hg標籤。如何獲得最接近包含其他變化而不是.hgtags的給定變體的最接近版本?

例如,考慮一個水銀歷史的片段:

D:\CI\NC\8.0>hg log -l3 -b 8.0 -v 
changeset: 1768:633cf1f61665 
branch:  8.0 
tag:   tip 
user:  ci 
date:  Wed Nov 16 21:06:20 2011 +0200 
files:  .hgtags 
description: 
Replaced tag 'good.NC.16' with 'rejected.NC.16' for changeset 9451e8f187b1 


changeset: 1767:6cad328c622c 
branch:  8.0 
parent:  1765:9451e8f187b1 
user:  ci 
date:  Wed Nov 16 21:04:26 2011 +0200 
files:  .hgtags 
description: 
Added tag 'good.NC.16' for changeset 9451e8f187b1 


changeset: 1765:9451e8f187b1 
branch:  8.0 
tag:   rejected.NC.16 
user:  gilad 
date:  Tue Nov 15 18:26:09 2011 +0200 
files:  .hgignore 
description: 
update 

在這種情況下,如果給定的修訂633cf1f61665,然後我找了修訂9451e8f187b1,因爲它是最接近的一個,其中不僅包含.hgtags,還包含其他內容。

如何在給定633cf1f61665的情況下使用盡可能少的hg.exe調用來查找9451e8f187b1

編輯

我有固定的輸出,它應該屬於同一分支顯示修訂。

EDIT2

我會盡量解釋一下。讓我們定義兩個概念:

  • 一個沉悶的變更集 - 由hg tag行動創建的變更集。
  • 一個有趣的變化 - 任何非沉悶的變化。

所以,我的問題可以被改寫,像這樣:

Given an arbitrary revision (dull or interesting) I need to find the closest 
interesting revision belonging to the same named branch using as few hg invocations 
as possible. 

例如,給定633cf1f616656cad328c622c9451e8f187b1所要求的版本是9451e8f187b1

+0

你爲什麼想要這個變更集?你真的想要「以前的標記變更集」嗎? –

+0

我編輯了這個問題,現在它更有意義了嗎? – mark

回答

5

嘗試用

$ hg log -r "max(::REV and not file(.hgtags))" 

,看看有沒有你想要做什麼。有關查詢語言的更多信息,請參閱hg help revsets

[revsetalias] 
interesting($1) = max(::$1 and not file(.hgtags)) 

,然後在將來使用hg log -r "interesting(123)"

,如果你經常使用它你可以爲這個revset別名。

+0

賓果。順便說一句,根據文檔它可以寫得更短 - 「hg log -r」最後(:: 15400 - 文件(.hgtags),1)「' – mark

+0

是的,如果您願意,可以使用'-'。我已經更新了答案,並用簡單的'max(...)'替換了'last(...,1)'。 –

+0

謝謝,但稱它爲「未加標籤」是錯誤的。找到的修訂版可以標記爲正常,只是該修訂版不記錄標記操作本身。 – mark