You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.2 KiB
59 lines
1.2 KiB
'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;
|
|
|