UNPKG

2.03 kBJavaScriptView Raw
1
2var fs = require('fs'),
3 path = require('path');
4var readdirr = require('./readdirr').readdirr;
5
6
7/**
8 * Copy directory recursively.
9 *
10 * @param {String} source path
11 * @param {String} target path
12 * @param {Function} callback
13 * @api public
14 */
15
16exports.cpdirr = function (spath, tpath, cb) {
17 readdirr(spath, function (err, dirs, files) {
18 if (err) return cb(err);
19 exports.cpdirs(spath, tpath, dirs, function (err) {
20 if (err) return cb(err);
21 exports.cpfiles(spath, tpath, files, function (err) {
22 if (err) return cb(err);
23 cb();
24 });
25 });
26 });
27}
28
29/**
30 * Copy a list of directories.
31 *
32 * @param {String} source path
33 * @param {String} target path
34 * @param {Array} dirs
35 * @param {Function} callback
36 * @api public
37 */
38
39exports.cpdirs = function (spath, tpath, dirs, cb) {
40 dirs.sort();
41 (function loop (index) {
42 if (index == dirs.length) return cb();
43 var rpath = path.relative(spath, dirs[index]);
44 rpath = path.join(tpath, rpath);
45 fs.exists(rpath, function (exists) {
46 if (exists) return loop(++index);
47 fs.mkdir(rpath, function (err) {
48 if (err) return cb(err);
49 loop(++index);
50 });
51 });
52 }(0));
53}
54
55/**
56 * Copy a list of files.
57 *
58 * @param {String} source path
59 * @param {String} target path
60 * @param {Array} files
61 * @param {Function} callback
62 * @api public
63 */
64
65exports.cpfiles = function (spath, tpath, files, cb) {
66 (function loop (index) {
67 if (index == files.length) return cb();
68 fs.readFile(files[index], function (err, data) {
69 if (err) return cb(err);
70 var rpath = path.relative(spath, files[index]);
71 rpath = path.join(tpath, rpath);
72 fs.writeFile(rpath, data, function (err) {
73 if (err) return cb(err);
74 loop(++index);
75 });
76 });
77 }(0));
78}
79
80/*
81 // cpdirr example
82
83 var path = require('path');
84 var recursive = require('recursive-fs');
85
86 var spath = path.resolve(process.argv[2]),
87 tpath = path.resolve(process.argv[3]);
88 recursive.cpdirr(spath, tpath, function (err) {
89 if (err) {
90 console.log(err);
91 } else {
92 console.log('DONE!');
93 }
94 });
95*/