Update wrench.js

Fixes a bug (not sure if has been reported).

`copyDirRecursive` calls itself from the `rmdirRecursive` callback when newDir exists. It should call itself with the original copyDirRecursive arguments, not the callback arguments. 

Also `fun.apply(thisArg, argsArray)` expects argsArray to be an array (see [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)) but `arguments` is not an array (see [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments))
This commit is contained in:
Adam Griffiths 2013-08-04 19:12:53 +01:00
parent 81d7fa5cf9
commit e3a696c40f

View file

@ -323,11 +323,12 @@ exports.rmdirRecursive = function rmdirRecursive(dir, failSilent, clbk){
* Note: Directories should be passed to this function without a trailing slash. * Note: Directories should be passed to this function without a trailing slash.
*/ */
exports.copyDirRecursive = function copyDirRecursive(srcDir, newDir, opts, clbk) { exports.copyDirRecursive = function copyDirRecursive(srcDir, newDir, opts, clbk) {
var originalArguments = Array.prototype.slice.apply(arguments);
fs.stat(newDir, function(err, newDirStat){ fs.stat(newDir, function(err, newDirStat){
if(!err) { if(!err) {
if(typeof opts !== 'undefined' && typeof opts !== 'function' && opts.forceDelete) if(typeof opts !== 'undefined' && typeof opts !== 'function' && opts.forceDelete)
return exports.rmdirRecursive(newDir, function(err){ return exports.rmdirRecursive(newDir, function(err){
copyDirRecursive.apply(this, arguments); copyDirRecursive.apply(this, originalArguments);
}); });
else else
return clbk(new Error('You are trying to delete a directory that already exists. Specify forceDelete in an options object to override this.')); return clbk(new Error('You are trying to delete a directory that already exists. Specify forceDelete in an options object to override this.'));