-
Notifications
You must be signed in to change notification settings - Fork 4
/
tmpdir.js
128 lines (85 loc) · 2.56 KB
/
tmpdir.js
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
var fs = require('fs')
, path = require('path')
, rimraf = require('rimraf')
;
var TMPDIR = process.env['TMPDIR'] || '/tmp'
, PID = process.pid
, MODE = 0755
;
var counter = 0
;
/******************************************************************************
* Initialization
*/
var proc_tmpdir_path = path.join(TMPDIR, '' + PID)
;
//clears the process tmpdir if it already exists
try {
rimraf.sync(proc_tmpdir_path);
} catch(err) {
if (err.code !== 'ENOENT') {
throw err;
}
}
//creates a new process tmpdir
fs.mkdirSync(proc_tmpdir_path, MODE);
//exports the proc_tmpdir_path
exports.path = proc_tmpdir_path;
/******************************************************************************
* ChildTmpdir constructor
*
* @param id {Number} The id of the ChildTmpdir
*/
function ChildTmpdir(id) {
if (typeof id === 'undefined') {
throw 'ChildTmpdir needs a defined id';
}
this.id = id;
this.path = path.join(proc_tmpdir_path, '' + id);
}
/**
* Clears the tmpdir by removing it and re-creating it.
*
* @param callback {function} A callback of the form `function(err)`
*/
ChildTmpdir.prototype.clear = function(callback) {
return clear_tmpdir(this.id, callback);
}
/******************************************************************************
* Makes a unique directory in the current process' tmpdir and returns its
* path.
*
* @param mode {Number} (optional) The mode of the wanted directory. Defaults
* to 0750 or [drwxr-x---]
*
* @returns {String} The id of the created unique directory.
*/
function mkuniqueSync_tmpdir(mode) {
var id = counter++
, unique_dir_path = path.join(proc_tmpdir_path, '' + id)
;
mode = mode || MODE
fs.mkdirSync(unique_dir_path, MODE);
return new ChildTmpdir(id);
}
exports.mkuniqueSync = mkuniqueSync_tmpdir;
/******************************************************************************
* Clears the process tmpdir by removing it and re-creating it.
*
* @param callback {function} A callback of the form `function(err)`
*/
function clear_tmpdir() {
var args = Array.prototype.slice.call(arguments)
, callback = args.pop()
, dir_id = (typeof args[0] === 'undefined' ? '' : args.shift())
, dir_path = path.join(proc_tmpdir_path, '' + dir_id)
;
rimraf(dir_path, function(err) {
if (err) {
callback(err);
} else {
fs.mkdir(dir_path, MODE, callback);
}
});
}
exports.clear = clear_tmpdir;