Initial commit
[yaffs-website] / node_modules / gulp / node_modules / vinyl-fs / lib / dest / writeContents / index.js
1 'use strict';
2
3 var fs = require('fs');
4 var writeDir = require('./writeDir');
5 var writeStream = require('./writeStream');
6 var writeBuffer = require('./writeBuffer');
7
8 function writeContents(writePath, file, cb) {
9   var written = function(err) {
10     var done = function(err) {
11       cb(err, file);
12     };
13     if (err) {
14       return done(err);
15     }
16
17     if (!file.stat || typeof file.stat.mode !== 'number') {
18       return done();
19     }
20
21     fs.stat(writePath, function(err, st) {
22       if (err) {
23         return done(err);
24       }
25       // octal 7777 = decimal 4095
26       var currentMode = (st.mode & 4095);
27       if (currentMode === file.stat.mode) {
28         return done();
29       }
30       fs.chmod(writePath, file.stat.mode, done);
31     });
32   };
33
34   // if directory then mkdirp it
35   if (file.isDirectory()) {
36     writeDir(writePath, file, written);
37     return;
38   }
39
40   // stream it to disk yo
41   if (file.isStream()) {
42     writeStream(writePath, file, written);
43     return;
44   }
45
46   // write it like normal
47   if (file.isBuffer()) {
48     writeBuffer(writePath, file, written);
49     return;
50   }
51
52   // if no contents then do nothing
53   if (file.isNull()) {
54     cb(null, file);
55     return;
56   }
57 }
58
59 module.exports = writeContents;