From d5a06d3cd28463a71ee40415e7bfe31c4f93bcf4 Mon Sep 17 00:00:00 2001 From: Eric Rahm Date: Mon, 20 Oct 2025 14:41:33 -0700 Subject: [PATCH] fix(core): Preserve significant trailing spaces in gitignore patterns (#11536) --- .../core/src/utils/gitIgnoreParser.test.ts | 20 +++++++++++++++++++ packages/core/src/utils/gitIgnoreParser.ts | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/core/src/utils/gitIgnoreParser.test.ts b/packages/core/src/utils/gitIgnoreParser.test.ts index 95f8dbbe64..580da544fe 100644 --- a/packages/core/src/utils/gitIgnoreParser.test.ts +++ b/packages/core/src/utils/gitIgnoreParser.test.ts @@ -250,4 +250,24 @@ src/*.tmp expect(parser.isIgnored('bla/!bar')).toBe(true); }); }); + + describe('Trailing Spaces', () => { + beforeEach(async () => { + await setupGitRepo(); + }); + + it('should correctly handle significant trailing spaces', async () => { + await createTestFile('.gitignore', 'foo\\ \nbar '); + await createTestFile('foo ', 'content'); + await createTestFile('bar', 'content'); + await createTestFile('bar ', 'content'); + + // 'foo\ ' should match 'foo ' + expect(parser.isIgnored('foo ')).toBe(true); + + // 'bar ' should be trimmed to 'bar' + expect(parser.isIgnored('bar')).toBe(true); + expect(parser.isIgnored('bar ')).toBe(false); + }); + }); }); diff --git a/packages/core/src/utils/gitIgnoreParser.ts b/packages/core/src/utils/gitIgnoreParser.ts index 762015db8d..199240e69c 100644 --- a/packages/core/src/utils/gitIgnoreParser.ts +++ b/packages/core/src/utils/gitIgnoreParser.ts @@ -42,7 +42,7 @@ export class GitIgnoreParser implements GitIgnoreFilter { return content .split('\n') - .map((p) => p.trim()) + .map((p) => p.trimStart()) .filter((p) => p !== '' && !p.startsWith('#')) .map((p) => { const isNegative = p.startsWith('!');