From fa6e23f41498927a0ec5b1bcbee79d558f88198d Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 22 Jul 2018 09:34:11 +0200
Subject: [PATCH] fix: deduplicate file matches

Closes #2299
---
 lib/workers/repository/extract/file-match.js             | 4 ++++
 .../extract/__snapshots__/file-match.spec.js.snap        | 7 +++++++
 test/workers/repository/extract/file-match.spec.js       | 9 +++++++++
 3 files changed, 20 insertions(+)

diff --git a/lib/workers/repository/extract/file-match.js b/lib/workers/repository/extract/file-match.js
index 1b9540bcc7..34f8a17baf 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 9abbb3dc65..c29ace47ac 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 8a1ace1510..65822da662 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);
+    });
   });
 });
-- 
GitLab