From 0bb0972643eb52cfd828d769ef7602323e427df5 Mon Sep 17 00:00:00 2001 From: Mohamed Akram Date: Tue, 28 Nov 2023 22:30:27 +0400 Subject: [PATCH] fix: disallow child unignoring parent directory ignore (#116) Closes: https://github.com/npm/cli/issues/7007 --- lib/index.js | 3 +++ test/preserve-ignores.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 test/preserve-ignores.js diff --git a/lib/index.js b/lib/index.js index 40a0726..4d3c258 100644 --- a/lib/index.js +++ b/lib/index.js @@ -217,6 +217,9 @@ class Walker extends EE { if (this.parent && this.parent.filterEntry) { var pt = this.basename + '/' + entry included = this.parent.filterEntry(pt, partial) + if (!included && partial) { + return false + } } this.ignoreFiles.forEach(f => { diff --git a/test/preserve-ignores.js b/test/preserve-ignores.js new file mode 100644 index 0000000..e0e316c --- /dev/null +++ b/test/preserve-ignores.js @@ -0,0 +1,30 @@ +'use strict' + +var walk = require('../lib/index.js') +const { resolve } = require('path') +const path = resolve(__dirname, 'fixtures') + +// set the ignores just for this test +var c = require('./common.js') +c.ignores({ + '.ignore': ['*', '!/c', '!/d'], + 'c/.ignore': ['!*', '.ignore'], // unignore everything +}) + +// the only files we expect to see +var expected = [] + +const t = require('tap') + +t.test('sync', t => { + t.same(walk.sync({ + path, + ignoreFiles: ['.ignore'], + }), expected) + t.end() +}) + +t.test('async', t => walk({ + path, + ignoreFiles: ['.ignore'], +}, (er, result) => t.same(result, expected)))