cloc
позволяет подсчитывать количество строк кода, хранящихся в каталоге на язык для каждого типа (пустой, комментарий или код).
git blame
позволяет видеть, какая часть файла принадлежит кому.
Я ищу способ объединить оба, чтобы получить трехмерную матрицу, в которой перечислены строки кода для каждого типа для каждого пользователя.
Есть ли элегантные встроенные способы сделать это или нужно "обрезать" части "вины" (запустив grep
после git blame
) каждого пользователя и запустить cloc
на них, чтобы вычислить таблицу для каждого пользователя
ИЗМЕНИТЬ
Наивный подход (на основе комментария @Jubobs):
- Сначала создайте файл вины для каждого файла в каталоге (не обязательно явно).
- Запустите grep с чем-то вроде
grep "^[^(]*([^)]*)"
, чтобы захватить список всех пользователей и получить uniques с помощьюsort
иuniq
. - Для каждого пользователя: создайте теневую копию папки и grep с помощью
grep "^[^(]*($user)"
, чтобы остались только строки этого пользователя. - Запустить cloc в теневой копии.
- Сделайте это для каждого пользователя, сохраните результаты и выведите их вместе.
Это более или менее способ генерации желаемого результата. Но, как видно, этот подход позволяет много копировать (или, по крайней мере, хранить в памяти), и можно фактически вычислить строки для каждого пользователя, запустив файл один раз вместо нескольких раз.
Желаемый вывод:
что-то вроде:
+--------+--------------------------------+--------------------------------+
|User | C# | XML |
+--------+-------+-------+---------+------+-------+-------+---------+------+
| | files | blank | comment | code | files | blank | comment | code |
+--------+-------+-------+---------+------+-------+-------+---------+------+
| Foo | 12 | 75 | 148 | 2711 | 2 | 42 | 0 | 0 |
| Bar | 167 | 1795 | 1425 | 2 | 16 | 0 | 512 | 1678 |
+--------+-------+-------+---------+------+-------+-------+---------+------+
| Total | 179 | 1870 | 1573 | 2713 | 18 | 42 | 512 | 1678 |
+--------+-------+-------+---------+------+-------+-------+---------+------+