kopia lustrzana https://github.com/c9/core
Refactor spawn; always show stderr messages
rodzic
787182b0aa
commit
c1b4e2630f
|
@ -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 {
|
||||||
|
|
Ładowanie…
Reference in New Issue