diff --git a/index.js b/index.js index 1d15158..9ad6d56 100644 --- a/index.js +++ b/index.js @@ -27,7 +27,9 @@ module.exports = async (patterns, {force, dryRun, ...options} = {}) => { ...options }; - const files = await globby(patterns, options); + const files = (await globby(patterns, options)) + .sort((a, b) => a.localeCompare(b)) + .reverse(); const mapper = async file => { if (!force) { @@ -54,7 +56,11 @@ module.exports.sync = (patterns, {force, dryRun, ...options} = {}) => { ...options }; - return globby.sync(patterns, options).map(file => { + const files = globby.sync(patterns, options) + .sort((a, b) => a.localeCompare(b)) + .reverse(); + + return files.map(file => { if (!force) { safeCheck(file); } diff --git a/test.js b/test.js index 036cd32..238b67c 100644 --- a/test.js +++ b/test.js @@ -88,9 +88,9 @@ test('don\'t delete files, but return them - async', async t => { }); exists(t, ['1.tmp', '2.tmp', '3.tmp', '4.tmp', '.dot.tmp']); t.deepEqual(deletedFiles, [ - path.join(t.context.tmp, '2.tmp'), + path.join(t.context.tmp, '4.tmp'), path.join(t.context.tmp, '3.tmp'), - path.join(t.context.tmp, '4.tmp') + path.join(t.context.tmp, '2.tmp') ]); }); @@ -101,8 +101,51 @@ test('don\'t delete files, but return them - sync', t => { }); exists(t, ['1.tmp', '2.tmp', '3.tmp', '4.tmp', '.dot.tmp']); t.deepEqual(deletedFiles, [ - path.join(t.context.tmp, '2.tmp'), + path.join(t.context.tmp, '4.tmp'), path.join(t.context.tmp, '3.tmp'), - path.join(t.context.tmp, '4.tmp') + path.join(t.context.tmp, '2.tmp') ]); }); + +// Currently this only testable locally on an osx machine. +// https://github.com/sindresorhus/del/issues/68 +test.serial('does not throw EINVAL - async', async t => { + const nestedFile = path.resolve(t.context.tmp, 'a/b/c/nested.js'); + const totalAttempts = 200; + + let count = 0; + while (count !== totalAttempts) { + makeDir.sync(nestedFile); + + // eslint-disable-next-line no-await-in-loop + await del('**/*', { + cwd: t.context.tmp, + dot: true + }); + + count += 1; + } + + notExists(t, [...fixtures, 'a']); + t.is(count, totalAttempts); +}); + +test.serial('does not throw EINVAL - sync', t => { + const nestedFile = path.resolve(t.context.tmp, 'a/b/c/nested.js'); + const totalAttempts = 200; + + let count = 0; + while (count !== totalAttempts) { + makeDir.sync(nestedFile); + + del.sync('**/*', { + cwd: t.context.tmp, + dot: true + }); + + count += 1; + } + + notExists(t, [...fixtures, 'a']); + t.is(count, totalAttempts); +});