Skip to content

kt0ns/gitfame

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitFame

GitFame — консольная утилита на Go для подсчёта и анализа статистики вкладов разработчиков в Git-репозиторий. Программа анализирует историю коммитов и вычисляет для каждого автора (или коммитера) количество строк кода, коммитов и затронутых файлов.

Ключевые возможности

  • Высокая производительность: применяется параллельная обработка файлов и воркер-пул для одновременного выполнения git blame.
  • Гибкая фильтрация: поддерживаются фильтры по расширениям, языкам и glob-паттернам (--exclude, --restrict-to).
  • Несколько форматов вывода: tabular, csv, json, json-lines.
  • Настраиваемая сортировка: результаты можно сортировать по lines, commits или files.

Требования и сборка

Убедитесь, что у вас установлен Go (версии 1.20+), а также доступна команда git в системе.

Сборка:

git clone <URL_репозитория>
cd gitfame
go build -o gitfame ./cmd/gitfame/main.go

Примеры использования

Запуск по умолчанию в текущей директории:

./gitfame

Анализ указанного репозитория и ревизии с выводом в JSON, сортировка по количеству файлов:

./gitfame --repository=/path/to/repo --revision=main --order-by=files --format=json

Анализ только файлов с расширениями .go и .md, исключая vendor:

./gitfame --extensions=.go,.md --exclude="vendor/*"

Флаги

Флаг Тип Значение по умолчанию Описание
--repository string . Путь к Git-репозиторию для анализа.
--revision string HEAD Указатель на коммит/ветку/тег для расчёта статистики.
--order-by string lines Ключ сортировки результатов. Допустимые значения: lines, commits, files.
--use-committer bool false Использовать Committer-а вместо Author-а при подсчете статистики.
--format string tabular Формат вывода. Допустимые значения: tabular, csv, json, json-lines.
--extensions строки Список расширений файлов через запятую, которые будут участвовать в подсчете (например, .go,.md).
--languages строки Список языков программирования через запятую (маппинг расширений берется из configs/language_extensions.json).
--exclude строки Glob-паттерны файлов/директорий, которые нужно исключить из анализа.
--restrict-to строки Glob-паттерны; файлы, не попадающие ни под один из них, будут игнорироваться.

Форматы вывода

  • tabular: человекочитаемая таблица с выравниванием колонок (используется text/tabwriter).
  • csv: заголовок и строки в формате CSV Name,Lines,Commits,Files.
  • json: единый JSON-массив объектов {name, lines, commits, files}.
  • json-lines: NDJSON, по одному JSON-объекту на строку.

Структура проекта

  • cmd/gitfame/main.go — точка входа, парсинг флагов и запуск пайплайна.
  • configs/ — статические конфигурационные файлы, подключаемые через go:embed.
  • internal/config/ — обработка CLI-флагов и формирование конфигурации приложения.
  • internal/git/ — взаимодействие с Git (ls-tree, blame --porcelain) через os/exec.
  • internal/filter/ — фильтрация списка файлов по правилам.
  • internal/statistics/ — параллельная агрегация метрик и сортировка результатов.
  • internal/format/ — формирование вывода в соответствующем формате.
  • internal/errors/ — определения и обработка ошибок.

Тестирование

Интеграционные тесты находятся в test/integration/gitfame_test.go.

Подход к тестированию:

  • В test/integration/testdata/bundles/ хранятся .bundle файлы — снапшоты репозиториев для тестов.
  • В test/integration/testdata/tests/ находятся каталоги с тест-кейсами; каждый содержит description.yaml и expected.out.
  • TestMain собирает бинарник gitfame один раз и использует его в под-тестах.

Запуск интеграционных тестов:

go test ./test/integration/... -v

С проверкой на гонки данных:

go test -race ./... -v

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages