2012-09-20 18 views
1

我試圖用於選擇水銀修訂版(全節點ID)創建一個文本框自動完成該修改的列表。我可以用hg log --template '{node}\n'讓所有的版本,但它接管了1秒,該命令完成。水銀:得到匹配的部分修訂數

當用戶在文本框中開始鍵入(例如1d34)時,我想要執行類似hg log --rev 1d34 --template '{node}\n'的操作,以便生成的列表是以1d34開頭的所有修訂。不幸的是,如果多個版本匹配標識符,Mercurial會給出錯誤(ambiguous identifier!)。

過濾列表的時間太長,因爲hg log命令必須首先完成的,所以我在尋找一個更快的解決方案。我可以緩存列表中,但倉庫被經常改變,所以我繼續回來慢hg log命令。

+1

這有什麼區別,如果你只有從'log'當前'提示'到最近檢索的一個?除非你重寫歷史記錄,否則新的變更集不會使你的緩存失效。 – shambulator

回答

0

繼@shambulator,您只需更新都從頭重新生成它的緩存來代替。 Mercurial的revlog格式非常適合這種順序操作,特別是從提示或初始提交索引的操作。

如果你沒有改寫歷史,你可以做

hg log --template '{node}\n' --rev lastcached:tip 

(您可能使用書籤或標籤追蹤最後修改緩存,但是這必須將數據添加到回購的缺點可見香草水銀或其他圖形用戶界面的用戶。)

如果你改寫歷史,那麼你可以做一個全面刷新之後,或者你可以跟蹤的最後修訂不變。然後刪除以下是一個在緩存中的所有修改和做

hg log --template '{node}\n' --rev lastunchanged:tip 

(當然更新lastcached以反映新的歷史。)