60 lines
1.2 KiB
JavaScript
60 lines
1.2 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var fs = require('fs');
|
||
|
var writeDir = require('./writeDir');
|
||
|
var writeStream = require('./writeStream');
|
||
|
var writeBuffer = require('./writeBuffer');
|
||
|
|
||
|
function writeContents(writePath, file, cb) {
|
||
|
var written = function(err) {
|
||
|
var done = function(err) {
|
||
|
cb(err, file);
|
||
|
};
|
||
|
if (err) {
|
||
|
return done(err);
|
||
|
}
|
||
|
|
||
|
if (!file.stat || typeof file.stat.mode !== 'number') {
|
||
|
return done();
|
||
|
}
|
||
|
|
||
|
fs.stat(writePath, function(err, st) {
|
||
|
if (err) {
|
||
|
return done(err);
|
||
|
}
|
||
|
// octal 7777 = decimal 4095
|
||
|
var currentMode = (st.mode & 4095);
|
||
|
if (currentMode === file.stat.mode) {
|
||
|
return done();
|
||
|
}
|
||
|
fs.chmod(writePath, file.stat.mode, done);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
// if directory then mkdirp it
|
||
|
if (file.isDirectory()) {
|
||
|
writeDir(writePath, file, written);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// stream it to disk yo
|
||
|
if (file.isStream()) {
|
||
|
writeStream(writePath, file, written);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// write it like normal
|
||
|
if (file.isBuffer()) {
|
||
|
writeBuffer(writePath, file, written);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// if no contents then do nothing
|
||
|
if (file.isNull()) {
|
||
|
cb(null, file);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = writeContents;
|