Sobre o projeto

`git-stats` é uma ferramenta de linha de comando escrita em Rust que analisa informações de `git log` para produzir estatísticas agregadas de commits. Ela lê o repositório diretamente usando `gitoxide`, uma implementação pura em Rust do git, evitando a necessidade do binário git. ## Recursos - **Estatísticas agregadas**: Resume commits por autor, mostrando o número de commits, arquivos alterados, inserções, deleções e mudanças líquidas de linhas. - **Faixas de revisão**: Suporta revisões únicas, faixas `A..B` e `A...B`, com endpoints especificados como refs, hashes curtos, `@{n}`, etc. - **Filtragem**: Limita por autor (regex), intervalo de datas (`--since`, `--until`) e faixa de revisão. - **Rastreamento de revisão**: Opcionalmente mostra revisores/testadores com base nos trailers git `Acked-by`, `Tested-by` e `Reviewed-by`. - **Ordenação**: Ordena por qualquer coluna (autor, commits, arquivos, inserções, deleções, líquido) em ordem crescente ou decrescente. - **Exibição de e-mail**: Opcionalmente mostra endereços de e-mail dos autores. ## Instalação Instale a partir do crates.io: ``` cargo install git-stats --locked ``` Ou com `cargo-binstall` para binários pré-compilados: ``` cargo binstall git-stats ``` No Arch Linux, use os pacotes AUR `git-stats` (fonte) ou `git-stats-bin` (pré-compilado). Com `mise`, instale um binário pré-compilado com verificação de checksum e proveniência SLSA: ``` mise use -g github:lukehsiao/git-stats ``` ## Uso ``` Uso: git-stats [OPÇÕES] [faixa-de-revisão] Argumentos: [faixa-de-revisão] Mostra apenas commits na faixa de revisão especificada [padrão: HEAD] Opções: -e, --email Mostra o endereço de e-mail de cada autor -r, --reviews Mostra quem revisou/testou commits com base nos trailers git -s, --sort <ORDENAR> Por qual coluna ordenar [padrão: commits] [valores possíveis: author, commits, files, insertions, deletions, net] --reverse Inverte a ordem de ordenação -a, --author <AUTOR> Limita commits àqueles que correspondem a um padrão regex --since <DESDE> Limita a commits mais recentes que uma data --until <ATÉ> Limita a commits mais antigos que uma data -h, --help Imprime ajuda -V, --version Imprime versão ``` Exemplo de saída: ``` $ git stats -r origin..HEAD Autor Commits Arquivos Alterados Inserções Deleções Líquido Δ Luke Hsiao 67 117 +2616 -1126 +1490 dependabot[bot] 31 62 +203 -267 -64 Total 98 179 +2819 -1393 +1426 Revisor/Testador Commits Luke Hsiao 1 ``` ## Notas - **Faixas de revisão**: Apenas formas simples são suportadas; sintaxe exótica de gitrevisions(7) não é interpretada. - **Filtragem por data**: Aceita ISO 8601, RFC 2822, timestamps unix e datas relativas como "2 semanas atrás". A filtragem é na data do committer. - **Correspondência de autor**: Corresponde ao autor resolvido por mailmap, ao contrário de `git log --author` que usa cabeçalhos brutos. - **Commits de merge**: Contam como commits, mas não contribuem com mudanças de linhas/arquivos. - **Clones rasos**: Funcionam, mas as estatísticas podem diferir de clones completos; um aviso é impresso. - **Submódulos**: Contados como arquivos alterados únicos, com pequenas divergências no tratamento de renomeações do git. - **Contagens de linhas**: Do mecanismo de diff do gitoxide, podem diferir ligeiramente do git em alguns hunks. - **Repositórios SHA-256**: Não suportados (limitação do gitoxide). - **Codificações de commit**: Codificações não-UTF-8 não são convertidas; nomes de autores podem mostrar caracteres de substituição.