Skip to content

Commit 666b4d1

Browse files
committed
use fcopy for file copying
1 parent 40f7f9d commit 666b4d1

File tree

3 files changed

+74
-40
lines changed

3 files changed

+74
-40
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"death": "^1.0.0",
1616
"debug": "^2.2.0",
1717
"detect-indent": "^5.0.0",
18+
"fcopy": "^0.0.4",
1819
"gunzip-maybe": "^1.4.0",
1920
"ini": "^1.3.4",
2021
"inquirer": "^3.0.1",

src/util/fs.js

Lines changed: 12 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as promise from './promise.js';
66
import {promisify} from './promise.js';
77
import map from './map.js';
88

9+
const fcopy = require('fcopy');
910
const path = require('path');
1011
const fs = require('fs');
1112
const os = require('os');
@@ -26,8 +27,9 @@ export const exists: (path: string) => Promise<boolean> = promisify(fs.exists, t
2627
export const lstat: (path: string) => Promise<fs.Stats> = promisify(fs.lstat);
2728
export const chmod: (path: string, mode: number | string) => Promise<void> = promisify(fs.chmod);
2829
export const link: (path: string) => Promise<fs.Stats> = promisify(fs.link);
30+
export const utimes: (path: string, atime: number, mtime: number) => Promise<void> = promisify(fs.utimes);
2931

30-
const CONCURRENT_QUEUE_ITEMS = 4;
32+
const CONCURRENT_QUEUE_ITEMS = 16;
3133

3234
const fsSymlink: (
3335
target: string,
@@ -510,37 +512,16 @@ export async function copyBulk(
510512
}
511513

512514
const cleanup = () => delete currentlyWriting[data.dest];
513-
return currentlyWriting[data.dest] = new Promise((resolve, reject) => {
514-
const readStream = fs.createReadStream(data.src);
515-
const writeStream = fs.createWriteStream(data.dest, {mode: data.mode});
516-
515+
return currentlyWriting[data.dest] = (async function() : Promise<void> {
517516
reporter.verbose(reporter.lang('verboseFileCopy', data.src, data.dest));
518-
519-
readStream.on('error', reject);
520-
writeStream.on('error', reject);
521-
522-
writeStream.on('open', function() {
523-
readStream.pipe(writeStream);
524-
});
525-
526-
writeStream.once('close', function() {
527-
fs.utimes(data.dest, data.atime, data.mtime, function(err) {
528-
if (err) {
529-
reject(err);
530-
} else {
531-
events.onProgress(data.dest);
532-
cleanup();
533-
resolve();
534-
}
535-
});
536-
});
537-
}).then((arg) => {
538-
cleanup();
539-
return arg;
540-
}).catch((arg) => {
541-
cleanup();
542-
throw arg;
543-
});
517+
try {
518+
await fcopy(data.src, data.dest, {mode: data.mode});
519+
await utimes(data.dest, data.atime, data.mtime);
520+
events.onProgress(data.dest);
521+
} finally {
522+
cleanup();
523+
}
524+
})();
544525
}, CONCURRENT_QUEUE_ITEMS);
545526

546527
// we need to copy symlinks last as they could reference files we were copying

yarn.lock

Lines changed: 61 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1695,6 +1695,13 @@ fb-watchman@^2.0.0:
16951695
dependencies:
16961696
bser "^2.0.0"
16971697

1698+
fcopy@^0.0.4:
1699+
version "0.0.4"
1700+
resolved "https://registry.yarnpkg.com/fcopy/-/fcopy-0.0.4.tgz#ed412be317a02897250242c628962f447694ee14"
1701+
dependencies:
1702+
nan "^2.6.2"
1703+
node-pre-gyp "^0.6.34"
1704+
16981705
figures@^1.3.5:
16991706
version "1.7.0"
17001707
resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
@@ -1850,15 +1857,15 @@ fsevents@^1.0.0:
18501857
nan "^2.3.0"
18511858
node-pre-gyp "^0.6.29"
18521859

1853-
fstream-ignore@~1.0.5:
1860+
fstream-ignore@^1.0.5, fstream-ignore@~1.0.5:
18541861
version "1.0.5"
18551862
resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
18561863
dependencies:
18571864
fstream "^1.0.0"
18581865
inherits "2"
18591866
minimatch "^3.0.0"
18601867

1861-
fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
1868+
fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10:
18621869
version "1.0.10"
18631870
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
18641871
dependencies:
@@ -3281,6 +3288,10 @@ nan@^2.3.0:
32813288
version "2.5.1"
32823289
resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2"
32833290

