-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathfsutil.js
More file actions
131 lines (114 loc) · 3.36 KB
/
fsutil.js
File metadata and controls
131 lines (114 loc) · 3.36 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
var fs = require('fs');
var pth = require('path');
var util = require('util');
pth.sep = pth.sep || (process.platform == 'win32' ? '\\' : '/');
var rm_rf = function(path) {
try {
var stat = fs.lstatSync(path);
} catch(e) {
return false;
}
if (stat.isDirectory()) {
fs.readdirSync(path).forEach(function (filename) {
rm_rf(pth.join(path, filename));
});
fs.rmdirSync(path);
} else {
fs.unlinkSync(path);
}
}
var _mkdir_p = function(path_segments) {
var base = '';
var paths_to_create = [];
if (!path_segments.every(function (segment) {
base = pth.join(base, segment);
if (!fs.existsSync(base)) {
paths_to_create.push(base);
return true;
}
return fs.statSync(base).isDirectory();
})) {
return false;
}
paths_to_create.forEach(function (segment) {
fs.mkdirSync(segment);
});
}
var mkdir_p = function(path) {
return _mkdir_p(pth.normalize(path).split(pth.sep));
}
var fwrite_p = function(path, data) {
var path_segments = pth.normalize(path).split(pth.sep);
_mkdir_p(path_segments.slice(0, path_segments.length - 1));
return fs.writeFileSync(path, data);
}
var cp = function(src, dst) {
var block_size = 4096;
var buf = new Buffer(block_size);
var fd_src = fs.openSync(src, 'r');
var fd_dst = fs.openSync(dst, 'w');
var offset = 0;
var remain = fs.statSync(src).size;
var read_size = 0;
while (remain) {
read_size = remain < block_size ? remain : block_size;
fs.readSync(fd_src, buf, offset, read_size);
fs.writeSync(fd_dst, buf, offset, read_size);
remain -= read_size;
offset += read_size;
}
fs.closeSync(fd_src);
fs.closeSync(fd_dst);
}
var cp_r = function(src, dst) {
var self = this;
if (fs.statSync(src).isDirectory()) {
fs.mkdirSync(dst);
var files = fs.readdirSync(src);
files.forEach(function (filename) {
self.cp_r(pth.join(src, filename), pth.join(dst, filename));
});
} else {
cp(src, dst);
}
}
var ln_sf = function(src, path) {
if (fs.existsSync(path)) {
if (fs.statSync(path).isDirectory()) {
var segments = src.split(pth.sep);
filename = segments.split(pth.sep)[segments.length - 1]
fs.symlinkSync(src, pth.join(path, filename));
} else {
fs.unlinkSync(path);
fs.symlinkSync(src, path);
}
} else {
fs.symlinkSync(src, path);
}
}
var chown_R = function(uid, gid, path) {
var self = this;
if (fs.statSync(path).isDirectory()) {
var files = fs.readdirSync(path);
files.forEach(function (filename) {
self.chown_R(uid, gid, pth.join(path, filename));
});
fs.chownSync(path, uid, gid);
} else {
fs.chownSync(path, uid, gid);
}
}
exports.rm_rf = rm_rf;
exports.mkdir_p = mkdir_p;
exports.fwrite_p = fwrite_p;
exports.cp = cp;
exports.cp_r = cp_r;
exports.ln_s = fs.symlinkSync;
exports.ln_sf = ln_sf;
exports.cd = process.chdir;
exports.pwd = process.cwd;
exports.mv = fs.renameSync;
exports.rm = fs.unlinkSync;
exports.chmod = function(mode, path) { return fs.chmodSync(path, mode); };
exports.chown = function(uid, gid, path) { return fs.chownSync(path, uid, gid); };
exports.chown_R = chown_R;