From 85e7cef04874dca6d274ea5a29e8eb2dc4a69cc4 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 3 May 2020 14:46:30 +0200
Subject: [PATCH] refactor: getMatchingFiles

---
 .../repository/extract/file-match.spec.ts     | 24 ++++++++++--------
 lib/workers/repository/extract/file-match.ts  | 25 ++++++++++++++++---
 .../repository/extract/manager-files.spec.ts  |  6 ++---
 .../repository/extract/manager-files.ts       | 14 +++--------
 4 files changed, 41 insertions(+), 28 deletions(-)

diff --git a/lib/workers/repository/extract/file-match.spec.ts b/lib/workers/repository/extract/file-match.spec.ts
index 718ab8ecee..d4d8424d68 100644
--- a/lib/workers/repository/extract/file-match.spec.ts
+++ b/lib/workers/repository/extract/file-match.spec.ts
@@ -1,3 +1,4 @@
+import { RenovateConfig, platform } from '../../../../test/util';
 import * as fileMatch from './file-match';
 
 describe('workers/repository/extract/file-match', () => {
@@ -39,20 +40,23 @@ describe('workers/repository/extract/file-match', () => {
     });
   });
   describe('getMatchingFiles()', () => {
-    it('returns npm files', () => {
+    const config: RenovateConfig = {
+      includePaths: [],
+      ignoredPaths: [],
+      manager: 'npm',
+      fileMatch: ['(^|/)package.json$'],
+    };
+    it('returns npm files', async () => {
+      platform.getFileList.mockResolvedValue(fileList);
       fileList.push('Dockerfile');
-      const res = fileMatch.getMatchingFiles(fileList, 'npm', [
-        '(^|/)package.json$',
-      ]);
+      const res = await fileMatch.getMatchingFiles(config);
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
     });
-    it('deduplicates', () => {
-      fileList.push('Dockerfile');
-      const res = fileMatch.getMatchingFiles(fileList, 'npm', [
-        '(^|/)package.json$',
-        'package.json',
-      ]);
+    it('deduplicates', async () => {
+      platform.getFileList.mockResolvedValue(fileList);
+      config.fileMatch.push('package.json');
+      const res = await fileMatch.getMatchingFiles(config);
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
     });
diff --git a/lib/workers/repository/extract/file-match.ts b/lib/workers/repository/extract/file-match.ts
index 08bc468e94..04e6ee64f0 100644
--- a/lib/workers/repository/extract/file-match.ts
+++ b/lib/workers/repository/extract/file-match.ts
@@ -1,5 +1,7 @@
 import minimatch from 'minimatch';
+import { RenovateConfig } from '../../../config/common';
 import { logger } from '../../../logger';
+import { platform } from '../../../platform';
 
 export function getIncludedFiles(
   fileList: string[],
@@ -33,11 +35,26 @@ export function filterIgnoredFiles(
   );
 }
 
-export function getMatchingFiles(
-  fileList: string[],
-  manager: string,
-  fileMatch: string[]
+export function getFileList(): Promise<string[]> {
+  return platform.getFileList();
+}
+
+export function getFilteredFileList(
+  config: RenovateConfig,
+  fileList: string[]
 ): string[] {
+  const { includePaths, ignorePaths } = config;
+  let filteredList = getIncludedFiles(fileList, includePaths);
+  filteredList = filterIgnoredFiles(filteredList, ignorePaths);
+  return filteredList;
+}
+
+export async function getMatchingFiles(
+  config: RenovateConfig
+): Promise<string[]> {
+  const allFiles = await getFileList();
+  const fileList = getFilteredFileList(config, allFiles);
+  const { fileMatch, manager } = config;
   let matchedFiles = [];
   for (const match of fileMatch) {
     logger.debug(`Using file match: ${match} for manager ${manager}`);
diff --git a/lib/workers/repository/extract/manager-files.spec.ts b/lib/workers/repository/extract/manager-files.spec.ts
index d512eac0c2..cec003431a 100644
--- a/lib/workers/repository/extract/manager-files.spec.ts
+++ b/lib/workers/repository/extract/manager-files.spec.ts
@@ -33,13 +33,13 @@ describe('workers/repository/extract/manager-files', () => {
     });
     it('skips files if null content returned', async () => {
       const managerConfig = { manager: 'npm', enabled: true };
-      fileMatch.getMatchingFiles.mockReturnValue(['package.json']);
+      fileMatch.getMatchingFiles.mockResolvedValue(['package.json']);
       const res = await getManagerPackageFiles(managerConfig);
       expect(res).toHaveLength(0);
     });
     it('returns files with extractPackageFile', async () => {
       const managerConfig = { manager: 'html', enabled: true };
-      fileMatch.getMatchingFiles.mockReturnValue(['Dockerfile']);
+      fileMatch.getMatchingFiles.mockResolvedValue(['Dockerfile']);
       fs.readLocalFile.mockResolvedValueOnce('some content');
       html.extractPackageFile = jest.fn(() => ({
         deps: [{}, { replaceString: 'abc' }],
@@ -49,7 +49,7 @@ describe('workers/repository/extract/manager-files', () => {
     });
     it('returns files with extractAllPackageFiles', async () => {
       const managerConfig = { manager: 'npm', enabled: true };
-      fileMatch.getMatchingFiles.mockReturnValue(['package.json']);
+      fileMatch.getMatchingFiles.mockResolvedValue(['package.json']);
       fs.readLocalFile.mockResolvedValueOnce(
         '{"dependencies":{"chalk":"2.0.0"}}'
       );
diff --git a/lib/workers/repository/extract/manager-files.ts b/lib/workers/repository/extract/manager-files.ts
index 61ef25c097..fb6260e184 100644
--- a/lib/workers/repository/extract/manager-files.ts
+++ b/lib/workers/repository/extract/manager-files.ts
@@ -7,27 +7,19 @@ import {
   get,
 } from '../../../manager';
 import { PackageFile } from '../../../manager/common';
-import { platform } from '../../../platform';
 import { readLocalFile } from '../../../util/fs';
-import {
-  filterIgnoredFiles,
-  getIncludedFiles,
-  getMatchingFiles,
-} from './file-match';
+import { getMatchingFiles } from './file-match';
 
 export async function getManagerPackageFiles(
   config: RenovateConfig
 ): Promise<PackageFile[]> {
-  const { manager, enabled, includePaths, ignorePaths } = config;
+  const { manager, enabled } = config;
   logger.trace(`getPackageFiles(${manager})`);
   if (!enabled) {
     logger.debug(`${manager} is disabled`);
     return [];
   }
-  let fileList = await platform.getFileList();
-  fileList = getIncludedFiles(fileList, includePaths);
-  fileList = filterIgnoredFiles(fileList, ignorePaths);
-  const matchedFiles = getMatchingFiles(fileList, manager, config.fileMatch);
+  const matchedFiles = await getMatchingFiles(config);
   // istanbul ignore else
   if (is.nonEmptyArray(matchedFiles)) {
     logger.debug(
-- 
GitLab