2015-12-24 41 views
0

這個問題不是hg log - How to get the last 5 log entries?的重複 - 很容易應用一個限制。問題在於,日誌輸出受限制時爲,似乎並不總是按日誌日期排序 - 這種行爲會隨着revset的增加而改變。如何在指定Revset時用Hg日誌限制爲N個最新條目?

例如,簡單的日誌工作「按預期」,它顯示最新的五個日誌條目。

hg log -l5 

然而,使用revset當結果是最古老的節點第一(如無-l觀察到的);因此以下示出了不希望的五個條目。

hg log -r "user('Me')" -l5 

如何能hg log,具有revset,被指示由降日誌日期訂購(「預期」),這樣的限制有一個可預見的和有意義的影響?


$ hg --version 
Mercurial Distributed SCM (version 3.6.1) 

我不認爲在轉投擲隨機reverse通話設置預測的,但如果說是「最好」的方式..

回答

1

有一對夫婦的你有選擇。

首先,您可以結合使用reverse()與您現有的revset,如:

hg log -r 'reverse(user("me"))' -l 5 

作爲速記,你也可以使用-f--follow,它 - 連同-r使用時 - 將包裝修改於reverse(...)。例如:

hg log -f -r 'user("me")' -l 5 

或者你可以編碼的變更限制,例如:

hg log -r 'last(user("me"), 5)' 

注意revset別名可能是有用的,以避免不得不一遍又一遍地敲入了revsets。所以,你可以把這樣的事情在你的.hgrc

[revsetalias] 
lastby($1) = last(user($1), 5) 

然後執行:

hg log -r 'lastby("me")` 
+0

純粹的劣質汞記錄行爲。在這裏,我剛剛創建了一個讚美rev * sets *的合流頁面。成爲「詹姆斯邦德」非常重要。 – user2864740

+0

FWIW,'reverse'方法是不可靠的,因爲在子集中不能保證連續的日期排序(我剛剛遇到了它不是的情況);它必須用'sort(..,' - date')'來完成。 – user2864740

0

重要補遺答案:這個任務做使用reverse盲目。雖然在很多情況下工作,更好地/可靠的通用解決方案是使用sort,如:

hg log -r 'sort(user("me"), "-date")' -l 5 

這是因爲reverse不保證源組順序秩序井然 - 因爲這樣它可能仍然會導致最終輸出結果不是符合「最新」的請求標準。

上面的sort的使用保證了行爲,因爲它按日期排序,降序,然後選擇每個hg日誌的最高限額5個限制選項。

(否則,請參閱Reimer的答案。)