Skip to content

Commit

Permalink
perf: copy dir contents in parallel (#1026)
Browse files Browse the repository at this point in the history
  • Loading branch information
SukkaW authored Nov 28, 2023
1 parent a277cbb commit d293448
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions lib/copy/copy.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,21 +113,23 @@ async function onDir (srcStat, destStat, src, dest, opts) {
await fs.mkdir(dest)
}

const items = await fs.readdir(src)

// loop through the files in the current directory to copy everything
for (const item of await fs.readdir(src)) {
await Promise.all(items.map(async item => {
const srcItem = path.join(src, item)
const destItem = path.join(dest, item)

// skip the item if it is matches by the filter function
const include = await runFilter(srcItem, destItem, opts)
if (!include) continue
if (!include) return

const { destStat } = await stat.checkPaths(srcItem, destItem, 'copy', opts)

// If the item is a copyable file, `getStatsAndPerformCopy` will copy it
// If the item is a directory, `getStatsAndPerformCopy` will call `onDir` recursively
await getStatsAndPerformCopy(destStat, srcItem, destItem, opts)
}
return getStatsAndPerformCopy(destStat, srcItem, destItem, opts)
}))

if (!destStat) {
await fs.chmod(dest, srcStat.mode)
Expand Down

0 comments on commit d293448

Please sign in to comment.