Files
smartgit/readme.hints.md

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 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()