diff --git a/src/lib/ownership/OwnershipEngine.test.ts b/src/lib/ownership/OwnershipEngine.test.ts index 3e5d6ee..e2c6b92 100644 --- a/src/lib/ownership/OwnershipEngine.test.ts +++ b/src/lib/ownership/OwnershipEngine.test.ts @@ -158,6 +158,17 @@ describe('OwnershipEngine', () => { expect(() => OwnershipEngine.FromCodeownersFile('some/codeowners/file')) .toThrowError(expectedError); }); + + it('ignore trailing whitespace', () => { + // Arrange + const codeowners = 'some/file @org/owners '; + + readFileSyncMock.mockReturnValue(Buffer.from(codeowners)); + + // Assert + expect(() => OwnershipEngine.FromCodeownersFile('some/codeowners/file')) + .not.toThrow(); + }); }); describe.each(patterns)('$name: "$pattern"', ({ name, pattern, paths }) => { diff --git a/src/lib/ownership/OwnershipEngine.ts b/src/lib/ownership/OwnershipEngine.ts index 6c15022..87599fe 100644 --- a/src/lib/ownership/OwnershipEngine.ts +++ b/src/lib/ownership/OwnershipEngine.ts @@ -63,7 +63,7 @@ export class OwnershipEngine { const createMatcherCodeownersRule = (rule: string): FileOwnershipMatcher => { // Split apart on spaces - const parts = rule.split(/\s+/); + const parts = rule.split(/\s+/).filter(Boolean); // The first part is expected to be the path const path = parts[0];