Un outil CLI Rust qui découvre récursivement les dépôts Git, capture les changements d'état, génère des diffs, extrait des éléments de code avec des extraits complets, et produit des rapports axés sur la sécurité pour les workflows de revue de code et d'audit.
Si ce projet vous aide dans votre travail, soutenez sa maintenance continue et ses nouvelles fonctionnalités.
Portefeuille de dons ETH
0x11282eE5726B3370c8B480e321b3B2aA13686582
Scannez le code QR ou copiez l'adresse du portefeuille ci-dessus.
Un outil CLI en Rust qui découvre récursivement les dépôts Git, capture les changements d'état, génère des diffs, extrait des éléments de code avec des extraits complets et produit des rapports axés sur la sécurité pour les workflows de révision de code et d'audit.
Pourquoi ne pas simplement utiliser bash ?
Une ligne de commande comme
ls | while read line; do git -C "$line" diff HEAD~1 HEAD || true; donen'affiche que les diffs bruts. DiffCatcher ajoute la découverte récursive, l'extraction d'éléments de code, la détection de motifs de sécurité, la sortie SARIF pour CI/CD, le traitement parallèle et l'agrégation de sécurité inter-dépôts. Voir la comparaison complète ci-dessous.
git clone https://github.com/Teycir/DiffCatcher.git
cd DiffCatcher
cargo build --release
./target/release/diffcatcher --help
# Analyser tous les dépôts dans un répertoire (fetch uniquement, aucune modification)
diffcatcher ~/projects
# Récupérer les mises à jour et générer un rapport de sécurité
diffcatcher ~/projects --pull -o ./report
# Différencier deux branches dans un seul dépôt (mode revue de PR)
diffcatcher ./my-repo --diff main..feature/auth -o ./pr-report
# Générer une sortie SARIF pour GitHub Code Scanning
diffcatcher ~/projects --summary-format sarif,json -o ./report
# Simulation pour voir ce qui serait analysé
diffcatcher ~/projects --dry-run
# Analyse rapide avec 8 workers en parallèle
diffcatcher ~/projects -j 8 --quiet
# Analyser avec les paramètres par défaut (fetch uniquement)
diffcatcher <ROOT_DIR>
# Répertoire de sortie personnalisé
diffcatcher ~/projects -o ./my-report
# Inclure les dépôts imbriqués et suivre les liens symboliques
diffcatcher ~/projects --nested --follow-symlinks
# Ignorer les répertoires cachés
diffcatcher ~/projects --skip-hidden
# Fetch uniquement (par défaut - aucune modification de l'arbre de travail)
diffcatcher ~/projects
# Effectuer effectivement un pull des changements
diffcatcher ~/projects --pull
# Forcer le pull avec stash/pop pour les dépôts modifiés
diffcatcher ~/projects --pull --force-pull
# Utiliser la stratégie rebase
diffcatcher ~/projects --pull --pull-strategy rebase
# Ignorer complètement le fetch/pull (diffs historiques uniquement)
diffcatcher ~/projects --no-pull
# Ignorer l'extraction d'éléments (diffs bruts uniquement)
diffcatcher ~/projects --no-summary-extraction
# Extraire les éléments mais ignorer les extraits de code
diffcatcher ~/projects --no-snippets
# Ajuster le contexte et les limites des extraits
diffcatcher ~/projects --snippet-context 10 --max-snippet-lines 300
# Limiter les éléments par diff
diffcatcher ~/projects --max-elements 1000
# Ignorer le marquage de sécurité
diffcatcher ~/projects --no-security-tags
# Inclure les fichiers de test dans l'analyse de sécurité
diffcatcher ~/projects --include-test-security
# Utiliser des motifs de sécurité personnalisés
diffcatcher ~/projects --security-tags-file ./custom-patterns.json
DiffCatcher peut charger automatiquement une configuration locale au projet depuis :
<ROOT_DIR>/.diffcatcher.toml (par défaut)--config <FILE>--no-configExemple :
output = "reports-local"
no_pull = true
history_depth = 2
summary_formats = ["json", "txt"]
no_security_tags = false
[plugins]
security_pattern_files = ["plugins/security-extra.json"]
extractor_files = ["plugins/extractors.json"]
Les options de ligne de commande ont toujours priorité sur les valeurs du fichier de configuration lorsqu'elles sont explicitement définies.
DiffCatcher prend en charge deux types de plugins :
--security-plugin-file <FILE> (répétable)--extractor-plugin-file <FILE> (répétable)Le format du plugin de sécurité correspond au JSON de --security-tags-file (version, mode, tags).
Format du plugin d'extraction :
{
"version": 1,
"extractors": [
{
"name": "policy-rule",
"kind": "Config",
"regex": "^policy\\s+([A-Za-z_][A-Za-z0-9_]*)"
}
]
}
# Différencier deux branches dans un seul dépôt
diffcatcher ./my-repo --diff main..feature/auth
# Différencier des commits spécifiques
diffcatcher ./my-repo --diff abc123..def456
# Différencier avec sortie SARIF pour intégration CI
diffcatcher ./my-repo --diff origin/main..HEAD --summary-format sarif -o ./pr-report