
एक Rust CLI उपकरण जो पुनरावर्ती रूप से Git रिपॉजिटरी की खोज करता है, स्थिति परिवर्तनों को कैप्चर करता है, अंतर उत्पन्न करता है, पूर्ण स्निपेट के साथ कोड तत्वों को निकालता है, और कोड समीक्षा और ऑडिट वर्कफ़्लो के लिए सुरक्षा-केंद्रित रिपोर्ट तैयार करता है।
यदि यह परियोजना आपके काम में मदद करती है, तो चल रहे रखरखाव और नई सुविधाओं का समर्थन करें।
ETH दान वॉलेट
0x11282eE5726B3370c8B480e321b3B2aA13686582
ऊपर दिए गए QR कोड को स्कैन करें या वॉलेट पता कॉपी करें।
एक Rust CLI टूल जो Git रिपॉजिटरीज़ को पुनरावर्ती रूप से खोजता है, स्थिति परिवर्तनों को कैप्चर करता है, diffs उत्पन्न करता है, पूर्ण स्निपेट्स के साथ कोड तत्वों को निकालता है, और कोड समीक्षा एवं ऑडिट वर्कफ़्लो के लिए सुरक्षा-केंद्रित रिपोर्ट तैयार करता है।
केवल bash का उपयोग क्यों न करें?
ls | while read line; do git -C "$line" diff HEAD~1 HEAD || true; doneजैसी एक-पंक्ति केवल कच्चे diffs दिखाती है। DiffCatcher पुनरावर्ती खोज, कोड तत्व निष्कर्षण, सुरक्षा पैटर्न पहचान, CI/CD के लिए SARIF आउटपुट, समानांतर प्रसंस्करण और क्रॉस-रेपो सुरक्षा एकत्रीकरण जोड़ता है। पूर्ण तुलना के लिए नीचे पूर्ण तुलना देखें।
git clone https://github.com/Teycir/DiffCatcher.git
cd DiffCatcher
cargo build --release
./target/release/diffcatcher --help
# किसी निर्देशिका में सभी रिपॉजिटरी स्कैन करें (केवल fetch, कोई संशोधन नहीं)
diffcatcher ~/projects
# अपडेट पुल करें और सुरक्षा रिपोर्ट तैयार करें
diffcatcher ~/projects --pull -o ./report
# एकल रिपॉजिटरी में दो शाखाओं के बीच अंतर (PR समीक्षा मोड)
diffcatcher ./my-repo --diff main..feature/auth -o ./pr-report
# GitHub कोड स्कैनिंग के लिए SARIF आउटपुट तैयार करें
diffcatcher ~/projects --summary-format sarif,json -o ./report
# क्या स्कैन किया जाएगा यह देखने के लिए ड्राई रन
diffcatcher ~/projects --dry-run
# 8 समानांतर कार्यकर्ताओं के साथ तेज़ स्कैन
diffcatcher ~/projects -j 8 --quiet
# डिफ़ॉल्ट सेटिंग्स के साथ स्कैन करें (केवल fetch)
diffcatcher <ROOT_DIR>
# कस्टम आउटपुट निर्देशिका
diffcatcher ~/projects -o ./my-report
# नेस्टेड रिपॉजिटरी शामिल करें और सिमलिंक का अनुसरण करें
diffcatcher ~/projects --nested --follow-symlinks
# छिपी हुई निर्देशिकाओं को छोड़ें
diffcatcher ~/projects --skip-hidden
# केवल fetch (डिफ़ॉल्ट - कार्यरत ट्री में कोई बदलाव नहीं)
diffcatcher ~/projects
# वास्तव में परिवर्तन पुल करें
diffcatcher ~/projects --pull
# गंदी रिपॉजिटरी के लिए stash/pop के साथ फोर्स पुल
diffcatcher ~/projects --pull --force-pull
# rebase रणनीति का उपयोग करें
diffcatcher ~/projects --pull --pull-strategy rebase
# fetch/pull को पूरी तरह से छोड़ें (केवल ऐतिहासिक diffs)
diffcatcher ~/projects --no-pull
# तत्व निष्कर्षण छोड़ें (केवल कच्चे diffs)
diffcatcher ~/projects --no-summary-extraction
# तत्व निकालें लेकिन कोड स्निपेट छोड़ें
diffcatcher ~/projects --no-snippets
# स्निपेट संदर्भ और सीमाएँ समायोजित करें
diffcatcher ~/projects --snippet-context 10 --max-snippet-lines 300
# प्रति diff तत्वों को सीमित करें
diffcatcher ~/projects --max-elements 1000
# सुरक्षा टैगिंग छोड़ें
diffcatcher ~/projects --no-security-tags
# सुरक्षा विश्लेषण में परीक्षण फ़ाइलें शामिल करें
diffcatcher ~/projects --include-test-security
# कस्टम सुरक्षा पैटर्न का उपयोग करें
diffcatcher ~/projects --security-tags-file ./custom-patterns.json
DiffCatcher प्रोजेक्ट-स्थानीय कॉन्फ़िगरेशन को स्वचालित रूप से लोड कर सकता है:
<ROOT_DIR>/.diffcatcher.toml (डिफ़ॉल्ट)--config <FILE> के माध्यम से एक कस्टम फ़ाइल--no-config के साथ अक्षमउदाहरण:
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"]
CLI फ़्लैग अभी भी स्पष्ट रूप से सेट होने पर कॉन्फ़िग मानों को ओवरराइड करते हैं।
DiffCatcher दो प्रकार के प्लगइन का समर्थन करता है:
--security-plugin-file <FILE> (दोहराने योग्य) के माध्यम से--extractor-plugin-file <FILE> (दोहराने योग्य) के माध्यम सेसुरक्षा प्लगइन प्रारूप --security-tags-file JSON (version, mode, tags) से मेल खाता है।
एक्सट्रैक्टर प्लगइन प्रारूप:
{
"version": 1,
"extractors": [
{
"name": "policy-rule",
"kind": "Config",
"regex": "^policy\\s+([A-Za-z_][A-Za-z0-9_]*)"
}
]
}
# एकल रिपॉजिटरी में दो शाखाओं के बीच अंतर
diffcatcher ./my-repo --diff main..feature/auth
# विशिष्ट कमिट के बीच अंतर
diffcatcher ./my-repo --diff abc123..def456
# CI एकीकरण के लिए SARIF आउटपुट के साथ अंतर
diffcatcher ./my-repo --diff origin/main..HEAD --summary-format sarif -o ./pr-report
--diff BASE..HEAD फ़्लैग रिपॉजिटरी खोज और fetch/pull को छोड़ देता है — यह सीधे दो refs (शाखाएँ, टैग, या कमिट SHA) के बीच अंतर करता है और परिणाम पर पूर्ण निष्कर्षण + सुरक्षा टैगिंग पाइपलाइन चलाता है।
# अन्य प्रारूपों के साथ SARIF तैयार करें
diffcatcher ~/projects --summary-format sarif,json,md
# CI/CD अपलोड के लिए केवल SARIF
diffcatcher ~/projects --summary-format sarif -o ./report
जब --summary-format में sarif शामिल होता है, तो रिपोर्ट रूट में एक results.sarif फ़ाइल लिखी जाती है। यह फ़ाइल SARIF 2.1.0 मानक का पालन करती है और GitHub कोड स्कैनिंग, VS Code SARIF व्यूअर, Azure DevOps और अन्य SARIF-संगत टूल के साथ एकीकृत होती है।
# वृद्धिशील मोड (अपरिवर्तित रिपॉजिटरी को छोड़ें)
diffcatcher ~/projects --incremental -o ./report
# शाखा पैटर्न द्वारा फ़िल्टर करें
diffcatcher ~/projects --branch-filter "main"
# इतिहास गहराई समायोजित करें
diffcatcher ~/projects --history-depth 5
# CI/CD के लिए JSON आउटपुट
diffcatcher ~/projects --quiet --json > result.json
# खोजे गए पथों के साथ विस्तृत आउटपुट
diffcatcher ~/projects --verbose
<report_dir>/
├── summary.json # वैश्विक सारांश
├── summary.md # Markdown सारांश
├── results.sarif # SARIF 2.1.0 आउटपुट (जब --summary-format sarif)
├── security_overview.json # क्रॉस-रेपो सुरक्षा एकत्रीकरण
├── security_overview.md
├── <repo-name>/
│ ├── status.json # रिपॉजिटरी स्थिति
│ ├── pull_log.txt
│ └── diffs/
│ ├── diff_N_vs_N-1.patch # कच्चा एकीकृत diff
│ ├── changes_N_vs_N-1.txt # फ़ाइल मैनिफ़ेस्ट
│ ├── summary_N_vs_N-1.json # तत्व निष्कर्षण
│ ├── summary_N_vs_N-1.md
│ └── snippets/
│ ├── 001_validate_token_ADDED.rs
│ ├── 002_check_permissions_BEFORE.rs
│ ├── 002_check_permissions_AFTER.rs
│ └── 002_check_permissions.diff
└── ...
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
-o, --output | ./reports/<timestamp> | रिपोर्ट आउटपुट निर्देशिका |
-j, --parallel | 4 | समवर्ती रिपॉजिटरी प्रसंस्करण |
-t, --timeout | 120 | Git संचालन टाइमआउट (सेकंड) |
-d, --history-depth | 2 | diffs के लिए ऐतिहासिक कमिट |
--snippet-context | 5 | परिवर्तनों के आसपास संदर्भ पंक्तियाँ |
--max-snippet-lines | 200 | प्रति स्निपेट अधिकतम पंक्तियाँ |
--max-elements | 500 | प्रति diff अधिकतम तत्व |
--diff | — | एकल रिपॉजिटरी में दो refs के बीच अंतर (BASE..HEAD) |
--summary-format | json,md | आउटपुट प्रारूप: json, md, txt, sarif |
सभी विकल्पों के लिए diffcatcher --help देखें।
कस्टम पैटर्न के साथ एक JSON फ़ाइल बनाएं:
{
"version": 1,
"mode": "extend",
"tags": [
{
"tag": "pii-handling",
"description": "PII डेटा प्रसंस्करण",
"severity": "High",
"patterns": ["ssn", "social_security", "passport"]
}
]
}
--security-tags-file ./patterns.json के साथ उपयोग करें
src/
├── cli.rs # तर्क पार्सिंग
├── scanner.rs # रिपॉजिटरी खोज
├── git/ # Git संचालन
│ ├── commands.rs # Git रैपर
│ ├── state.rs # स्थिति कैप्चर
│ ├── diff.rs # Diff पीढ़ी
│ └── file_retrieval.rs
├── extraction/ # तत्व निष्कर्षण
│ ├── parser.rs # एकीकृत diff पार्सर
│ ├── elements.rs # तत्व पहचान
│ ├── snippets.rs # कोड स्निपेट निष्कर्षण
│ ├── boundary.rs # ब्रैकेट/इंडेंटेशन ट्रैकिंग
│ └── languages/ # भाषा-विशिष्ट पैटर्न
├── security/ # सुरक्षा टैगिंग
│ ├── tagger.rs # पैटर्न मिलान
│ ├── patterns.rs # अंतर्निहित पैटर्न
│ └── overview.rs # क्रॉस-रेपो एकत्रीकरण
└── report/ # रिपोर्ट पीढ़ी
├── writer.rs # निर्देशिका संरचना
├── json.rs # JSON क्रमांकन
├── sarif.rs # SARIF 2.1.0 आउटपुट
├── markdown.rs # Markdown स्वरूपण
└── snippet_writer.rs
एक सरल bash एक-पंक्ति diffs को सूचीबद्ध कर सकती है:
ls | while read line; do git -C "$line" diff HEAD~1 HEAD || true; done
यह त्वरित जाँच के लिए काम करता है, लेकिन DiffCatcher महत्वपूर्ण क्षमताएँ जोड़ता है:
| क्षमता | Bash एक-पंक्ति | DiffCatcher |
|---|---|---|
| पुनरावर्ती खोज | केवल शीर्ष-स्तरीय आइटम | नेस्टेड रिपॉजिटरी, सिमलिंक, फ़िल्टर |
| स्थिति ट्रैकिंग | कोई नहीं | कमिट हैश, गंदगी जाँच, पुल लॉग |
| कोड समझ | केवल कच्चा diff | 10+ भाषाओं में फ़ंक्शन/struct/वर्ग निकालता है |
| कोड स्निपेट | कोई नहीं | संदर्भ विंडो के साथ पूर्ण पहले/बाद का कोड |
| सुरक्षा विश्लेषण | कोई नहीं | 18 अंतर्निहित पैटर्न (प्रमाणीकरण, क्रिप्टो, रहस्य, SQLi, XSS) |
| आउटपुट प्रारूप | केवल टर्मिनल | JSON, Markdown, SARIF (GitHub कोड स्कैनिंग) |
| क्रॉस-रेपो दृश्य | प्रति-रेपो | सभी रिपॉजिटरी में एकत्रित सुरक्षा रिपोर्ट |
| प्रदर्शन | क्रमिक | समानांतर कार्यकर्ता, LRU कैशिंग, वृद्धिशील मोड |
| CI/CD एकीकरण | कोई नहीं | GitHub/Azure DevOps पर SARIF अपलोड |
| त्रुटि प्रबंधन | ` | |
| पथ प्रबंधन | स्पेस पर विफल | सभी पथ नामों को सही ढंग से संभालता है |
| ऐतिहासिक संदर्भ | निश्चित HEAD~1 | कॉन्फ़िगरेबल गहराई, स्थिति ट्रैकिंग |
bash एक-पंक्ति लगभग 100 बाइट्स है। DiffCatcher पूर्ण कोड तत्व निष्कर्षण वाला एक सुरक्षा-केंद्रित ऑडिट टूल है।
# सभी परीक्षण चलाएँ
cargo test
# विशिष्ट परीक्षण सूट चलाएँ
cargo test security_tagger
# आउटपुट के साथ चलाएँ
cargo test -- --nocapture
परीक्षण कवरेज में शामिल हैं:
# बेंचमार्क बायनेरिज़ संकलित करें
cargo bench --no-run
# बेंचमार्क हार्नेस चलाएँ
cargo bench --bench core_bench
बेंचमार्क स्रोत benches/core_bench.rs में रहता है और पार्सर/निष्कर्षण थ्रूपुट को ट्रैक करता है।
GitHub Actions वर्कफ़्लो शामिल हैं:
.github/workflows/ci.yml: फ़ॉर्मेट जाँच, clippy, परीक्षण, बेंच बिल्ड.github/workflows/release.yml: टैग-आधारित रिलीज़ पैकेजिंग और GitHub रिलीज़ प्रकाशनsrc/security/patterns.rs देखें)सभी मॉड्यूल में व्यापक इनलाइन दस्तावेज़ीकरण शामिल है। मुख्य मॉड्यूल:
src/extraction/parser.rs - हंक निष्कर्षण के साथ एकीकृत diff पार्सरsrc/extraction/elements.rs - भाषा-जागरूक कोड तत्व पहचानsrc/extraction/snippets.rs - सीमा पहचान के साथ पूर्ण कोड स्निपेट निष्कर्षणsrc/security/tagger.rs - सुरक्षा पैटर्न मिलान इंजनsrc/git/commands.rs - Git संचालन रैपरपूर्ण API दस्तावेज़ तैयार करें:
cargo doc --open
#rust #git #security #code-review #diff-analysis #static-analysis #devops #cli-tool #audit #vulnerability-detection #code-quality #snippet-extraction #parallel-processing #security-scanning
योगदान का स्वागत है! कृपया:
cargo test पास होMIT लाइसेंस - विवरण के लिए LICENSE फ़ाइल देखें