Refactor spawn; always show stderr messages

pull/85/head^2
Alex Brausewetter 2015-05-05 17:33:13 +00:00
rodzic 787182b0aa
commit c1b4e2630f
1 zmienionych plików z 53 dodań i 78 usunięć

Wyświetl plik

@ -190,6 +190,32 @@ define(function(require, exports, module) {
/***** Methods *****/ /***** Methods *****/
function spawn(command, options, callback) {
if (options.stdio == null) {
// if verbose, echo stdout
// always echo stderr
options.stdio = [
"pipe",
verbose ? process.stdout : "ignore",
process.stderr
];
}
proc.spawn(command, options, function(err, child) {
if (err) return callback(err);
child.on("exit", function(code) {
if (code !== 0) {
var error = new Error("Command failed: " + command);
error.code = code;
return callback(error);
}
callback();
});
});
}
function install(packageName, options, callback){ function install(packageName, options, callback){
// Call install url // Call install url
var parts = packageName.split("@"); var parts = packageName.split("@");
@ -267,27 +293,12 @@ define(function(require, exports, module) {
if (err) return callback(err); if (err) return callback(err);
function installNPM(){ function installNPM(){
proc.spawn(join(process.env.HOME, ".c9/node/bin/npm"), { spawn(join(process.env.HOME, ".c9/node/bin/npm"), {
args: ["install"], args: ["install"],
cwd: packagePath cwd: packagePath
}, function(err, p){ }, function(err) {
if (err) return callback(err); if (err) return callback(err);
callback(null, { version: version });
if (verbose) {
p.stdout.on("data", function(c){
process.stdout.write(c.toString("utf8"));
});
p.stderr.on("data", function(c){
process.stderr.write(c.toString("utf8"));
});
}
p.on("exit", function(code){
// Done
callback(err, {
version: version
});
});
}); });
} }
@ -350,32 +361,20 @@ define(function(require, exports, module) {
console.log("Unpacking", gzPath, "to", packagePath); console.log("Unpacking", gzPath, "to", packagePath);
// Untargz package // Untargz package
proc.spawn(TAR, { spawn(TAR, {
args: [ args: [
(verbose ? "-v" : ""), (verbose ? "-v" : ""),
"-C", normalizePath(packagePath), "-C", normalizePath(packagePath),
"-zxf", normalizePath(gzPath) "-zxf", normalizePath(gzPath)
] ]
}, function(err, p){ }, function(err) {
if (err) return callback(err); if (err) {
var error = new Error("Failed to unpack package");
if (verbose) { error.code = err.code;
p.stdout.on("data", function(c){ return callback(error);
process.stdout.write(c.toString("utf8"));
});
p.stderr.on("data", function(c){
process.stderr.write(c.toString("utf8"));
});
} }
p.on("exit", function(code){ installNPM();
var err = code !== 0
? new Error("Failed to unpack package")
: null;
if (err) return callback(err);
installNPM();
});
}); });
}); });
}); });
@ -396,28 +395,16 @@ define(function(require, exports, module) {
// Git clone repository // Git clone repository
var scm = SCM[repository.type]; var scm = SCM[repository.type];
proc.spawn(scm.binary, { spawn(scm.binary, {
args: [scm.clone, repository.url, packagePath] args: [scm.clone, repository.url, packagePath]
}, function(err, p){ }, function(err) {
if (err) return callback(err); if (err) {
var error = new Error("Failed to clone package from repository. Do you have access?");
if (verbose) { error.code = err.code;
p.stdout.on("data", function(c){ return callback(error);
process.stdout.write(c.toString("utf8"));
});
p.stderr.on("data", function(c){
process.stderr.write(c.toString("utf8"));
});
} }
p.on("exit", function(code){ callback();
var err = code !== 0
? new Error("Failed to clone package from repository. Do you have access?")
: null;
// Done
callback(err);
});
}); });
}); });
} }
@ -490,31 +477,19 @@ define(function(require, exports, module) {
if (options.local || options.debug) { if (options.local || options.debug) {
// rm -Rf // rm -Rf
var packagePath = process.env.HOME + "/.c9/plugins/" + name; var packagePath = process.env.HOME + "/.c9/plugins/" + name;
proc.spawn("rm", { spawn("rm", {
args: ["-rf", packagePath] args: ["-rf", packagePath]
}, function(err, p){ }, function(err) {
if (err) return callback(err); if (err) {
var error = new Error("Failed to remove package.");
if (verbose) { error.code = err.code;
p.stdout.on("data", function(c){ return callback(error);
process.stdout.write(c.toString("utf8"));
});
p.stderr.on("data", function(c){
process.stderr.write(c.toString("utf8"));
});
} }
p.on("exit", function(code){ // if debug > see if should be installed and put back original
var err = code !== 0 // @TODO
? new Error("Failed to remove package.")
: null; callback();
// if debug > see if should be installed and put back original
// @TODO
// Done
callback(err);
});
}); });
} }
else { else {