139 lines
3.1 KiB
Markdown
139 lines
3.1 KiB
Markdown
# Operation: Analyze Splitting
|
|
|
|
Determine if current changes should be split into multiple commits.
|
|
|
|
## Parameters from $ARGUMENTS
|
|
|
|
- `verbose:true|false` - Detailed analysis output (default: false)
|
|
- `threshold:number` - File count threshold for splitting (default: 10)
|
|
|
|
## Workflow
|
|
|
|
### Step 1: Get Current Changes
|
|
|
|
Invoke Bash to get git status and diff:
|
|
```bash
|
|
git status --porcelain
|
|
git diff --cached --stat
|
|
git diff --cached --numstat
|
|
```
|
|
|
|
Capture:
|
|
- List of modified files
|
|
- Number of files changed
|
|
- Additions/deletions per file
|
|
|
|
### Step 2: Run Split Analyzer
|
|
|
|
Execute the split analyzer script:
|
|
```bash
|
|
.claude/plugins/git-commit-assistant/commands/atomic-commit/.scripts/split-analyzer.py
|
|
```
|
|
|
|
The script analyzes:
|
|
1. **Type diversity**: Multiple commit types (feat, fix, docs, etc.)
|
|
2. **Scope diversity**: Multiple modules/components affected
|
|
3. **File count**: Too many files changed
|
|
4. **Concern separation**: Mixed concerns in changes
|
|
|
|
### Step 3: Analyze Results
|
|
|
|
Parse analyzer output to determine:
|
|
|
|
**Should Split if:**
|
|
- Multiple commit types detected (feat + fix + docs)
|
|
- Multiple scopes detected (auth + api + ui)
|
|
- File count exceeds threshold (>10 files)
|
|
- Mixed concerns detected (feature + unrelated refactoring)
|
|
|
|
**Keep Together if:**
|
|
- Single logical change
|
|
- All files serve same purpose
|
|
- Interdependent changes
|
|
- Reasonable file count (≤10)
|
|
|
|
### Step 4: Generate Recommendation
|
|
|
|
Create actionable recommendation:
|
|
|
|
**If should split:**
|
|
```
|
|
🔀 SPLIT RECOMMENDED
|
|
|
|
Reason: Multiple types detected (feat, fix, docs)
|
|
Files affected: 15
|
|
Detected types: feat (8 files), fix (5 files), docs (2 files)
|
|
|
|
Recommendation: Split into 3 commits
|
|
- Commit 1: feat changes (8 files)
|
|
- Commit 2: fix changes (5 files)
|
|
- Commit 3: docs changes (2 files)
|
|
|
|
Next steps:
|
|
1. Run: /atomic-commit group strategy:type
|
|
2. Review groupings
|
|
3. Run: /atomic-commit suggest
|
|
```
|
|
|
|
**If already atomic:**
|
|
```
|
|
✅ ATOMIC COMMIT
|
|
|
|
Changes represent single logical unit:
|
|
- Single type: feat
|
|
- Single scope: auth
|
|
- File count: 5 files
|
|
- Logically cohesive: OAuth implementation
|
|
|
|
No splitting needed. Proceed with commit.
|
|
```
|
|
|
|
## Output Format
|
|
|
|
Return structured analysis:
|
|
```yaml
|
|
should_split: true|false
|
|
reason: "Primary reason for recommendation"
|
|
metrics:
|
|
file_count: number
|
|
types_detected: [list]
|
|
scopes_detected: [list]
|
|
concerns: [list]
|
|
recommendation: "Action to take"
|
|
next_steps: [ordered list of commands]
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
- **No changes**: "No staged or unstaged changes detected. Make changes first."
|
|
- **Script failure**: "Analysis failed. Check git repository status."
|
|
- **Invalid parameters**: "Invalid parameter. Use verbose:true or threshold:number"
|
|
|
|
## MCP Tool Integration
|
|
|
|
Use workspace-mcp for script execution:
|
|
- Spawn isolated workspace if needed
|
|
- Execute analyzer script
|
|
- Parse and return results
|
|
- Clean up temporary files
|
|
|
|
## Examples
|
|
|
|
**Example 1: Large feature**
|
|
```bash
|
|
/atomic-commit analyze
|
|
→ Should split: 15 files, multiple types
|
|
```
|
|
|
|
**Example 2: Bug fix**
|
|
```bash
|
|
/atomic-commit analyze verbose:true
|
|
→ Atomic: 3 files, single fix
|
|
```
|
|
|
|
**Example 3: Custom threshold**
|
|
```bash
|
|
/atomic-commit analyze threshold:5
|
|
→ Should split: 8 files exceeds threshold
|
|
```
|