Skip to content
Snippets Groups Projects
Commit 85e7cef0 authored by Rhys Arkins's avatar Rhys Arkins
Browse files

refactor: getMatchingFiles

parent 53319ac7
No related branches found
No related tags found
No related merge requests found
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);
});
......
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}`);
......
......@@ -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"}}'
);
......
......@@ -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(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment