Я бы разделил эту проблему на подзадачи:
Raw log magi c
Я бы начал с определения отправной точки, с которой проблема относительно проста
Если вы запустите
git log
, вы увидите список итогов фиксации. Конечно, это неприятно - пока.
Теперь давайте ограничим наш домен, допустим, нас интересует статистика c для последних 100 коммитов:
git log -100
Теперь количество рассматриваемых коммитов является подходящим. Но мы по-прежнему не видим добавлений и удалений, давайте исправим это:
git log -100 --stat
Стало лучше, правда? Давайте улучшим его дальше:
git log -5 --stat --format=""
Намного, намного лучше. Теперь для каждой фиксации у вас есть «полезные строки», то есть строки, содержащие количество изменений и последнюю строку формата
9 файлов изменено, 189 вставок (+), 1 удаление (-)
в основном, если у вас есть строка, содержащая «файлы изменены» или «файл изменен», вам нужно игнорировать ее, если у вас нет файла с таким именем. Все остальные строки являются полезными необработанными входными данными.
Алгоритм для статистики
Вам нужна структура данных, которая будет содержать тип файла в качестве ключа и пару чисел в качестве значения. Первое число - это количество минусов, второе число - количество плюсов. Псевдокод:
For Each ln In Lines Do
If (Not ln.Replace("files", "file").Contains("file changed")) And ln.Contains(".") Then
FileExtension = ln.Substring(ln.IndexOf(".") + 1, ln.IndexOf(" "))
If (Not Extensions.Has(FileExtension)) Then
Extensions(FileExtension) = [0, 0]
End
UsefulSubstring = ln.Substring(ln.LastIndexOf(" ") + 1)
For Each char In UsefulSubstring Do
If char = '+' Then
Extensions(FileExtension)[1] = Extensions(FileExtension)[1] + 1
Else
Extensions(FileExtension)[0] = Extensions(FileExtension)[0] + 1
End If
End For
End If
End For
Этот алгоритм построит ваш вывод, который вам нужно поместить в вывод консоли в том формате, который вы предпочитаете. Итак, вы можете вызвать эту программу с нужным вам вводом. Вы даже можете встроить в проект команду git log. Это не очень большая задача, поэтому если вы потратите на это несколько часов, а может и меньше, вы получите нужный результат.