mirror of
https://github.com/safishamsi/graphify.git
synced 2026-07-14 03:17:28 +00:00
e8ab8f4172
A single `!` rule in .graphifyignore set a blanket `has_negation` flag that disabled directory-level pruning for EVERY ignored directory during the os.walk in detect(). One unrelated `!docs/**` therefore made the walk descend bin/, obj/, wwwroot/, generated/, … on large repos — a pathological slowdown. Output stayed correct (the per-file `_is_ignored` filter still excluded those files), but the walk visited the entire tree. The bypass was unnecessary: `_is_ignored` already honours negations correctly — last-match-wins lets `!dir/` un-ignore a directory (so it is not pruned), and the gitignore parent-exclusion rule means a `!` cannot rescue a file beneath an excluded directory, so descending an ignored dir to find a re-included file is never needed. Prune purely on `_is_noise_dir` + `_is_ignored`. Adds a regression test that tracks os.walk and asserts the ignored dir is never descended while the negation still re-includes its target. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>