From 8ab6d6076ae6cdf72d74d42435b17c02b8dc22e3 Mon Sep 17 00:00:00 2001
From: Sergio Zharinov <zharinov@users.noreply.github.com>
Date: Wed, 30 Sep 2020 10:40:19 +0400
Subject: [PATCH] refactor(workers): Extract 'getFileList' call outside of
 match loop (#7349)

---
 lib/workers/repository/extract/file-match.spec.ts    | 12 +++++-------
 lib/workers/repository/extract/file-match.ts         |  9 ++++-----
 lib/workers/repository/extract/index.ts              |  9 ++++++---
 lib/workers/repository/extract/manager-files.spec.ts |  6 +++---
 4 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/lib/workers/repository/extract/file-match.spec.ts b/lib/workers/repository/extract/file-match.spec.ts
index cef8ce0b55..f9b100a59d 100644
--- a/lib/workers/repository/extract/file-match.spec.ts
+++ b/lib/workers/repository/extract/file-match.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, git } from '../../../../test/util';
+import { RenovateConfig } from '../../../../test/util';
 import * as fileMatch from './file-match';
 
 jest.mock('../../../util/git');
@@ -48,17 +48,15 @@ describe('workers/repository/extract/file-match', () => {
       manager: 'npm',
       fileMatch: ['(^|/)package.json$'],
     };
-    it('returns npm files', async () => {
-      git.getFileList.mockResolvedValue(fileList);
+    it('returns npm files', () => {
       fileList.push('Dockerfile');
-      const res = await fileMatch.getMatchingFiles(config);
+      const res = fileMatch.getMatchingFiles(config, fileList);
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
     });
-    it('deduplicates', async () => {
-      git.getFileList.mockResolvedValue(fileList);
+    it('deduplicates', () => {
       config.fileMatch.push('package.json');
-      const res = await fileMatch.getMatchingFiles(config);
+      const res = fileMatch.getMatchingFiles(config, fileList);
       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 0c4f1234cc..823910edea 100644
--- a/lib/workers/repository/extract/file-match.ts
+++ b/lib/workers/repository/extract/file-match.ts
@@ -1,7 +1,6 @@
 import minimatch from 'minimatch';
 import { RenovateConfig } from '../../../config/common';
 import { logger } from '../../../logger';
-import { getFileList } from '../../../util/git';
 import { regEx } from '../../../util/regex';
 
 export function getIncludedFiles(
@@ -46,10 +45,10 @@ export function getFilteredFileList(
   return filteredList;
 }
 
-export async function getMatchingFiles(
-  config: RenovateConfig
-): Promise<string[]> {
-  const allFiles = await getFileList();
+export function getMatchingFiles(
+  config: RenovateConfig,
+  allFiles: string[]
+): string[] {
   const fileList = getFilteredFileList(config, allFiles);
   const { fileMatch, manager } = config;
   let matchedFiles: string[] = [];
diff --git a/lib/workers/repository/extract/index.ts b/lib/workers/repository/extract/index.ts
index 91302fd00b..b094b00708 100644
--- a/lib/workers/repository/extract/index.ts
+++ b/lib/workers/repository/extract/index.ts
@@ -7,6 +7,7 @@ import {
 import { logger } from '../../../logger';
 import { getManagerList } from '../../../manager';
 import { PackageFile } from '../../../manager/common';
+import { getFileList } from '../../../util/git';
 import { getMatchingFiles } from './file-match';
 import { getManagerPackageFiles } from './manager-files';
 
@@ -21,6 +22,7 @@ export async function extractAllDependencies(
     );
   }
   const extractList: RenovateConfig[] = [];
+  const fileList = await getFileList();
   for (const manager of managerList) {
     const managerConfig = getManagerConfig(config, manager);
     managerConfig.manager = manager;
@@ -30,15 +32,16 @@ export async function extractAllDependencies(
           managerConfig,
           regexManager
         );
-        regexManagerConfig.fileList = await getMatchingFiles(
-          regexManagerConfig
+        regexManagerConfig.fileList = getMatchingFiles(
+          regexManagerConfig,
+          fileList
         );
         if (regexManagerConfig.fileList.length) {
           extractList.push(regexManagerConfig);
         }
       }
     } else {
-      managerConfig.fileList = await getMatchingFiles(managerConfig);
+      managerConfig.fileList = getMatchingFiles(managerConfig, fileList);
       if (managerConfig.fileList.length) {
         extractList.push(managerConfig);
       }
diff --git a/lib/workers/repository/extract/manager-files.spec.ts b/lib/workers/repository/extract/manager-files.spec.ts
index 85e4814cb2..8a5e840281 100644
--- a/lib/workers/repository/extract/manager-files.spec.ts
+++ b/lib/workers/repository/extract/manager-files.spec.ts
@@ -31,7 +31,7 @@ describe('workers/repository/extract/manager-files', () => {
     });
     it('skips files if null content returned', async () => {
       const managerConfig = { manager: 'npm', enabled: true };
-      fileMatch.getMatchingFiles.mockResolvedValue(['package.json']);
+      fileMatch.getMatchingFiles.mockReturnValue(['package.json']);
       const res = await getManagerPackageFiles(managerConfig);
       expect(res).toHaveLength(0);
     });
@@ -41,7 +41,7 @@ describe('workers/repository/extract/manager-files', () => {
         enabled: true,
         fileList: ['Dockerfile'],
       };
-      fileMatch.getMatchingFiles.mockResolvedValue(['Dockerfile']);
+      fileMatch.getMatchingFiles.mockReturnValue(['Dockerfile']);
       fs.readLocalFile.mockResolvedValueOnce('some content');
       html.extractPackageFile = jest.fn(() => ({
         deps: [{}, { replaceString: 'abc' }],
@@ -55,7 +55,7 @@ describe('workers/repository/extract/manager-files', () => {
         enabled: true,
         fileList: ['package.json'],
       };
-      fileMatch.getMatchingFiles.mockResolvedValue(['package.json']);
+      fileMatch.getMatchingFiles.mockReturnValue(['package.json']);
       fs.readLocalFile.mockResolvedValueOnce(
         '{"dependencies":{"chalk":"2.0.0"}}'
       );
-- 
GitLab