Skip to content

Commit

Permalink
Add exit handling, lerna-debug.log, and improve log messages
Browse files Browse the repository at this point in the history
  • Loading branch information
jamiebuilds committed Feb 22, 2016
1 parent 39ddc5f commit 9509cf9
Show file tree
Hide file tree
Showing 8 changed files with 113 additions and 21 deletions.
7 changes: 4 additions & 3 deletions lib/commands/bootstrap/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
var bootstrapPackages = require("./bootstrapPackages");
var logger = require("../../utils/logger");
var exit = require("../../utils/exit");

module.exports = function bootstrap(config) {
bootstrapPackages(
Expand All @@ -8,11 +9,11 @@ module.exports = function bootstrap(config) {
config.independent,
function(err, packages) {
if (err) {
logger.log("error", err);
process.exit(1);
logger.log("error", "Errored while bootstrapping packages.", false, err);
exit(1);
} else {
logger.log("success", "Successfully bootstrapped " + packages.length + " packages.");
process.exit();
exit(0);
}
}
);
Expand Down
7 changes: 6 additions & 1 deletion lib/commands/bootstrap/linkDependencies.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ module.exports = function linkDependencies(
var completed = false;
var tick = progressBar(packages.length);

logger.log("info", "linkDependencies()", true);
logger.log("info", "Linking all dependencies", true);

async.parallelLimit(packages.map(function (root) {
return function (done) {
Expand Down Expand Up @@ -55,6 +55,11 @@ module.exports = function linkDependencies(
tick.terminate();
// don't display the ticker if we hit an error and we still have workers
completed = true;
if (err) {
logger.log("error", "Errored while linking all dependencies", true, err);
} else {
logger.log("success", "Successfully linked all dependencies", true);
}
callback(err);
});
}
3 changes: 2 additions & 1 deletion lib/commands/diff/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ var logger = require("../../utils/logger");
var child = require("child_process");
var pager = require("default-pager");
var path = require("path");
var exit = require("../../utils/exit");

module.exports = function (config, cli) {
var packageName = cli.input[1];
Expand All @@ -14,7 +15,7 @@ module.exports = function (config, cli) {

if (!fsUtils.existsSync(pkgLoc)) {
logger.log("error", "Package '" + packageName + "' does not exist.");
process.exit(1);
exit(1);
}

filePath += "/" + packageName;
Expand Down
7 changes: 4 additions & 3 deletions lib/commands/publish/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
var publishChangedPackages = require("./publishChangedPackages");
var logger = require("../../utils/logger");
var exit = require("../../utils/exit");

module.exports = function publish(config) {
publishChangedPackages(
Expand All @@ -9,8 +10,8 @@ module.exports = function publish(config) {
config.independent,
function(err, changedPackages, versions) {
if (err) {
logger.log("error", "There was a problem publishing.", false, err);
process.exit(1);
logger.log("error", "Errored while publishing.", false, err);
exit(1);
} else {
var message = "Successfully published:";

Expand All @@ -19,7 +20,7 @@ module.exports = function publish(config) {
});

logger.log("success", message);
process.exit();
exit(0);
}
}
);
Expand Down
9 changes: 5 additions & 4 deletions lib/commands/run/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
var runScriptInPackages = require("./runScriptInPackages");
var getPackages = require("../../utils/getPackages");
var logger = require("../../utils/logger");
var exit = require("../../utils/exit");

module.exports = function (config) {
var args = (process.argv || []).slice(3);
Expand All @@ -16,19 +17,19 @@ module.exports = function (config) {

if (!packages.length) {
logger.log("error", "No packages found with the npm script '" + script + "'");
process.exit(1);
exit(1);
}

runScriptInPackages(packages, script, args, function(err) {
if (err) {
logger.log("error", "There was a problem running npm script '" + script + "' in packages.", false, err);
process.exit(1);
logger.log("error", "Errored while running npm script '" + script + "' in packages.", false, err);
exit(1);
} else {
logger.log("success", "Successfully ran npm script '" + script + "' in packages:");
logger.log("success", packages.map(function (pkg) {
return "- " + pkg.name;
}).join("\n"));
process.exit();
exit(0);
}
});
};
5 changes: 3 additions & 2 deletions lib/utils/checkUpdatedPackages.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@ var getPackages = require("./getPackages");
var progressBar = require("./progressBar");
var gitUtils = require("./gitUtils");
var logger = require("./logger");
var exit = require("./exit");

module.exports = function checkUpdatedPackages(packagesLoc) {
var changedPackages = [];
var FORCE_VERSION = process.env.FORCE_VERSION;

FORCE_VERSION = FORCE_VERSION ? FORCE_VERSION.split(",") : [];

logger.log("info", "Checking packages...");
logger.log("info", "Checking for updated packages...");

var packages = getPackages(packagesLoc);

Expand Down Expand Up @@ -58,7 +59,7 @@ module.exports = function checkUpdatedPackages(packagesLoc) {

if (!changedPackages.length && !FORCE_VERSION.length) {
logger.log("error", "No updated packages to publish.");
process.exit(1);
exit(1);
} else {
return changedPackages;
}
Expand Down
49 changes: 49 additions & 0 deletions lib/utils/exit.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
var fsUtils = require("./fsUtils");
var logger = require("./logger");
var path = require("path");
var pad = require("pad")

function formatType(type) {
return pad("lerna(" + type + ")", 15, " ");
}

var errorsSeen = [];

function formatError(error) {
var message = [];
var hasSeen = errorsSeen.indexOf(error) > -1;

if (!error) {
return "";
}

if (!hasSeen) {
errorsSeen.push(error);
if (error.message) message.push(error.message);
if (error.stack) message.push(error.stack);
if (!message.length) message.push(error);
}

message = message.join("\n").split("\n").map(function(line) {
return " " + line;
}).join("\n");

return "\n" + message;
}

function formatLog(log) {
return formatType(log.type) + log.message + formatError(log.error);
}

module.exports = function exit(code) {
if (!code || code === 0) {
process.exit(0);
}

var filePath = path.join(process.cwd(), "lerna-debug.log");
var fileContent = logger.getLogs().map(formatLog).join("\n");

fsUtils.writeFileSync(filePath, fileContent);

process.exit(code);
};
47 changes: 40 additions & 7 deletions lib/utils/logger.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
var chalk = require("chalk");
var pad = require("pad");

var colors = {
info: null, // No color for you
Expand Down Expand Up @@ -31,25 +32,47 @@ function getLogs() {
return logs;
}

var cwd = process.cwd();

function formatArg(arg) {
if (typeof arg === "function") {
return "function " + arg.name + "() {...}";
}

return (JSON.stringify(arg) || "").replace(cwd, ".");
}

function formatArgs(args) {
return args.map(formatArg).join(", ");
}

function formatMethod(method, args) {
return pad(method, 30, " ") + "(" + formatArgs(args) + ")";
}

// I'm sorry that the below code is kinda gross.

function logifyAsync(message, method) {
return function() {
log("info", message, true);

var length = arguments.length;
var callback = arguments[length - 1];
var args = Array(length);

// copy arguments
for (var i = 0; i < length - 1; i++) {
for (var i = 0; i < length; i++) {
args[i] = arguments[i];
}

message = formatMethod(message, args);

log("info", message, true);

// wrap final callback
args[length - 1] = function(error) {
args[length - 1] = function(error, value) {
if (error) {
log("error", message, true);
} else {
log("success", message, true);
log("success", message + " => " + formatArg(value), true);
}

callback.apply(null, arguments);
Expand All @@ -61,10 +84,20 @@ function logifyAsync(message, method) {

function logifySync(message, method) {
return function() {
var length = arguments.length;
var args = Array(length);
// copy arguments
for (var i = 0; i < length; i++) {
args[i] = arguments[i];
}

message = formatMethod(message, args);

log("info", message, true);

try {
var result = method.apply(null, arguments);
log("success", message, true);
var result = method.apply(null, args);
log("success", message + " => " + formatArg(result), true);
return result;
} catch (error) {
log("error", message, true, error);
Expand Down

0 comments on commit 9509cf9

Please sign in to comment.