From 34debdc969351c21ba38db1507ae8f4cb526d01e Mon Sep 17 00:00:00 2001 From: adrianstephens Date: Sat, 12 Oct 2024 16:30:23 -0700 Subject: [PATCH 1/8] fix for including excluded and vice versa --- src/package.ts | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/package.ts b/src/package.ts index 2aad8818..2cd48e42 100644 --- a/src/package.ts +++ b/src/package.ts @@ -1721,8 +1721,8 @@ function collectFiles( Promise.reject(err) : // No .vscodeignore file exists manifestFileIncludes ? - // include all files in manifestFileIncludes and ignore the rest - Promise.resolve(manifestFileIncludes.map(file => `!${file}`).concat(['**']).join('\n\r')) : + // ignore all, and then include all files in manifestFileIncludes + Promise.resolve(['**', ...manifestFileIncludes.map(file => file[0] === '!' ? file.slice(1) : `!${file}`)].join('\n\r')) : // "files" property not used in package.json Promise.resolve('') ) @@ -1745,22 +1745,14 @@ function collectFiles( // Combine with default ignore list .then(ignore => [...defaultIgnore, ...ignore, ...notIgnored]) - // Split into ignore and negate list + // Check the ignore list in order to filter out files .then(ignore => - ignore.reduce<[string[], string[]]>( - (r, e) => (!/^\s*!/.test(e) ? [[...r[0], e], r[1]] : [r[0], [...r[1], e]]), - [[], []] - ) - ) - .then(r => ({ ignore: r[0], negate: r[1] })) - - // Filter out files - .then(({ ignore, negate }) => - files.filter( - f => - !ignore.some(i => minimatch(f, i, MinimatchOptions)) || - negate.some(i => minimatch(f, i.substr(1), MinimatchOptions)) - ) + files.filter(f=> ignore.reduce((keep, i) => i[0] === '!' + ? keep || minimatch(f, i.slice(1), MinimatchOptions) + : keep && !minimatch(f, i, MinimatchOptions), + true + )) + ) ); }); From 1262865eef3139a3ce2be58860ba0d8028606d11 Mon Sep 17 00:00:00 2001 From: adrianstephens Date: Sat, 12 Oct 2024 17:14:44 -0700 Subject: [PATCH 2/8] interleave possible folder names --- src/package.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/package.ts b/src/package.ts index 2cd48e42..a6c4d254 100644 --- a/src/package.ts +++ b/src/package.ts @@ -1737,10 +1737,9 @@ function collectFiles( ) // Add '/**' to possible folder names - .then(ignore => [ - ...ignore, - ...ignore.filter(i => !/(^|\/)[^/]*\*[^/]*$/.test(i)).map(i => (/\/$/.test(i) ? `${i}**` : `${i}/**`)), - ]) + .then(ignore => + ignore.map(i => !/(^|\/)[^/]*\*[^/]*$/.test(i) ? [i, /\/$/.test(i) ? `${i}**` : `${i}/**`] : [i]).flat(), + ) // Combine with default ignore list .then(ignore => [...defaultIgnore, ...ignore, ...notIgnored]) From cd627e7e35c79807d13170621e3b9b639be89633 Mon Sep 17 00:00:00 2001 From: adrianstephens Date: Sun, 13 Oct 2024 14:29:07 -0700 Subject: [PATCH 3/8] validation fix --- src/package.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.ts b/src/package.ts index a6c4d254..0b81af83 100644 --- a/src/package.ts +++ b/src/package.ts @@ -2083,7 +2083,7 @@ export async function printAndValidatePackagedFiles(files: IFile[], cwd: string, // the package does not include at least one file for each include pattern else if (manifest.files !== undefined && manifest.files.length > 0 && !options.allowUnusedFilesPattern) { const localPaths = files.map(f => util.normalize(f.originalPath ?? (!isInMemoryFile(f) ? f.localPath : path.join(cwd, f.path)))); - const filesIncludePatterns = manifest.files.map(includePattern => ({ absolute: util.normalize(path.join(cwd, includePattern)), relative: includePattern })); + const filesIncludePatterns = manifest.files.filter(includePattern => includePattern[0] !== '!').map(includePattern => ({ absolute: util.normalize(path.join(cwd, includePattern)), relative: includePattern })); const unusedIncludePatterns = filesIncludePatterns.filter(includePattern => { let absoluteIncludePattern = includePattern.absolute; From 1c4d84eb4eea15cdf4e29341e72b63937fc019f0 Mon Sep 17 00:00:00 2001 From: AshtonStephens Date: Wed, 6 Nov 2024 19:55:51 +0000 Subject: [PATCH 4/8] feat: Reformat map expression. --- src/package.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/package.ts b/src/package.ts index 0b81af83..4cfa49bb 100644 --- a/src/package.ts +++ b/src/package.ts @@ -1737,8 +1737,16 @@ function collectFiles( ) // Add '/**' to possible folder names - .then(ignore => - ignore.map(i => !/(^|\/)[^/]*\*[^/]*$/.test(i) ? [i, /\/$/.test(i) ? `${i}**` : `${i}/**`] : [i]).flat(), + .then(ignore => + ignore.map(i => !/(^|\/)[^/]*\*[^/]*$/.test(i) + ? [ + i, + /\/$/.test(i) + ? `${i}**` + : `${i}/**` + ] + : [i] + ).flat(), ) // Combine with default ignore list From e013846bb68e7da49cfffe2fb75a016cd5e350d4 Mon Sep 17 00:00:00 2001 From: AshtonStephens Date: Wed, 6 Nov 2024 19:57:07 +0000 Subject: [PATCH 5/8] feat: Add file exclusion to unit tests --- src/test/fixtures/manifestFiles/foo/bar/exclude.me | 1 + src/test/fixtures/manifestFiles/package.json | 1 + 2 files changed, 2 insertions(+) create mode 100644 src/test/fixtures/manifestFiles/foo/bar/exclude.me diff --git a/src/test/fixtures/manifestFiles/foo/bar/exclude.me b/src/test/fixtures/manifestFiles/foo/bar/exclude.me new file mode 100644 index 00000000..31ba3b47 --- /dev/null +++ b/src/test/fixtures/manifestFiles/foo/bar/exclude.me @@ -0,0 +1 @@ +should be ignored as it's listed as excluded in the package.json files list. diff --git a/src/test/fixtures/manifestFiles/package.json b/src/test/fixtures/manifestFiles/package.json index ee4afe51..a45e420b 100644 --- a/src/test/fixtures/manifestFiles/package.json +++ b/src/test/fixtures/manifestFiles/package.json @@ -7,6 +7,7 @@ }, "files": [ "foo", + "!**/exclude.me", "foo2/bar2/include.me", "*/bar3/**", "package.json", From 2b1a085591b28831e22886e8f0cdc5eb927a21c4 Mon Sep 17 00:00:00 2001 From: BeniBenj Date: Tue, 10 Dec 2024 15:18:55 +0100 Subject: [PATCH 6/8] Add tests --- src/test/fixtures/manifestFiles/fooExclude/excluded.txt | 0 .../fixtures/manifestFiles/fooExclude/includeNotPossible.txt | 0 src/test/fixtures/manifestFiles/fooInclude/excluded.txt | 0 src/test/fixtures/manifestFiles/fooInclude/included.txt | 0 src/test/fixtures/manifestFiles/package.json | 4 ++++ src/test/package.test.ts | 1 + 6 files changed, 5 insertions(+) create mode 100644 src/test/fixtures/manifestFiles/fooExclude/excluded.txt create mode 100644 src/test/fixtures/manifestFiles/fooExclude/includeNotPossible.txt create mode 100644 src/test/fixtures/manifestFiles/fooInclude/excluded.txt create mode 100644 src/test/fixtures/manifestFiles/fooInclude/included.txt diff --git a/src/test/fixtures/manifestFiles/fooExclude/excluded.txt b/src/test/fixtures/manifestFiles/fooExclude/excluded.txt new file mode 100644 index 00000000..e69de29b diff --git a/src/test/fixtures/manifestFiles/fooExclude/includeNotPossible.txt b/src/test/fixtures/manifestFiles/fooExclude/includeNotPossible.txt new file mode 100644 index 00000000..e69de29b diff --git a/src/test/fixtures/manifestFiles/fooInclude/excluded.txt b/src/test/fixtures/manifestFiles/fooInclude/excluded.txt new file mode 100644 index 00000000..e69de29b diff --git a/src/test/fixtures/manifestFiles/fooInclude/included.txt b/src/test/fixtures/manifestFiles/fooInclude/included.txt new file mode 100644 index 00000000..e69de29b diff --git a/src/test/fixtures/manifestFiles/package.json b/src/test/fixtures/manifestFiles/package.json index a45e420b..7732243d 100644 --- a/src/test/fixtures/manifestFiles/package.json +++ b/src/test/fixtures/manifestFiles/package.json @@ -9,6 +9,10 @@ "foo", "!**/exclude.me", "foo2/bar2/include.me", + "!fooExclude/**", + "fooExclude/includeNotPossible.txt", + "fooInclude/**", + "!fooInclude/excluded.txt", "*/bar3/**", "package.json", "LICENSE", diff --git a/src/test/package.test.ts b/src/test/package.test.ts index e250da37..07ea02a4 100644 --- a/src/test/package.test.ts +++ b/src/test/package.test.ts @@ -252,6 +252,7 @@ describe('collect', function () { 'extension/foo/bar/hello.txt', 'extension/foo2/bar2/include.me', 'extension/foo3/bar3/hello.txt', + 'extension/fooInclude/included.txt', 'extension/package.json', 'extension/readme.md', ]); From fbb540e5650b57d77886c192c78162651b0f269e Mon Sep 17 00:00:00 2001 From: adrianstephens Date: Sat, 12 Oct 2024 17:14:44 -0700 Subject: [PATCH 7/8] interleave possible folder names --- src/package.ts | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/package.ts b/src/package.ts index 4cfa49bb..0b81af83 100644 --- a/src/package.ts +++ b/src/package.ts @@ -1737,16 +1737,8 @@ function collectFiles( ) // Add '/**' to possible folder names - .then(ignore => - ignore.map(i => !/(^|\/)[^/]*\*[^/]*$/.test(i) - ? [ - i, - /\/$/.test(i) - ? `${i}**` - : `${i}/**` - ] - : [i] - ).flat(), + .then(ignore => + ignore.map(i => !/(^|\/)[^/]*\*[^/]*$/.test(i) ? [i, /\/$/.test(i) ? `${i}**` : `${i}/**`] : [i]).flat(), ) // Combine with default ignore list From 2dbab0b88bdee48637d4842593bcc938e2615b5d Mon Sep 17 00:00:00 2001 From: AshtonStephens Date: Wed, 6 Nov 2024 19:55:51 +0000 Subject: [PATCH 8/8] feat: Reformat map expression. --- src/package.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/package.ts b/src/package.ts index 0b81af83..4cfa49bb 100644 --- a/src/package.ts +++ b/src/package.ts @@ -1737,8 +1737,16 @@ function collectFiles( ) // Add '/**' to possible folder names - .then(ignore => - ignore.map(i => !/(^|\/)[^/]*\*[^/]*$/.test(i) ? [i, /\/$/.test(i) ? `${i}**` : `${i}/**`] : [i]).flat(), + .then(ignore => + ignore.map(i => !/(^|\/)[^/]*\*[^/]*$/.test(i) + ? [ + i, + /\/$/.test(i) + ? `${i}**` + : `${i}/**` + ] + : [i] + ).flat(), ) // Combine with default ignore list