UNPKG

mecano

Version:

Common functions for system deployment.

98 lines (90 loc) 2.71 kB
// Generated by CoffeeScript 1.7.1 var child, conditions, each, fs, misc, write; fs = require('ssh2-fs'); each = require('each'); misc = require('./misc'); conditions = require('./misc/conditions'); child = require('./misc/child'); write = require('./write'); module.exports = function(goptions, options, callback) { var clean, finish, result, _ref; _ref = misc.args(arguments), goptions = _ref[0], options = _ref[1], callback = _ref[2]; clean = function(content, undefinedOnly) { var k, v; for (k in content) { v = content[k]; if (v && typeof v === 'object') { content[k] = clean(v, undefinedOnly); continue; } if (typeof v === 'undefined') { delete content[k]; } if (!undefinedOnly && v === null) { delete content[k]; } } return content; }; result = child(); finish = function(err, written) { if (callback) { callback(err, written); } return result.end(err, written); }; misc.options(options, function(err, options) { var written; if (err) { return finish(err); } written = 0; return each(options).parallel(goptions.parallel).on('item', function(options, next) { var content, destination, do_get, do_write, merge, ssh; merge = options.merge, destination = options.destination, content = options.content, ssh = options.ssh; if (!content) { return next(new Error('Missing content')); } if (!destination) { return next(new Error('Missing destination')); } do_get = function() { if (!merge) { return do_write(); } return fs.exists(ssh, destination, function(err, exists) { if (err) { return next(err); } if (!exists) { return do_write(); } return fs.readFile(ssh, destination, 'ascii', function(err, c) { var parse; if (err && err.code !== 'ENOENT') { return next(err); } content = clean(content, true); parse = options.parse || misc.ini.parse; content = misc.merge(parse(c, options), content); return do_write(); }); }); }; do_write = function() { var stringify; clean(content); stringify = options.stringify || misc.ini.stringify; options.content = stringify(content, options); return write(options, function(err, w) { written += w; return next(err); }); }; return do_get(); }).on('both', function(err) { return finish(err, written); }); }); return result; };