2010-06-16 104 views
35

是否有任何好的工具可以計算mercurial存儲庫中特定時間段內更改的代碼行數?一些沿着statsvn行的東西會很棒,但是在6個月內任何計算改變的代碼行數的東西都可以(包括與hg log的參數的巧妙組合)。謝謝。隨着時間的推移計算更改的代碼行

PS:請不要討論這個測量數量的目的;)

+1

http://code.google.com/p/gource/將執行此操作,並在此過程中看起來很漂亮。 :-) – Ken 2010-06-16 20:22:25

回答

9

我需要做到這一點,並花了相當多的時間與hg churn擴展和類似的解決方案。

最後,我發現,什麼工作最適合我的是CLOC(計數代碼行數):http://cloc.sourceforge.net/

你可以給它包含一個項目的兩個版本兩個文件夾,然後它就會計算所有的相同的行,修改,添加,刪除。它識別多種語言和條款代碼,評論和空白行。

要使用它,我從我的汞代碼兩個版本拉出爲兩條平行的文件夾,然後使用CLOC --diff - 忽略空格

+4

這是一個很好的解決方案,因爲您只需下載一個Perl文件即可解決「問題」。請注意,語法是:'./cloc。pl --ignore-whitespace --ignore-case --diff

' – Pascal 2011-11-05 15:36:13

+0

它的速度不如git diff --shortstat,但它在尋找已複製的重複代碼方面做得更好。 – cmcginty 2013-01-17 00:04:07

11

編輯hg diffhg log都支持--stat選項,可以爲你做到這一點,只有更好,更快。


我製作的一個叫做lines爲我算更改的行(代碼不一定行)的別名。嘗試把這個別名在您的.hgrc文件:

[alias] 
lines = !echo `hg log -pr [email protected] | grep "^+" | wc -l` Additions; echo `hg log -pr [email protected] | grep "^-" | wc -l` Deletions; 

然後先通過它的修訂,其次是任何可選參數:

hg lines tiphg lines 123:456 -u brian

有時候你想知道的行數更改排除只有空白的更改。這需要使用diff -w而不是log -p。我成立了這個linesw別名:

#ignore whitespace 
linesw = ![[ $1 =~ : ]] && r=$1 || r="$1~1:$1"; echo `hg diff -wr $r | grep "^+\([^+]\|$\)" | wc -l` Additions; echo `hg diff -wr $r | grep "^-\([^-]\|$\)" | wc -l` Deletions; 

hg linesw tiphg lines 123:456

注意他們的行爲略有不同,因爲difflog行爲不同 - 例如,log將採取--user參數而diff不會,當通過一個範圍時,log將顯示在該範圍內提供的第一個修訂版提交的更改,而diff則不會。

這只是使用bash進行測試。

+0

請勿使用hg log命令。這還包括兩個提交ID之間線性回購協議的所有更改,包括當前分支未提交的提交。 – Paul 2018-03-06 10:20:57

相關問題