Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Logging #63

Merged
merged 4 commits into from
Feb 23, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 2 additions & 3 deletions bin/lerna.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env node

var commands = require("../lib/commands");
var chalk = require("chalk");
var logger = require("../lib/utils/logger");
var meow = require("meow");
var init = require("../lib/init");

Expand Down Expand Up @@ -31,8 +31,7 @@ var commandName = cli.input[0];
var command = commands[commandName];

if (!command) {
console.log();
console.log(chalk.red(" Invalid command: " + chalk.bold(commandName)));
logger.log("red", "Invalid command: " + commandName);
cli.showHelp();
}

Expand Down
13 changes: 6 additions & 7 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 chalk = require("chalk");
var logger = require("../../utils/logger");
var exit = require("../../utils/exit");

module.exports = function bootstrap(config) {
bootstrapPackages(
Expand All @@ -8,13 +9,11 @@ module.exports = function bootstrap(config) {
config.independent,
function(err, packages) {
if (err) {
console.error(err);
console.log();
process.exit(1);
logger.log("error", "Errored while bootstrapping packages.", false, err);
exit(1);
} else {
console.log(chalk.green("Successfully bootstrapped " + packages.length + " packages."));
console.log();
process.exit();
logger.log("success", "Successfully bootstrapped " + packages.length + " packages.");
exit(0);
}
}
);
Expand Down
29 changes: 13 additions & 16 deletions lib/commands/bootstrap/linkDependencies.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,11 @@
var linkDependenciesForPackage = require("./linkDependenciesForPackage");
var progressBar = require("../../utils/progressBar");
var mkdirp = require("mkdirp");
var child = require("child_process");
var npmUtils = require("../../utils/npmUtils");
var fsUtils = require("../../utils/fsUtils");
var logger = require("../../utils/logger");
var async = require("async");
var path = require("path");

function npmInstallInDir(dir, callback) {
child.exec("npm install", {
cwd: dir
}, function (err, stdout, stderr) {
if (err != null) {
callback(stderr);
} else {
callback();
}
});
}

module.exports = function linkDependencies(
packages,
packagesLoc,
Expand All @@ -27,18 +16,20 @@ module.exports = function linkDependencies(
var completed = false;
var tick = progressBar(packages.length);

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

async.parallelLimit(packages.map(function (root) {
return function (done) {
var tasks = [];
var packageLoc = path.join(packagesLoc, root.folder);
var nodeModulesLoc = path.join(packageLoc, "node_modules");

tasks.push(function (done) {
mkdirp(nodeModulesLoc, done);
fsUtils.mkdirp(nodeModulesLoc, done);
});

tasks.push(function (done) {
npmInstallInDir(packageLoc, done);
npmUtils.installInDir(packageLoc, done);
});

tasks.push(function (done) {
Expand All @@ -61,8 +52,14 @@ module.exports = function linkDependencies(
async.series(tasks, done);
};
}), 4, function (err) {
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);
});
}
12 changes: 5 additions & 7 deletions lib/commands/bootstrap/linkDependenciesForPackage.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
var rimraf = require("rimraf");
var mkdirp = require("mkdirp");
var fsUtils = require("../../utils/fsUtils");
var async = require("async");
var path = require("path");
var fs = require("fs");

function createLinkedDepFiles(src, dest, name, callback) {
fs.writeFile(path.join(dest, "package.json"), JSON.stringify({
fsUtils.writeFile(path.join(dest, "package.json"), JSON.stringify({
name: name,
version: require(path.join(src, "package.json")).version
}, null, " "), function (err) {
if (err) return callback(err);

fs.writeFile(
fsUtils.writeFile(
path.join(dest, "index.js"),
"module.exports = require(" + JSON.stringify(src) + ");",
callback
Expand All @@ -20,10 +18,10 @@ function createLinkedDepFiles(src, dest, name, callback) {
}

function createLinkedDep(src, dest, name, callback) {
rimraf(dest, function (err) {
fsUtils.rimraf(dest, function (err) {
if (err) return callback(err);

mkdirp(dest, function (err) {
fsUtils.mkdirp(dest, function (err) {
if (err) return callback(err);
createLinkedDepFiles(src, dest, name, callback);
});
Expand Down
29 changes: 12 additions & 17 deletions lib/commands/diff/index.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
var gitGetLastTaggedCommit = require("../../utils/gitGetLastTaggedCommit");
var gitHasTags = require("../../utils/gitHasTags")
var execSync = require("../../utils/execSync");
var child = require("child_process");
var chalk = require("chalk");
var path = require("path");
var fs = require("fs");

function gitGetFirstCommit() {
execSync("git rev-list --max-parents=0 HEAD");
}
var gitUtils = require("../../utils/gitUtils");
var fsUtils = require("../../utils/fsUtils");
var logger = require("../../utils/logger");
var child = require("child_process");
var path = require("path");
var exit = require("../../utils/exit");

module.exports = function (config, cli) {
var packageName = cli.input[1];
Expand All @@ -17,21 +12,21 @@ module.exports = function (config, cli) {
if (packageName) {
var pkgLoc = path.join(config.packagesLoc, packageName, "package.json");

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

filePath += "/" + packageName;
}

var hasTags = gitHasTags();
var hasTags = gitUtils.hasTags();
var lastCommit;

if (hasTags) {
lastCommit = gitGetLastTaggedCommit();
lastCommit = gitUtils.getLastTaggedCommit();
} else {
lastCommit = gitGetFirstCommit();
lastCommit = gitUtils.getFirstCommit();
}

child.spawn("git", ["diff", lastCommit, "--color=auto", filePath], {
Expand Down
3 changes: 2 additions & 1 deletion lib/commands/ls/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
var getPackages = require("../../utils/getPackages");
var logger = require("../../utils/logger");

module.exports = function (config) {
var packages = getPackages(config.packagesLoc)
Expand All @@ -10,5 +11,5 @@ module.exports = function (config) {
})
.join("\n");

console.log(packages);
logger.log("info", packages);
};
14 changes: 6 additions & 8 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 chalk = require("chalk");
var logger = require("../../utils/logger");
var exit = require("../../utils/exit");

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

changedPackages.forEach(function(pkg) {
message += "\n - " + pkg.name + "@" + versions[pkg.name];
});

console.log();
console.log(chalk.green(message));
process.exit();
logger.log("success", message);
exit(0);
}
}
);
Expand Down
38 changes: 23 additions & 15 deletions lib/commands/publish/npmPublishAsTemp.js
Original file line number Diff line number Diff line change
@@ -1,35 +1,37 @@
var getPackageLocation = require("../../utils/getPackageLocation");
var progressBar = require("../../utils/progressBar");
var child = require("child_process");
var npmUtils = require("../../utils/npmUtils");
var fsUtils = require("../../utils/fsUtils");
var logger = require("../../utils/logger");
var async = require("async");
var chalk = require("chalk");
var fs = require("fs");

function execScript(packagesLoc, pkg, name) {
// prepublish script
var script = getPackageLocation(packagesLoc, pkg.folder) + "/scripts/" + name + ".js";

// Execute prepublish script if it exists
if (fs.existsSync(script)) {
if (fsUtils.existsSync(script)) {
require(script);
} else {
logger.log("info", "No " + name + " script found at " + script, true);
}
}

function execPostpublishScript(packagesLoc, pkg) {
var execPostpublishScript = logger.logifySync("execPostpublishScript", function (packagesLoc, pkg) {
execScript(packagesLoc, pkg, "postpublish");
}
});

function execPrepublishScript(packagesLoc, pkg) {
var execPrepublishScript = logger.logifySync("execPrepublishScript", function (packagesLoc, pkg) {
execScript(packagesLoc, pkg, "prepublish");
}
});

module.exports = function npmPublishAsPrerelease(packages, packagesLoc, callback) {

packages.forEach(function (pkg) {
execPrepublishScript(packagesLoc, pkg);
});

console.log("Publishing tagged packages...");
logger.log("info", "Publishing tagged packages...");

var tick = progressBar(packages.length);

Expand All @@ -39,15 +41,18 @@ module.exports = function npmPublishAsPrerelease(packages, packagesLoc, callback
return function run(done) {
var loc = getPackageLocation(packagesLoc, pkg.folder);

child.exec("cd " + loc + " && npm publish --tag lerna-temp", function (err, stdout, stderr) {
if (err || stderr) {
err = stderr || err.stack;
logger.log("info", "Publishing " + pkg.name + "...", true);

npmUtils.publishTaggedInDir("lerna-temp", loc, function(err) {
if (err) {
err = err.stack || err;

if (err.indexOf("You cannot publish over the previously published version") < 0) {
if (++retries < 5) {
console.log(chalk.yellow("Attempting to retry publishing " + pkg.name + "..."));
logger.log("warning", "Attempting to retry publishing " + pkg.name + "...", false, err);
return run(done);
} else {
console.log(chalk.red("Ran out of retries while publishing " + pkg.name));
logger.log("error", "Ran out of retries while publishing " + pkg.name, false, err);
return done(err);
}
} else {
Expand All @@ -61,5 +66,8 @@ module.exports = function npmPublishAsPrerelease(packages, packagesLoc, callback
done();
});
};
}), 4, callback);
}), 4, function(err) {
tick.terminate();
callback(err);
});
};
24 changes: 14 additions & 10 deletions lib/commands/publish/npmUpdateAsLatest.js
Original file line number Diff line number Diff line change
@@ -1,32 +1,36 @@
var progressBar = require("../../utils/progressBar");
var execSync = require("../../utils/execSync");
var npmUtils = require("../../utils/npmUtils");
var logger = require("../../utils/logger");
var async = require("async");

module.exports = function npmUpdateAsLatest(changedPackages, versions, callback) {
console.log("Setting latest npm tags...");
logger.log("info", "Setting latest npm tags...");

var tick = progressBar(changedPackages.length);

async.parallelLimit(changedPackages.map(function (pkg) {
return function (done) {
while (true) {
try {
console.log("Removing temporary npm dist-tag");
execSync("npm dist-tag rm " + pkg.name + " lerna-temp");
logger.log("info", "Removing temporary npm dist-tag");
npmUtils.removeDistTag(pkg.name, "lerna-temp");
if (process.env.NPM_DIST_TAG) {
console.log("Adding " + process.env.NPM_DIST_TAG + " npm dist-tag");
execSync("npm dist-tag add " + pkg.name + "@" + versions[pkg.name] + " " + process.env.NPM_DIST_TAG);
logger.log("info", "Adding " + process.env.NPM_DIST_TAG + " npm dist-tag");
npmUtils.addDistTag(pkg.name, versions[pkg.name], process.env.NPM_DIST_TAG);
} else {
console.log("Adding stable/latest npm dist-tags");
execSync("npm dist-tag add " + pkg.name + "@" + versions[pkg.name] + " latest");
logger.log("info", "Adding latest npm dist-tags");
npmUtils.addDistTag(pkg.name, versions[pkg.name], "latest");
}
tick(pkg.name);
break;
} catch (err) {
console.error(err.stack);
logger.log("error", "Error updating version as latest", false, err);
}
}
done();
};
}), 4, callback);
}), 4, function(err) {
tick.terminate();
callback(err);
});
};