diff --git a/README.md b/README.md index fec7d2d..5aee862 100644 --- a/README.md +++ b/README.md @@ -1323,7 +1323,7 @@ sh.tempDir(function(err, tmp) { }); ``` -#### sh.mkdirp(callback) +#### sh.mkdirp(path, callback) Recursively creates the directory at the provided path. If the directory already exists, no error is returned. All parents must diff --git a/src/shell/shell.js b/src/shell/shell.js index bccd9f8..0913f2d 100644 --- a/src/shell/shell.js +++ b/src/shell/shell.js @@ -365,19 +365,32 @@ define(function(require) { callback = callback || function(){}; if(!path) { - callback(new Errors.EINVAL('missing path argument')); + callback(new Errors.EINVAL("Missing path argument")); return; } - else if (path === '/'){ + else if (path === '/') { callback(); return; } - function _mkdirp(path, callback){ + function _mkdirp(path, callback) { fs.stat(path, function (err, stat) { - //doesn't exist - if (err && err.code === 'ENOENT') { + if(stat) { + if(stat.isDirectory()) { + callback(); + return; + } + else if (stat.isFile()) { + callback(new Errors.ENOTDIR()); + return; + } + } + else if (err && err.code !== 'ENOENT') { + callback(err); + return; + } + else { var parent = Path.dirname(path); - if(parent === '/'){ //parent is root + if(parent === '/') { fs.mkdir(path, function (err) { if (err && err.code != 'EEXIST') { callback(err); @@ -387,10 +400,10 @@ define(function(require) { return; }); } - else { //parent is not root, make parent first + else { _mkdirp(parent, function (err) { if (err) return callback(err); - fs.mkdir(path, function (err) { //then make dir + fs.mkdir(path, function (err) { if (err && err.code != 'EEXIST') { callback(err); return; @@ -401,21 +414,7 @@ define(function(require) { }); } } - //other error - else if (err){ - callback(err); - return; - } - //already exists - else if (stat.type === 'DIRECTORY') { - callback(); - return; - } - //not a directory - else if (stat.type === 'FILE') { - callback(new Errors.ENOTDIR()); - return; - } + }); }