Подсчет измененных строк кода с течением времени

Есть ли хороший инструмент, который вычисляет количество измененных строк кода за определенный период времени в репозитории mercurial? Что-то вроде statsvn было бы здорово, но все, что касается количества измененных строк кода в течение 6 месяцев, будет do (включая умную комбинацию аргументов для hg log). Спасибо.

PS: Пожалуйста, не обсуждайте цель измерения этого числа ;)


person Gerald Senarclens de Grancy    schedule 16.06.2010    source источник
comment
code.google.com/p/gource сделает это и при этом будет выглядеть красиво. :-)   -  person Ken    schedule 17.06.2010


Ответы (3)


Вам нужно расширение hg churn.

Вы можете получить наглядные результаты с помощью активности hg или hg диаграмма.

person Ry4an Brase    schedule 16.06.2010

Изменить: hg diff и hg log поддерживают вариант --stat, который может сделать это за вас, только лучше и быстрее.


Я создал псевдоним lines для подсчета измененных строк (не обязательно строк кода). Попробуйте поместить этот псевдоним в свой файл .hgrc:

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

Затем сначала передайте ему ревизию, а затем любые необязательные аргументы:

hg lines tip or hg 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 tip or hg lines 123:456

Обратите внимание, что они ведут себя немного по-разному, потому что diff и log ведут себя по-разному — например, log примет параметр --user, а diff — нет, и при передаче диапазона log покажет изменения, зафиксированные в первой ревизии, заданной в диапазоне, а diff нет.

Это было протестировано только с использованием bash.

person undefined    schedule 20.04.2012
comment
Не используйте команду hg log. Это также включает все изменения в истории линейного репо между двумя идентификаторами коммитов, включая коммиты, которые не были зафиксированы в текущей ветке. - person Paul; 06.03.2018

Мне нужно было это сделать, и я потратил немало времени на расширение hg churn и подобные решения.

В конце концов я обнаружил, что лучше всего для меня работает CLOC (счет строк кода): http://cloc.sourceforge.net/

Вы можете дать ему две папки, содержащие две версии проекта, и он подсчитает все строки, которые совпадают, изменены, добавлены, удалены. Он распознает несколько языков и детализирует код, комментарии и пустые строки.

Чтобы использовать его, я вытащил две версии своего кода из Hg в две параллельные папки, а затем использовал cloc --diff --ignore-whitespace

person Irish Buffer    schedule 11.05.2011
comment
Это хорошее решение проблемы, поскольку вы просто загружаете один файл Perl. Обратите внимание на синтаксис: ./cloc.pl --ignore-whitespace --ignore-case --diff <dir a> <dir b> - person Pascal; 05.11.2011
comment
это не так быстро, как git diff --shortstat, но гораздо лучше справляется с поиском дублирующегося кода, который был скопирован. - person cmcginty; 17.01.2013