diff --git a/lib/workers/repository/extract/file-match.js b/lib/workers/repository/extract/file-match.js index 1b9540bcc7add08300e073e3a5cc2c466a9fb4f0..34f8a17bafb40ce8e0e5b1950a3f77bb16dca800 100644 --- a/lib/workers/repository/extract/file-match.js +++ b/lib/workers/repository/extract/file-match.js @@ -37,5 +37,9 @@ function getMatchingFiles(fileList, manager, fileMatch) { fileList.filter(file => file.match(new RegExp(match))) ); } + // filter out duplicates + matchedFiles = matchedFiles.filter( + (item, pos) => matchedFiles.indexOf(item) === pos + ); return matchedFiles; } diff --git a/test/workers/repository/extract/__snapshots__/file-match.spec.js.snap b/test/workers/repository/extract/__snapshots__/file-match.spec.js.snap index 9abbb3dc652385cd1359453a2181dd36abaf3652..c29ace47acfde1b3ae50af53de05cab8557d9747 100644 --- a/test/workers/repository/extract/__snapshots__/file-match.spec.js.snap +++ b/test/workers/repository/extract/__snapshots__/file-match.spec.js.snap @@ -24,6 +24,13 @@ Array [ ] `; +exports[`workers/repository/extract/file-match getMatchingFiles() deduplicates 1`] = ` +Array [ + "package.json", + "frontend/package.json", +] +`; + exports[`workers/repository/extract/file-match getMatchingFiles() returns npm files 1`] = ` Array [ "package.json", diff --git a/test/workers/repository/extract/file-match.spec.js b/test/workers/repository/extract/file-match.spec.js index 8a1ace151080133cfd741525db4296b4784dcb20..65822da6622a7ddbe92ff71a43a9082100e19036 100644 --- a/test/workers/repository/extract/file-match.spec.js +++ b/test/workers/repository/extract/file-match.spec.js @@ -47,5 +47,14 @@ describe('workers/repository/extract/file-match', () => { expect(res).toMatchSnapshot(); expect(res).toHaveLength(2); }); + it('deduplicates', () => { + fileList.push('Dockerfile'); + const res = fileMatch.getMatchingFiles(fileList, 'npm', [ + '(^|/)package.json$', + 'package.json', + ]); + expect(res).toMatchSnapshot(); + expect(res).toHaveLength(2); + }); }); });