From aada8f0b7399fb49dac644955b1a32b6030c441e Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@keylocation.sg> Date: Wed, 1 Nov 2017 10:31:56 +0100 Subject: [PATCH] feat: support globs in ignorePaths (#1069) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Renovate will now check ignorePaths values for either (a) a string match, or (b) glob pattern. e.g. a string of ‘node_modules/‘ will ignore ‘node_modules/foo/package.json’ and ‘backend/node_modules/foo/package.json’ but it will also ignore ‘not_node_modules/foo/package.json` too. Therefore a blog pattern of `**/node_modules/**` is superior. Closes #1054 BREAKING CHANGE: ignorePaths now supports globs and may match more than before, but that’s probably a good thing. --- lib/config/definitions.js | 5 +++-- lib/manager/index.js | 7 ++++++- test/manager/__snapshots__/index.spec.js.snap | 1 + test/manager/index.spec.js | 3 ++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/config/definitions.js b/lib/config/definitions.js index d79efec676..7a8e188772 100644 --- a/lib/config/definitions.js +++ b/lib/config/definitions.js @@ -191,10 +191,11 @@ const options = [ }, { name: 'ignorePaths', - description: 'Skip any package.json whose path matches one of these.', + description: + 'Skip any package.json whose path matches one of these. Can be string or glob pattern', type: 'list', stage: 'repository', - default: ['node_modules/'], + default: ['**/node_modules/**'], }, { name: 'dependencies', diff --git a/lib/manager/index.js b/lib/manager/index.js index eecfc92e59..091c93d46d 100644 --- a/lib/manager/index.js +++ b/lib/manager/index.js @@ -1,3 +1,5 @@ +const minimatch = require('minimatch'); + const docker = require('./docker/package'); const npm = require('./npm/package'); @@ -19,7 +21,10 @@ async function detectPackageFiles(input) { const config = { ...input }; const { logger } = config; const fileList = (await config.api.getFileList()).filter( - file => !config.ignorePaths.some(ignorePath => file.includes(ignorePath)) + file => + !config.ignorePaths.some( + ignorePath => file.includes(ignorePath) || minimatch(file, ignorePath) + ) ); logger.debug({ config }, 'detectPackageFiles'); config.types = {}; diff --git a/test/manager/__snapshots__/index.spec.js.snap b/test/manager/__snapshots__/index.spec.js.snap index f40065dc21..868dd63ea6 100644 --- a/test/manager/__snapshots__/index.spec.js.snap +++ b/test/manager/__snapshots__/index.spec.js.snap @@ -22,6 +22,7 @@ Array [ exports[`manager detectPackageFiles(config) ignores node modules 1`] = ` Array [ "package.json", + "not_node_mldules/backend/package.json", ] `; diff --git a/test/manager/index.spec.js b/test/manager/index.spec.js index 87b5bb8eab..f219d5605c 100644 --- a/test/manager/index.spec.js +++ b/test/manager/index.spec.js @@ -70,10 +70,11 @@ describe('manager', () => { config.api.getFileList.mockReturnValueOnce([ 'package.json', 'node_modules/backend/package.json', + 'not_node_mldules/backend/package.json', ]); const res = await manager.detectPackageFiles(config); expect(res.packageFiles).toMatchSnapshot(); - expect(res.packageFiles).toHaveLength(1); + expect(res.packageFiles).toHaveLength(2); expect(res.foundIgnoredPaths).toMatchSnapshot(); expect(res.warnings).toMatchSnapshot(); }); -- GitLab