3291+
nan@^2.6.2:
3292+
version "2.6.2"
3293+
resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
3294+
32843295
natives@^1.1.0:
32853296
version "1.1.0"
32863297
resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31"
@@ -3350,6 +3361,27 @@ node-pre-gyp@^0.6.29:
33503361
tar "~2.2.1"
33513362
tar-pack "~3.3.0"
33523363

3364+
node-pre-gyp@^0.6.34:
3365+
version "0.6.34"
3366+
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7"
3367+
dependencies:
3368+
mkdirp "^0.5.1"
3369+
nopt "^4.0.1"
3370+
npmlog "^4.0.2"
3371+
rc "^1.1.7"
3372+
request "^2.81.0"
3373+
rimraf "^2.6.1"
3374+
semver "^5.3.0"
3375+
tar "^2.2.1"
3376+
tar-pack "^3.4.0"
3377+
3378+
nopt@^4.0.1:
3379+
version "4.0.1"
3380+
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
3381+
dependencies:
3382+
abbrev "1"
3383+
osenv "^0.1.4"
3384+
33533385
nopt@~3.0.6:
33543386
version "3.0.6"
33553387
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
@@ -3369,7 +3401,7 @@ normalize-path@^2.0.1:
33693401
version "2.0.1"
33703402
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
33713403

3372-
npmlog@^4.0.1:
3404+
npmlog@^4.0.1, npmlog@^4.0.2:
33733405
version "4.0.2"
33743406
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
33753407
dependencies:
@@ -3413,7 +3445,7 @@ object.omit@^2.0.0:
34133445
for-own "^0.1.4"
34143446
is-extendable "^0.1.1"
34153447

3416-
once@^1.3.0, once@^1.3.1, once@^1.4.0:
3448+
once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
34173449
version "1.4.0"
34183450
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
34193451
dependencies:
@@ -3483,6 +3515,13 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1:
34833515
version "1.0.2"
34843516
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
34853517

3518+
osenv@^0.1.4:
3519+
version "0.1.4"
3520+
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
3521+
dependencies:
3522+
os-homedir "^1.0.0"
3523+
os-tmpdir "^1.0.0"
3524+
34863525
p-limit@^1.1.0:
34873526
version "1.1.0"
34883527
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
@@ -3728,7 +3767,7 @@ randombytes@^2.0.0, randombytes@^2.0.1:
37283767
version "2.0.3"
37293768
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec"
37303769

3731-
rc@~1.1.6:
3770+
rc@^1.1.7, rc@~1.1.6:
37323771
version "1.1.7"
37333772
resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea"
37343773
dependencies:
@@ -3767,7 +3806,7 @@ read@^1.0.7:
37673806
isarray "0.0.1"
37683807
string_decoder "~0.10.x"
37693808

3770-
readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.5, readable-stream@^2.2.2:
3809+
readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2:
37713810
version "2.2.3"
37723811
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.3.tgz#9cf49463985df016c8ae8813097a9293a9b33729"
37733812
dependencies:
@@ -3969,7 +4008,7 @@ right-align@^0.1.1:
39694008
dependencies:
39704009
align-text "^0.1.1"
39714010

3972-
rimraf@2, rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.0:
4011+
rimraf@2, rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.0, rimraf@^2.5.1, rimraf@^2.6.1:
39734012
version "2.6.1"
39744013
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
39754014
dependencies:
@@ -4305,6 +4344,19 @@ tar-fs@^1.15.1:
43054344
pump "^1.0.0"
43064345
tar-stream "^1.1.2"
43074346

4347+
tar-pack@^3.4.0:
4348+
version "3.4.0"
4349+
resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984"
4350+
dependencies:
4351+
debug "^2.2.0"
4352+
fstream "^1.0.10"
4353+
fstream-ignore "^1.0.5"
4354+
once "^1.3.3"
4355+
readable-stream "^2.1.4"
4356+
rimraf "^2.5.1"
4357+
tar "^2.2.1"
4358+
uid-number "^0.0.6"
4359+
43084360
tar-pack@~3.3.0:
43094361
version "3.3.0"
43104362
resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
@@ -4327,7 +4379,7 @@ tar-stream@^1.1.2, tar-stream@^1.5.2:
43274379
readable-stream "^2.0.0"
43284380
xtend "^4.0.0"
43294381

4330-
tar@~2.2.1:
4382+
tar@^2.2.1, tar@~2.2.1:
43314383
version "2.2.1"
43324384
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
43334385
dependencies:
@@ -4476,7 +4528,7 @@ uglify-to-browserify@~1.0.0:
44764528
version "1.0.2"
44774529
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
44784530

4479-
uid-number@~0.0.6:
4531+
uid-number@^0.0.6, uid-number@~0.0.6:
44804532
version "0.0.6"
44814533
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
44824534

0 commit comments

Comments
 (0)