fix(getUncommittedDiff): Avoid false-positive diffs in getUncommittedDiff by detecting symlinked directories and skipping identical files
This commit is contained in:
+32
-1
@@ -1 +1,32 @@
|
||||
|
||||
# smartgit Project Hints
|
||||
|
||||
## Recent Fixes
|
||||
|
||||
### getUncommittedDiff() False Positives Fix (2025-11-04)
|
||||
|
||||
**Problem**:
|
||||
- Method was reporting 1,883 diffs when only 1-2 files were actually modified
|
||||
- Root cause: isomorphic-git's `statusMatrix()` reports files inside symlinked directories as "added" files
|
||||
- Example: `ghost_local/current` → symlink to `ghost_local/versions/5.129.1` causes all 1,880+ files inside to be reported as changes
|
||||
|
||||
**Solution Implemented**:
|
||||
1. **Symlink detection** (lines 160-184): For files reported as "added" (head=0, workdir≠0), try to read from HEAD anyway. If we get error "anticipated to be a tree but it is a blob", the parent path is a symlink - skip the file entirely.
|
||||
|
||||
2. **Content comparison** (lines 196-200): Before creating any diff, check if `headContent === workdirContent`. If identical, skip (catches permission/timestamp/line-ending false positives).
|
||||
|
||||
**Results**:
|
||||
- Reduced false positives from 1,883 → 2 files (99.89% reduction)
|
||||
- Output size: 59 MB → 2 KB (29,500x reduction)
|
||||
- Only reports actual content changes
|
||||
|
||||
**Files Modified**:
|
||||
- `ts/smartgit.classes.gitrepo.ts` lines 153-209
|
||||
|
||||
**Dependencies Added**:
|
||||
- `minimatch` for glob pattern support in excludeFiles parameter
|
||||
|
||||
## Architecture Notes
|
||||
|
||||
- Main class: `Smartgit` (not `SmartGit` - lowercase 'g')
|
||||
- Must call `await smartgit.init()` before use
|
||||
- Repository methods: `createRepoByOpen()`, `createRepoByClone()`, `createRepoByInit()`
|
||||
|
||||
Reference in New Issue
Block a user