mecano
Version:
Common functions for system deployment.
74 lines (70 loc) • 2.13 kB
JavaScript
// Generated by CoffeeScript 1.11.1
var fs, path;
module.exports = function(options, callback) {
var cmd, dir, ext, format, name;
options.log({
message: "Entering compress",
level: 'DEBUG',
module: 'mecano/lib/compress'
});
if (!options.source) {
return callback(new Error("Missing source: " + options.source));
}
if (!options.target) {
return callback(new Error("Missing target: " + options.target));
}
options.source = path.normalize(options.source);
options.target = path.normalize(options.target);
dir = path.dirname(options.source);
name = path.basename(options.source);
if (options.format != null) {
format = options.format;
} else {
if (/\.(tar\.gz|tgz)$/.test(options.target)) {
format = 'tgz';
} else if (/\.tar$/.test(options.target)) {
format = 'tar';
} else if (/\.zip$/.test(options.target)) {
format = 'zip';
} else if (/\.bz2$/.test(options.target)) {
format = 'bz2';
} else if (/\.xz$/.test(options.target)) {
format = 'xz';
} else {
ext = path.extname(options.source);
return callback(Error("Unsupported extension, got " + (JSON.stringify(ext))));
}
}
cmd = null;
switch (format) {
case 'tgz':
cmd = "tar czf " + options.target + " -C " + dir + " " + name;
break;
case 'tar':
cmd = "tar cf " + options.target + " -C " + dir + " " + name;
break;
case 'bz2':
cmd = "tar cjf " + options.target + " -C " + dir + " " + name;
break;
case 'xz':
cmd = "tar cJf " + options.target + " -C " + dir + " " + name;
break;
case 'zip':
cmd = "(cd " + dir + " && zip -r " + options.target + " " + name + " && cd -)";
}
return this.execute({
cmd: cmd
}, function(err, created) {
if (err) {
return callback(err);
}
return fs.exists(options.ssh, options.target, function(err, exists) {
if (!exists) {
return callback(new Error("Failed to create '" + options.target + "'"));
}
return callback(null, true);
});
});
};
fs = require('ssh2-fs');
path = require('path');