1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- var common = require('./common');
- var fs = require('fs');
- var path = require('path');
-
- // Recursively creates 'dir'
- function mkdirSyncRecursive(dir) {
- var baseDir = path.dirname(dir);
-
- // Base dir exists, no recursion necessary
- if (fs.existsSync(baseDir)) {
- fs.mkdirSync(dir, parseInt('0777', 8));
- return;
- }
-
- // Base dir does not exist, go recursive
- mkdirSyncRecursive(baseDir);
-
- // Base dir created, can create dir
- fs.mkdirSync(dir, parseInt('0777', 8));
- }
-
- //@
- //@ ### mkdir([options ,] dir [, dir ...])
- //@ ### mkdir([options ,] dir_array)
- //@ Available options:
- //@
- //@ + `p`: full path (will create intermediate dirs if necessary)
- //@
- //@ Examples:
- //@
- //@ ```javascript
- //@ mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
- //@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
- //@ ```
- //@
- //@ Creates directories.
- function _mkdir(options, dirs) {
- options = common.parseOptions(options, {
- 'p': 'fullpath'
- });
- if (!dirs)
- common.error('no paths given');
-
- if (typeof dirs === 'string')
- dirs = [].slice.call(arguments, 1);
- // if it's array leave it as it is
-
- dirs.forEach(function(dir) {
- if (fs.existsSync(dir)) {
- if (!options.fullpath)
- common.error('path already exists: ' + dir, true);
- return; // skip dir
- }
-
- // Base dir does not exist, and no -p option given
- var baseDir = path.dirname(dir);
- if (!fs.existsSync(baseDir) && !options.fullpath) {
- common.error('no such file or directory: ' + baseDir, true);
- return; // skip dir
- }
-
- if (options.fullpath)
- mkdirSyncRecursive(dir);
- else
- fs.mkdirSync(dir, parseInt('0777', 8));
- });
- } // mkdir
- module.exports = _mkdir;
|