Let fs:delete wildcard patterns match paths that start with "."

Signed-off-by: Bryan White <bryan.white@netlify.com>
This commit is contained in:
Bryan White
2025-04-24 16:03:35 -07:00
parent ef5c338c36
commit eb393886f7
3 changed files with 72 additions and 2 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Fixed bug in fs:delete that prevented wildcard patterns from matching paths starting with "."
@@ -40,8 +40,14 @@ describe('fs:delete', () => {
[workspacePath]: {
'unit-test-a.js': 'hello',
'unit-test-b.js': 'world',
'a-folder': {
'unit-test-in-a-folder.js2': 'content',
'.dotfile': 'content',
'.dotdir': {
'.dotfile': 'content',
'reg-file.js': 'content',
},
regdir: {
'.dotfile': 'content',
'reg-file.js': 'content',
},
},
});
@@ -165,4 +171,62 @@ describe('fs:delete', () => {
expect(fileExists).toBe(false);
});
});
it('. pattern should match nested and hidden files', async () => {
const files = [
'unit-test-a.js',
'unit-test-b.js',
'.dotfile',
'.dotdir/.dotfile',
'.dotdir/reg-file.js',
'regdir/.dotfile',
'regdir/reg-file.js',
];
files.forEach(file => {
const filePath = resolvePath(workspacePath, file);
const fileExists = fs.existsSync(filePath);
expect(fileExists).toBe(true);
});
await action.handler({
...mockContext,
input: { files: ['.'] },
});
files.forEach(file => {
const filePath = resolvePath(workspacePath, file);
const fileExists = fs.existsSync(filePath);
expect(fileExists).toBe(false);
});
});
it('** pattern should match nested and hidden files', async () => {
const files = [
'unit-test-a.js',
'unit-test-b.js',
'.dotfile',
'.dotdir/.dotfile',
'.dotdir/reg-file.js',
'regdir/.dotfile',
'regdir/reg-file.js',
];
files.forEach(file => {
const filePath = resolvePath(workspacePath, file);
const fileExists = fs.existsSync(filePath);
expect(fileExists).toBe(true);
});
await action.handler({
...mockContext,
input: { files: ['**'] },
});
files.forEach(file => {
const filePath = resolvePath(workspacePath, file);
const fileExists = fs.existsSync(filePath);
expect(fileExists).toBe(false);
});
});
});
@@ -61,6 +61,7 @@ export const createFilesystemDeleteAction = () => {
const resolvedPaths = await globby(safeFilepath, {
cwd: ctx.workspacePath,
absolute: true,
dot: true,
});
for (const filepath of resolvedPaths) {