1.4 KiB
1.4 KiB
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 toghost_local/versions/5.129.1causes all 1,880+ files inside to be reported as changes
Solution Implemented:
-
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.
-
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.tslines 153-209
Dependencies Added:
minimatchfor glob pattern support in excludeFiles parameter
Architecture Notes
- Main class:
Smartgit(notSmartGit- lowercase 'g') - Must call
await smartgit.init()before use - Repository methods:
createRepoByOpen(),createRepoByClone(),createRepoByInit()