Как сказать `git log - [num | short] stat` для подсчета пустых строк - PullRequest
1 голос
/ 19 августа 2011

Общий вопрос

Как мне сказать git, что при использовании git log --stat?

он также должен считать пустые строки в diff

Пример кода

git clone https://github.com/voldemort/voldemort.git
cd voldemort
git log --numstat -n 1 c21ad76 contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java
git show c21ad76 -- contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java

Подробнее

В данном примере git log --numstat претендует на коммит c21ad76, в этом файле HadoopStoreBuilderReducer.java добавлено 25 и 22 удалено строк. Если вы внимательно посмотрите на вывод diff (git show) этого файла, вы увидите, что на самом деле 30 добавлено и 25 удалено строк, что делает его отличным на 5 добавлено и 3 удалено строк. При еще более внимательном рассмотрении есть 5 пустых строк внутри блока добавленных строк и 4 пустых строки в блоке удаленных строк.

Это поведение аналогично git log --shortstat или git log --stat.

Мне кажется, что все пустые строки, находящиеся внутри ломтя, не считаются git log --numstat.

Как вычислить с помощью git количество добавленных и удаленных строк на коммит , включая пустые строки ?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Контекст

Существует несколько разных (действительных) патчей для одного и того же изменения. Основным отличием является использование контекстных строк. Unified diff обычно использует три строки контекста до и после каждого изменения. Внутри git (иногда) использует ноль строк контекста, что может привести к различным измененным строкам.

Первое решение: внешний инструмент

Как уже описал @ karl-bielefeldt, можно передать результат git show в grep -Pc '^\+(?!\+)' или grep -Pc '^-(?!-)'. Существует инструмент diffstat, который делает именно это:

$git show c21ad76 -- contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java | diffstat
 HadoopStoreBuilderReducer.java |   57 +++++++++++++++++++++--------------------
 1 file changed, 30 insertions(+), 27 deletions(-)

Второе решение: использовать разные контексты для патча

Выходной патч git show можно настроить. С опцией "-Ux" для x может быть указан контекст.

$git show -U0 c21ad76 -- contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java | diffstat
 HadoopStoreBuilderReducer.java |   47 +++++++++++++++++++++--------------------
 1 file changed, 25 insertions(+), 22 deletions(-)

Это соответствует внутреннему git log --numstat, потому что он использует контекст 0 для вычисления статистики. Обратите внимание, что это поведение собирается изменить в git версии 1.7.7. При этом numstat использует 3 строки контекста.

0 голосов
/ 19 августа 2011

Я считаю 27 удаленных и 30 добавленных.Я не знаю, есть ли способ сделать это с помощью внутреннего git, но у меня это сработало:

git show c21ad76 -- contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java | grep -Pc '^\+(?!\+)'
git show c21ad76 -- contrib/hadoop-store-builder/src/java/voldemort/store/readonly/mr/HadoopStoreBuilderReducer.java | grep -Pc '^-(?!-)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...