|
2 | 2 |
|
3 | 3 | const { createWriteStream, promises: fs } = require('graceful-fs') |
4 | 4 | const os = require('os') |
5 | | -const { backOff } = require('exponential-backoff') |
6 | 5 | const tar = require('tar') |
7 | 6 | const path = require('path') |
8 | 7 | const { Transform, promises: { pipeline } } = require('stream') |
9 | 8 | const crypto = require('crypto') |
10 | 9 | const log = require('./log') |
11 | 10 | const semver = require('semver') |
| 11 | +const copyDirectory = require('./copy-directory') |
12 | 12 | const { download } = require('./download') |
13 | 13 | const processRelease = require('./process-release') |
14 | 14 |
|
@@ -119,40 +119,6 @@ async function install (gyp, argv) { |
119 | 119 | } |
120 | 120 | } |
121 | 121 |
|
122 | | - async function copyDirectory (src, dest) { |
123 | | - try { |
124 | | - await fs.stat(src) |
125 | | - } catch { |
126 | | - throw new Error(`Missing source directory for copy: ${src}`) |
127 | | - } |
128 | | - await fs.mkdir(dest, { recursive: true }) |
129 | | - const entries = await fs.readdir(src, { withFileTypes: true }) |
130 | | - for (const entry of entries) { |
131 | | - if (entry.isDirectory()) { |
132 | | - await copyDirectory(path.join(src, entry.name), path.join(dest, entry.name)) |
133 | | - } else if (entry.isFile()) { |
134 | | - // with parallel installs, copying files may cause file errors on |
135 | | - // Windows so use an exponential backoff to resolve collisions |
136 | | - await backOff(async () => { |
137 | | - try { |
138 | | - await fs.copyFile(path.join(src, entry.name), path.join(dest, entry.name)) |
139 | | - } catch (err) { |
140 | | - // if ensure, check if file already exists and that's good enough |
141 | | - if (gyp.opts.ensure && err.code === 'EBUSY') { |
142 | | - try { |
143 | | - await fs.stat(path.join(dest, entry.name)) |
144 | | - return |
145 | | - } catch {} |
146 | | - } |
147 | | - throw err |
148 | | - } |
149 | | - }) |
150 | | - } else { |
151 | | - throw new Error('Unexpected file directory entry type') |
152 | | - } |
153 | | - } |
154 | | - } |
155 | | - |
156 | 122 | async function go () { |
157 | 123 | log.verbose('ensuring devDir is created', devDir) |
158 | 124 |
|
@@ -277,7 +243,7 @@ async function install (gyp, argv) { |
277 | 243 | } |
278 | 244 |
|
279 | 245 | // copy over the files from the temp tarball extract directory to devDir |
280 | | - await copyDirectory(tarExtractDir, devDir) |
| 246 | + await copyDirectory(tarExtractDir, devDir, gyp.opts.ensure) |
281 | 247 | } finally { |
282 | 248 | try { |
283 | 249 | // try to cleanup temp dir |
|
0 commit comments