Sobre el proyecto

`git-stats` es una herramienta de línea de comandos escrita en Rust que analiza la información de `git log` para producir estadísticas agregadas de commits. Lee el repositorio directamente usando `gitoxide`, una implementación pura de Rust de git, evitando la necesidad del binario de git. ## Características - **Estadísticas agregadas**: Resume los commits por autor, mostrando el número de commits, archivos modificados, inserciones, eliminaciones y cambios netos de líneas. - **Rangos de revisión**: Soporta revisiones individuales, rangos `A..B` y `A...B`, con extremos especificados como refs, hashes cortos, `@{n}`, etc. - **Filtrado**: Limita por autor (regex), rango de fechas (`--since`, `--until`) y rango de revisión. - **Seguimiento de revisiones**: Opcionalmente muestra revisores/verificadores basados en los trailers de git `Acked-by`, `Tested-by` y `Reviewed-by`. - **Ordenamiento**: Ordena por cualquier columna (autor, commits, archivos, inserciones, eliminaciones, neto) en orden ascendente o descendente. - **Visualización de correos**: Opcionalmente muestra las direcciones de correo de los autores. ## Instalación Instala desde crates.io: ``` cargo install git-stats --locked ``` O con `cargo-binstall` para binarios precompilados: ``` cargo binstall git-stats ``` En Arch Linux, usa los paquetes AUR `git-stats` (fuente) o `git-stats-bin` (precompilado). Con `mise`, instala un binario precompilado con verificación de checksum y procedencia SLSA: ``` mise use -g github:lukehsiao/git-stats ``` ## Uso ``` Uso: git-stats [OPCIONES] [rango-de-revisión] Argumentos: [rango-de-revisión] Muestra solo commits en el rango de revisión especificado [por defecto: HEAD] Opciones: -e, --email Muestra la dirección de correo de cada autor -r, --reviews Muestra quién revisó/verificó los commits basado en trailers de git -s, --sort <SORT> Columna por la que ordenar [por defecto: commits] [valores posibles: author, commits, files, insertions, deletions, net] --reverse Invierte el orden de clasificación -a, --author <AUTHOR> Limita los commits a aquellos que coinciden con un patrón regex --since <SINCE> Limita a commits más recientes que una fecha --until <UNTIL> Limita a commits más antiguos que una fecha -h, --help Imprime ayuda -V, --version Imprime versión ``` Ejemplo de salida: ``` $ git stats -r origin..HEAD Autor Commits Archivos Modificados Inserciones Eliminaciones Neto Δ Luke Hsiao 67 117 +2616 -1126 +1490 dependabot[bot] 31 62 +203 -267 -64 Total 98 179 +2819 -1393 +1426 Revisor/Verificador Commits Luke Hsiao 1 ``` ## Notas - **Rangos de revisión**: Solo se soportan formas simples; la sintaxis exótica de gitrevisions(7) no se interpreta. - **Filtrado por fecha**: Acepta ISO 8601, RFC 2822, marcas de tiempo unix y fechas relativas como "hace 2 semanas". El filtrado se basa en la fecha del committer. - **Coincidencia de autor**: Coincide con el autor resuelto por mailmap, a diferencia de `git log --author` que usa encabezados crudos. - **Commits de fusión**: Cuentan como commits pero no contribuyen con cambios de líneas/archivos. - **Clones superficiales**: Funcionan, pero las estadísticas pueden diferir de los clones completos; se imprime una advertencia. - **Submódulos**: Se cuentan como archivos modificados individuales, con divergencias menores en el manejo de renombres de git. - **Conteos de líneas**: Del motor de diff de gitoxide, pueden diferir ligeramente de git en algunos hunks. - **Repositorios SHA-256**: No soportados (limitación de gitoxide). - **Codificaciones de commits**: Las codificaciones no UTF-8 no se convierten; los nombres de autor pueden mostrar caracteres de reemplazo.