fix: filter out gitignore negation patterns to prevent excluding all files#1
Open
zlegein wants to merge 1 commit intoCSCSoftware:masterfrom
Open
fix: filter out gitignore negation patterns to prevent excluding all files#1zlegein wants to merge 1 commit intoCSCSoftware:masterfrom
zlegein wants to merge 1 commit intoCSCSoftware:masterfrom
Conversation
…files Negation patterns in .gitignore (lines starting with !) were being passed through to minimatch, which caused them to match ALL files instead of being ignored. For example, `!.vscode/settings.json` would match every file path because minimatch interprets the leading `!` as "NOT this pattern". This caused the entire index to be purged after initialization in projects with negation patterns in their .gitignore (common in monorepos). The fix filters out negation patterns in readGitignore() since they are meant to un-ignore files, not to add exclusion patterns. Made-with: Cursor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Negation patterns in .gitignore (lines starting with !) were being passed through to minimatch, which caused them to match ALL files instead of being ignored. For example,
!.vscode/settings.jsonwould match every file path because minimatch interprets the leading!as "NOT this pattern".This caused the entire index to be purged after initialization in projects with negation patterns in their .gitignore (common in monorepos).
The fix filters out negation patterns in readGitignore() since they are meant to un-ignore files, not to add exclusion patterns.
Problem
When a project's
.gitignorecontains negation patterns (lines starting with!), AiDex incorrectly excludes all indexed files after initialization.For example, a
.gitignorewith:.vscode/* !.vscode/settings.json !.vscode/tasks.json
Causes the patterns
!.vscode/settings.jsonto be passed tominimatch(). Since!at the start of a pattern means "NOT this pattern", these patterns match every file that isn't.vscode/settings.json— effectively matching all source files.Reproduction
.gitignore(common in monorepos)aidex init .Root Cause
readGitignore()insrc/commands/init.tsdoesn't filter out negation patterns. These patterns are then used in the post-indexing cleanup phase, whereminimatch(filePath, '!.vscode/settings.json', { dot: true })returnstruefor any path that isn't.vscode/settings.json.Solution
Filter out negation patterns in
readGitignore()since they are meant to un-ignore files, not to add exclusion patterns: