Browse Source

Merge pull request #33 from Srirangan/master

fs_extra.copySync
ci/travis-osximage
JP Richardson 11 years ago
parent
commit
044d296a9b
  1. 3
      .gitignore
  2. 19
      lib/copy.js
  3. 1
      lib/index.js
  4. 76
      test/copy.test.js

3
.gitignore

@ -1 +1,4 @@
node_modules/
.idea
*.iml

19
lib/copy.js

@ -3,7 +3,8 @@
var fs = require('fs')
, ncp = require('ncp').ncp
, path = require('path')
, mkdir = require('./mkdir')
, mkdir = require('./mkdir'),
create = require('./create')
var BUF_LENGTH = 64 * 1024
var _buff = new Buffer(BUF_LENGTH)
@ -58,7 +59,23 @@ function copy(src, dest, callback) {
})
}
function copySync(src, dest) {
var stats = fs.lstatSync(src),
destExists = fs.exists(dest);
if (stats.isFile()) {
if (!destExists) create.createFileSync(dest);
copyFileSync(src, dest);
}
else if (stats.isDirectory()) {
if (!destExists) mkdir.mkdirsSync(dest);
var contents = fs.readdirSync(src);
contents.forEach(function (content) {
copySync(src + "/" + content, dest + "/" + content);
});
}
}
module.exports.copyFileSync = copyFileSync;
module.exports.copyFile = copyFile;
module.exports.copy = copy;
module.exports.copySync = copySync;

1
lib/index.js

@ -24,6 +24,7 @@ fs = fse;
// copy
fs.copy = require('./copy').copy;
fs.copySync = require('./copy').copySync;
// remove

76
test/copy.test.js

@ -123,6 +123,82 @@ describe('fs-extra', function() {
})
})
})
describe("+ copySync()", function () {
describe("> when the source is a file", function () {
it("should copy the file synchronously", function (done) {
var fileSrc = path.join(DIR, "TEST_fs-extra_src")
, fileDest = path.join(DIR, "TEST_fs-extra_copy")
, fileSrc = testutil.createFileWithData(fileSrc, SIZE)
, srcMd5 = crypto.createHash('md5').update(fs.readFileSync(fileSrc)).digest("hex")
, destMd5 = '';
fs.copySync(fileSrc, fileDest);
destMd5 = crypto.createHash('md5').update(fs.readFileSync(fileDest)).digest("hex");
T(srcMd5 === destMd5);
done();
});
describe("> when the destination dir does not exist", function () {
it('should create the destination directory and copy the file', function (done) {
var src = path.join(DIR, 'file.txt'),
dest = path.join(DIR, 'this/path/does/not/exist/copied.txt'),
data = "did it copy?\n";
fs.writeFileSync(src, data, 'utf8');
fs.copySync(src, dest);
var data2 = fs.readFileSync(dest, 'utf8');
EQ(data, data2)
done();
})
});
});
describe("> when the source is a directory", function() {
it("should copy the directory synchronously", function(done) {
var FILES = 2,
src = path.join(DIR, 'src'),
dest = path.join(DIR, 'dest'),
i, j;
mkdir.sync(src);
for (i = 0; i < FILES; ++i)
testutil.createFileWithData(path.join(src, i.toString()), SIZE);
var subdir = path.join(src, 'subdir');
mkdir.sync(subdir);
for (i = 0; i < FILES; ++i)
testutil.createFileWithData(path.join(subdir, i.toString()), SIZE);
fs.copySync(src, dest);
T (fs.existsSync(dest));
for (i = 0; i < FILES; ++i) T (fs.existsSync(path.join(dest, i.toString())));
var destSub = path.join(dest, 'subdir');
for (j = 0; j < FILES; ++j) T (fs.existsSync(path.join(destSub, j.toString())));
done()
});
describe("> when the destination dir does not exist", function() {
it("should create the destination directory and copy the file", function(done) {
var src = path.join(DIR, 'data/');
fs.mkdirsSync(src);
var d1 = "file1",
d2 = "file2",
f1 = fs.writeFileSync(path.join(src, "f1.txt"), d1),
f2 = fs.writeFileSync(path.join(src, "f2.txt"), d2);
var dest = path.join(DIR, 'this/path/does/not/exist/outputDir');
fs.copySync(src, dest);
var o1 = fs.readFileSync(path.join(dest, 'f1.txt'), 'utf8'),
o2 = fs.readFileSync(path.join(dest, 'f2.txt'), 'utf8');
EQ (d1, o1);
EQ (d2, o2);
done()
});
});
});
});
})

Loading…
Cancel
Save