diff --git a/lib/workers/repository/extract/file-match.spec.ts b/lib/workers/repository/extract/file-match.spec.ts index 718ab8ecee2c286d3fe5de1c701e6844aa19a35e..d4d8424d687a587b03a60ab7f68310a1ddbdcb48 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 08bc468e948d7bba2c94fabfae360f950473c87c..04e6ee64f0726a54d0f396e80b5732caf51dd095 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 d512eac0c20602d373ee695e516779222d8718f9..cec003431a6112c461552889781323a95467ac4f 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 61ef25c097f24829c2b85e9a1a7e524cc304f41d..fb6260e18451e9372fbd4b27806885b4c4fb6391 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(