2016-01-06 47 views
4

我一直在試圖解決是否有辦法獲取與傳入的hg狀態相同的信息。 (這是使用汞版本1.9.2)Mercurial獲取傳入文件更改摘要的最佳方式

所以,如果你拉一個回購你就可以得到的所有的更改摘要:

hg pull 
hg status --rev .:default 

然而,隨着進入拉的最佳可用之前是:

hg incoming --stat 

這對顯示已更改的文件很好。但是沒有給出所有變更集的總體概述。

現在,我可以得到接近使用一些bash中總結的所有文件:

hg in --rev default --template '< {desc|tabindent}\n' -q | sed 's%\t%< %' 
filechanges=`hg in --rev default --template '{files} ' -q` 
echo ${filechanges} | xargs -n1 | sort -u | sed -e 's%^%. %' 

現在我可以顯示「添加,刪除,修改的」使用我已根據默認的〜/ hgtemplates /圖創造一種風格-cmdline.files:

# specify a changeset 
changeset_verbose = 'changeset: {node} {rev} {branch}\ndescription:\n{desc|tabindent}\nFiles:\n{file_mods}{file_adds}{file_dels}{file_copies_switch}\n' 
changeset = 'desc: {desc|tabindent}\nFiles:\n{file_mods}{file_adds}{file_dels}{file_copies_switch}\n' 
changeset_quiet = '{file_mods}{file_adds}{file_dels}{file_copies_switch}\n' 

# Using hg status prefixes 

# Modified M prefix 
start_file_mods = '' 
file_mod = 'M {file_mod}\n' 
end_file_mods = '' 

# Added A prefix 
start_file_adds = '' 
file_add = 'A {file_add}\n' 
end_file_adds = '' 

# Deleted ! prefix 
start_file_dels = '' 
file_del = '! {file_del}\n' 
end_file_dels = '' 

# Copies C prefix ?????? 
start_file_copies = 'copies:  ' 
file_copy = 'C {name} ({source})\n' 
end_file_copies = '' 

然後使用它由:

hg in --style ~/hgtemplates/map-cmdline.files -q 

但隨後我將不得不使用一個以上的C omplex合併腳本,可能perl哈希基於名稱。

那麼有擴展名或模板的方式來做到這一點?

任何指針在正確的方向?

回答

5

首先,您需要明白hg incoming通過電線發送的相同數據與hg pull相同。這在很多情況下是浪費的(你只想查看日誌),但是當你需要額外的信息時它很好。

因此,您可以利用--bundle選項來將拉取數據存儲在臨時位置,然後將該包用作只讀覆蓋庫。

下應該能夠做你的需要:

hg incoming --bundle .hg/changes.hg 
hg status -R .hg/changes.hg --rev 'bundle()' 

另外,你可能想用hg -R .hg/changes.hg執行當然任何其他只讀倉庫操作。 revset bundle()將包含所有傳入的修訂。請注意,儘管我在此處使用--rev來關注你,但我想你可能真的需要--change選項。

而且,一旦不滿意,您不必再拉在網絡上的變化,但是可以從束直抓住他們:

hg pull .hg/changes.hg 

請注意,你可以把任何你想要的包文件,它不一定是.hg/changes.hg

+0

遺憾的是,傳入不會緩存到.hg下的標準文件。 我可能是偏執嘗試不拉,這可能是正常的方式。就像捆綁的想法。 –

+0

我認爲--change只顯示一個變化,hg st --rev。:default顯示了整個文件的變化。可能應該增加一個例子,但它已經足夠囉嗦了。 –

相關問題