12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- "use strict";
- const childProcess = require("@lerna/child-process");
- const { Command } = require("@lerna/command");
- const { ValidationError } = require("@lerna/validation-error");
- const { getLastCommit } = require("./lib/get-last-commit");
- const { hasCommit } = require("./lib/has-commit");
- module.exports = factory;
- function factory(argv) {
- return new DiffCommand(argv);
- }
- class DiffCommand extends Command {
- initialize() {
- const packageName = this.options.pkgName;
- let targetPackage;
- if (packageName) {
- targetPackage = this.packageGraph.get(packageName);
- if (!targetPackage) {
- throw new ValidationError("ENOPKG", `Cannot diff, the package '${packageName}' does not exist.`);
- }
- }
- if (!hasCommit(this.execOpts)) {
- throw new ValidationError("ENOCOMMITS", "Cannot diff, there are no commits in this repository yet.");
- }
- const args = ["diff", getLastCommit(this.execOpts), "--color=auto"];
- if (targetPackage) {
- args.push("--", targetPackage.location);
- } else {
- args.push("--", ...this.project.packageParentDirs);
- }
- if (this.options.ignoreChanges) {
- this.options.ignoreChanges.forEach((ignorePattern) => {
- // https://stackoverflow.com/a/21079437
- args.push(`:(exclude,glob)${ignorePattern}`);
- });
- }
- this.args = args;
- }
- execute() {
- return childProcess.spawn("git", this.args, this.execOpts).catch((err) => {
- if (err.exitCode) {
- // quitting the diff viewer is not an error
- throw err;
- }
- });
- }
- }
- module.exports.DiffCommand = DiffCommand;
|