Fixes #50. They're right, this should follow OS default behavior.

This commit is contained in:
Ryan McGrath 2013-05-03 16:48:08 -04:00
parent f8ed81ad5a
commit 04c8fe0239
2 changed files with 32 additions and 13 deletions

View file

@ -160,16 +160,20 @@ exports.rmdirSyncRecursive = function(path, failSilent) {
*
* Recursively dives through a directory and moves all its files to a new location. This is a
* Synchronous function, which blocks things until it's done. If you need/want to do this in
* an Asynchronous manner, look at wrench.copyDirRecursively() below.
* an Asynchronous manner, look at wrench.copyDirRecursively() below. Specify forceDelete to force directory overwrite.
*
* Note: Directories should be passed to this function without a trailing slash.
*/
exports.copyDirSyncRecursive = function(sourceDir, newDirLocation, opts) {
if (!opts || !opts.preserve) {
try {
if(fs.statSync(newDirLocation).isDirectory()) exports.rmdirSyncRecursive(newDirLocation);
} catch(e) { }
}
try {
if(fs.statSync(newDirLocation).isDirectory()) {
if(typeof opts !== 'undefined' && opts.forceDelete) {
exports.rmdirSyncRecursive(newDirLocation);
} else {
return new Error('You are trying to delete a directory that already exists. Specify forceDelete in the opts argument to override this. Bailing~');
}
}
} catch(e) { }
/* Create the directory where all our junk is moving to; read the mode of the source directory and mirror it */
var checkDir = fs.statSync(sourceDir);
@ -306,18 +310,23 @@ exports.rmdirRecursive = function rmdirRecursive(dir, clbk){
});
};
/* wrench.copyDirRecursive("directory_to_copy", "new_location", callback);
/* wrench.copyDirRecursive("directory_to_copy", "new_location", {forceDelete: bool}, callback);
*
* Recursively dives through a directory and moves all its files to a new
* location.
* location. Specify forceDelete to force directory overwrite.
*
* Note: Directories should be passed to this function without a trailing slash.
*/
exports.copyDirRecursive = function copyDirRecursive(srcDir, newDir, clbk) {
exports.copyDirRecursive = function copyDirRecursive(srcDir, newDir, opts, clbk) {
fs.stat(newDir, function(err, newDirStat){
if (!err) return exports.rmdirRecursive(newDir, function(err){
copyDirRecursive(srcDir, newDir, clbk);
});
if(!err) {
if(typeof opts !== 'undefined' && typeof opts !== 'function' && opts.forceDelete)
return exports.rmdirRecursive(newDir, function(err){
copyDirRecursive.apply(this, arguments);
});
else
return clbk(new Error('You are trying to delete a directory that already exists. Specify forceDelete in an options object to override this.'));
}
fs.stat(srcDir, function(err, srcDirStat){
if (err) return clbk(err);