c9-core/node_modules/c9/atomic.js

27 wiersze
883 B
JavaScript

var fs = require("fs");
var tmp = require("tmp");
var async = require("async");
var dirname = require("path").dirname;
exports.writeFile = function(path, data, options, callback) {
if (typeof options == "function")
return exports.writeFile(path, data, null, options);
async.waterfall([
tmp.file.bind(null, {dir: dirname(path)}),
function(tmpFile, fd, nextOrRemoveCallback, next) {
if (!next) next = nextOrRemoveCallback; // api changed between tmp 0.23 and 0.24
fs.close(fd, function(err) {
next(err, tmpFile);
});
},
function(tmpFile, next) {
fs.writeFile(tmpFile, data, options, function(err) {
next(err, tmpFile);
});
},
function(tmpFile, next) {
fs.rename(tmpFile, path, next);
}
], callback);
};