À propos du projet

`git-stats` est un outil en ligne de commande écrit en Rust qui analyse les informations de `git log` pour produire des statistiques agrégées de commits. Il lit directement le dépôt via `gitoxide`, une implémentation pure de git en Rust, évitant ainsi le besoin du binaire git. ## Fonctionnalités - **Statistiques agrégées** : Résume les commits par auteur, affichant le nombre de commits, fichiers modifiés, insertions, suppressions et variations nettes de lignes. - **Plages de révisions** : Prend en charge les révisions simples, les plages `A..B` et `A...B`, avec des points de terminaison spécifiés comme refs, hachages courts, `@{n}`, etc. - **Filtrage** : Limite par auteur (regex), plage de dates (`--since`, `--until`) et plage de révisions. - **Suivi des revues** : Affiche optionnellement les relecteurs/testeurs basés sur les trailers git `Acked-by`, `Tested-by` et `Reviewed-by`. - **Tri** : Trie par n'importe quelle colonne (auteur, commits, fichiers, insertions, suppressions, net) en ordre ascendant ou descendant. - **Affichage des emails** : Affiche optionnellement les adresses email des auteurs. ## Installation Installez depuis crates.io : ``` cargo install git-stats --locked ``` Ou avec `cargo-binstall` pour des binaires précompilés : ``` cargo binstall git-stats ``` Sur Arch Linux, utilisez les paquets AUR `git-stats` (source) ou `git-stats-bin` (précompilé). Avec `mise`, installez un binaire précompilé avec vérification de somme de contrôle et provenance SLSA : ``` mise use -g github:lukehsiao/git-stats ``` ## Utilisation ``` Usage : git-stats [OPTIONS] [plage-de-révisions] Arguments : [plage-de-révisions] Affiche uniquement les commits dans la plage spécifiée [défaut : HEAD] Options : -e, --email Affiche l'adresse email de chaque auteur -r, --reviews Affiche qui a relu/testé les commits basé sur les trailers git -s, --sort <SORT> Colonne de tri [défaut : commits] [valeurs possibles : author, commits, files, insertions, deletions, net] --reverse Inverse l'ordre de tri -a, --author <AUTHOR> Limite les commits à ceux correspondant à un motif regex --since <SINCE> Limite aux commits plus récents qu'une date --until <UNTIL> Limite aux commits plus anciens qu'une date -h, --help Affiche l'aide -V, --version Affiche la version ``` Exemple de sortie : ``` $ git stats -r origin..HEAD Auteur Commits Fichiers modifiés Insertions Suppressions Net Δ Luke Hsiao 67 117 +2616 -1126 +1490 dependabot[bot] 31 62 +203 -267 -64 Total 98 179 +2819 -1393 +1426 Relecteur/Testeur Commits Luke Hsiao 1 ``` ## Notes - **Plages de révisions** : Seules les formes simples sont prises en charge ; la syntaxe exotique de gitrevisions(7) n'est pas interprétée. - **Filtrage par date** : Accepte ISO 8601, RFC 2822, horodatages unix et dates relatives comme "il y a 2 semaines". Le filtrage se fait sur la date de commit. - **Correspondance d'auteur** : Correspond à l'auteur résolu par mailmap, contrairement à `git log --author` qui utilise les en-têtes bruts. - **Commits de fusion** : Comptent comme commits mais ne contribuent aucun changement de lignes/fichiers. - **Clones superficiels** : Fonctionnent, mais les statistiques peuvent différer des clones complets ; un avertissement est affiché. - **Sous-modules** : Comptés comme des fichiers modifiés uniques, avec de légères divergences par rapport à la gestion des renommages de git. - **Comptages de lignes** : Issus du moteur de diff de gitoxide, peuvent différer légèrement de git sur certains hunks. - **Dépôts SHA-256** : Non pris en charge (limitation de gitoxide). - **Encodages de commits** : Les encodages non UTF-8 ne sont pas convertis ; les noms d'auteurs peuvent afficher des caractères de remplacement.