kopia lustrzana https://github.com/c9/core
147 wiersze
4.7 KiB
JavaScript
147 wiersze
4.7 KiB
JavaScript
|
define(function(require, exports, module) {
|
||
|
main.consumes = [
|
||
|
"Plugin", "installer"
|
||
|
];
|
||
|
main.provides = ["installer.cli"];
|
||
|
return main;
|
||
|
|
||
|
/*
|
||
|
- Always assume one session
|
||
|
- Start immediately
|
||
|
*/
|
||
|
|
||
|
function main(options, imports, register) {
|
||
|
var Plugin = imports.Plugin;
|
||
|
var installer = imports.installer;
|
||
|
|
||
|
var RED = "\x1b[01;31m";
|
||
|
var GREEN = "\x1b[01;32m";
|
||
|
var YELLOW = "\x1b[01;33m";
|
||
|
var BLUE = "\x1b[01;34m";
|
||
|
var MAGENTA = "\x1b[01;35m";
|
||
|
var LIGHTBlUE = "\x1b[01;94m";
|
||
|
var RESETCOLOR = "\x1b[0m";
|
||
|
var BOLD = "\x1b[01;1m";
|
||
|
var UNBOLD = "\x1b[01;21m";
|
||
|
|
||
|
var verbose = true;
|
||
|
|
||
|
/***** Initialization *****/
|
||
|
|
||
|
var plugin = new Plugin("Ajax.org", main.consumes);
|
||
|
// var emit = plugin.getEmitter();
|
||
|
|
||
|
function load() {
|
||
|
installer.$setPtyExec(function(options, callback) {
|
||
|
var cwd = options.cwd;
|
||
|
if (cwd && cwd.charAt(0) == "~")
|
||
|
cwd = process.env.HOME + "/" + cwd.substr(1);
|
||
|
var childProcess = require("child_process");
|
||
|
var p = childProcess.spawn("bash", [
|
||
|
"-c", options.code
|
||
|
].concat(options.args || []), {
|
||
|
stdio: [
|
||
|
process.stdin,
|
||
|
verbose ? process.stdout : "ignore",
|
||
|
verbose ? process.stderr : "ignore"
|
||
|
],
|
||
|
cwd: cwd
|
||
|
});
|
||
|
p.on("close", function(code) {
|
||
|
if (!code) callback();
|
||
|
else callback(new Error("Failed " + options.name + ". Exit code " + code));
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// Hook the creation of new sessions
|
||
|
installer.on("beforeStart", function(e) {
|
||
|
start(e.session);
|
||
|
}, plugin);
|
||
|
}
|
||
|
|
||
|
/***** Methods *****/
|
||
|
|
||
|
function start(session, callback) {
|
||
|
// Start Installation
|
||
|
if (verbose) {
|
||
|
logln("Installation Started", LIGHTBlUE);
|
||
|
logln("");
|
||
|
}
|
||
|
else {
|
||
|
log("Installing Dependencies...", LIGHTBlUE);
|
||
|
}
|
||
|
|
||
|
session.on("run", function() {
|
||
|
if (!verbose) return;
|
||
|
|
||
|
var heading = "Package " + session.package.name
|
||
|
+ " " + (session.package.version || "");
|
||
|
logln(heading + "\n" + Array(heading.length + 1).join("-"));
|
||
|
});
|
||
|
|
||
|
var lastOptions;
|
||
|
session.on("each", function(e) {
|
||
|
if (!verbose) return;
|
||
|
|
||
|
if (lastOptions != e.options) {
|
||
|
lastOptions = e.options;
|
||
|
if (e.options.name) {
|
||
|
logln("Installing " + e.options.name, BLUE);
|
||
|
logln("");
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
session.on("data", function(e) {
|
||
|
if (!verbose) return;
|
||
|
|
||
|
log(e.data);
|
||
|
});
|
||
|
|
||
|
session.start(function(err) {
|
||
|
if (err) {
|
||
|
logln("\n" + err.message + "\n\n" + RED
|
||
|
+ "One or more errors occured. "
|
||
|
+ "Please try to resolve them and "
|
||
|
+ "try again or contact support@c9.io. "
|
||
|
+ (!verbose ? "Use --verbose to see more output." : "")
|
||
|
+ RESETCOLOR);
|
||
|
}
|
||
|
else if (verbose) {
|
||
|
logln("");
|
||
|
logln("Installation Completed.", LIGHTBlUE);
|
||
|
}
|
||
|
else {
|
||
|
logln(" [Done]", LIGHTBlUE);
|
||
|
}
|
||
|
}, true);
|
||
|
}
|
||
|
|
||
|
function log(msg, color, unset) {
|
||
|
logln(msg, color, unset, true);
|
||
|
}
|
||
|
|
||
|
function logln(msg, color, unset, noLineEnd) {
|
||
|
process.stdout.write((color || "") + msg + (color ? unset || RESETCOLOR : "") + (noLineEnd ? "" : "\n"));
|
||
|
}
|
||
|
|
||
|
/***** Lifecycle *****/
|
||
|
|
||
|
plugin.on("load", function() {
|
||
|
load();
|
||
|
});
|
||
|
plugin.on("unload", function() {
|
||
|
verbose = true;
|
||
|
});
|
||
|
|
||
|
/***** Register and define API *****/
|
||
|
|
||
|
plugin.freezePublicAPI({
|
||
|
get verbose() { return verbose; },
|
||
|
set verbose(v) { verbose = v; }
|
||
|
});
|
||
|
|
||
|
register(null, {
|
||
|
"installer.cli": plugin
|
||
|
});
|
||
|
}
|
||
|
});
|