-
Notifications
You must be signed in to change notification settings - Fork 1
/
mkdirp.cfc
97 lines (83 loc) · 2.8 KB
/
mkdirp.cfc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/**
*
* @file /home/likewise-open/UCADS/slamkajs/Sites/foundry/mkdirp.cfc
* @author Justin Slamka
* @description Mimics mkdir -p
*
*/
component output="false" displayname="mkdirp" extends="foundry.core" {
variables.path = require('path');
variables.fs = require('fs');
variables.futil = createObject("java","org.apache.commons.io.FileUtils");
variables._ = require('util').init();
public void function mkdirp (p, mode, f, made) {
if (_.isFunction(mode) || mode EQ '') {
f = mode;
mode = 0777; // & (~process.umask());
}
if (!structKeyExists(arguments, 'made')) made = '';
var noop = function() {}
var cb = (_.isFunction(f)) ? f : noop;
//if (!isNumeric(mode)) mode = FormatBaseN(LSParseNumber(mode), 8);
p = path.resolve(p);
currFile = createObject("java", "java.io.File").init(p);
cb(futil.forceMkdir(currFile));
// fs.mkdir(currFile, mode, function(er) {
// if (!structKeyExists(arguments, 'er') || _.isEmpty(arguments.er)) {
// made = (!_.isEmpty(made)) ? made : p;
// cb("", made);
// return false;
// }
// switch (er.errorCode) {
// case 'ENOENT':
// mkdirp(path.dirname(p), mode, function (er, made) {
// if (er) cb(er, made);
// else mkdirP(p, mode, cb, made);
// });
// break;
// default:
// fs.stat(p, function(er2, stat) {
// if (structKeyExists(arguments, 'er2') || !directoryExists(stat)) {
// cb(er, made);
// } else {
// cb("", made);
// }
// });
// break;
// }
// });
}
public any function sync(p, mode, made) {
if (mode EQ null) {
mode = 0777; // & (~process.umask());
}
if (!made) made = null;
if (!isNumeric(mode)) mode = FormatBaseN(LSParseNumber(mode), 8);
p = path.resolve(p);
try {
fs.mkdir(p, mode);
made = made || p;
} catch (err0) {
switch (err0.code) {
case 'ENOENT':
made = sync(path.dirname(p), mode, made);
sync(p, mode, made);
break;
// In the case of any other error, just see if there's a dir
// there already. If so, then hooray! If not, then something
// is borked.
default:
var stat = '';
try {
stat = fs.statSync(p);
}
catch (err1) {
throw err0;
}
if (!directoryExists(stat)) throw err0;
break;
}
}
return made;
};
}