Merge pull request #162 from pbouianov/mkdirp

Fixed issues as per pull request conversation
This commit is contained in:
Alan K 2014-04-02 19:58:54 -04:00
commit 4ef0f26b79
2 changed files with 23 additions and 24 deletions

View File

@ -1323,7 +1323,7 @@ sh.tempDir(function(err, tmp) {
});
```
#### sh.mkdirp(callback)<a name="mkdirp"></a>
#### sh.mkdirp(path, callback)<a name="mkdirp"></a>
Recursively creates the directory at the provided path. If the
directory already exists, no error is returned. All parents must

View File

@ -365,7 +365,7 @@ 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 === '/') {
@ -374,10 +374,23 @@ define(function(require) {
}
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;
}
});
}