From 6bd77ba60afd496e0f612aca7a56b8a9c8270436 Mon Sep 17 00:00:00 2001 From: Daniel Stockman Date: Thu, 7 Nov 2019 17:13:43 -0800 Subject: [PATCH] fix(changed): Copy relevant options from version, do not inherit Among them, `--include-merged-tags` is significant. --- commands/changed/README.md | 6 ++-- .../changed/__tests__/changed-command.test.js | 30 +++++++++++++++++ commands/changed/command.js | 33 +++++++++++++++++-- commands/changed/index.js | 9 +++++ commands/changed/package.json | 3 +- package-lock.json | 3 +- 6 files changed, 74 insertions(+), 10 deletions(-) diff --git a/commands/changed/README.md b/commands/changed/README.md index 927787150d..ebd8af2e13 100644 --- a/commands/changed/README.md +++ b/commands/changed/README.md @@ -31,9 +31,9 @@ package-2 Unlike `lerna ls`, however, `lerna changed` **does not** support [filter options](https://www.npmjs.com/package/@lerna/filter-options), as filtering is not supported by `lerna version` or `lerna publish`. -`lerna changed` also supports all the flags supported by [`lerna version`](https://github.com/lerna/lerna/tree/master/commands/version#options). - -Relevant ones are maybe: +`lerna changed` supports the following options of [`lerna version`](https://github.com/lerna/lerna/tree/master/commands/version#options) (the others are irrelevant): +- [`--conventional-graduate`](https://github.com/lerna/lerna/tree/master/commands/version#--conventional-graduate). +- [`--force-publish`](https://github.com/lerna/lerna/tree/master/commands/version#--force-publish). - [`--ignore-changes`](https://github.com/lerna/lerna/tree/master/commands/version#--ignore-changes). - [`--include-merged-tags`](https://github.com/lerna/lerna/tree/master/commands/version#--include-merged-tags). diff --git a/commands/changed/__tests__/changed-command.test.js b/commands/changed/__tests__/changed-command.test.js index b55f95da9d..7d6028f963 100644 --- a/commands/changed/__tests__/changed-command.test.js +++ b/commands/changed/__tests__/changed-command.test.js @@ -6,6 +6,7 @@ const output = require("@lerna/output"); // helpers const initFixture = require("@lerna-test/init-fixture")(__dirname); +const loggingOutput = require("@lerna-test/logging-output"); const updateLernaConfig = require("@lerna-test/update-lerna-config"); // file under test @@ -90,6 +91,35 @@ package-4 ); }); + it("passes --include-merged-tags to update collector", async () => { + await lernaChanged(cwd)("--include-merged-tags"); + + expect(collectUpdates).toHaveBeenLastCalledWith( + expect.any(Array), + expect.any(Object), + expect.objectContaining({ cwd }), + expect.objectContaining({ includeMergedTags: true }) + ); + }); + + it("passes --conventional-graduate to update collector", async () => { + await lernaChanged(cwd)("--conventional-graduate=*"); + + expect(collectUpdates).toHaveBeenLastCalledWith( + expect.any(Array), + expect.any(Object), + expect.objectContaining({ cwd }), + expect.objectContaining({ conventionalGraduate: "*", conventionalCommits: true }) + ); + }); + + it("warns when --force-publish superseded by --conventional-graduate", async () => { + await lernaChanged(cwd)("--conventional-graduate", "foo", "--force-publish", "bar"); + + const [logMessage] = loggingOutput("warn"); + expect(logMessage).toBe("--force-publish superseded by --conventional-graduate"); + }); + it("lists changed private packages with --all", async () => { collectUpdates.setUpdated(cwd, "package-5"); diff --git a/commands/changed/command.js b/commands/changed/command.js index 56a1950371..1f22c46dbc 100644 --- a/commands/changed/command.js +++ b/commands/changed/command.js @@ -1,6 +1,5 @@ "use strict"; -const versionOptions = require("@lerna/version/command").builder; const listable = require("@lerna/listable"); /** @@ -13,9 +12,37 @@ exports.aliases = ["updated"]; exports.describe = "List local packages that have changed since the last tagged release"; exports.builder = yargs => { - listable.options(yargs); + const opts = { + // only the relevant bits from `lerna version` + "conventional-commits": { + // fallback for overzealous --conventional-graduate + hidden: true, + type: "boolean", + }, + "conventional-graduate": { + describe: "Detect currently prereleased packages that would change to a non-prerelease version.", + // type must remain ambiguous because it is overloaded (boolean _or_ string _or_ array) + }, + "force-publish": { + describe: "Always include targeted packages when detecting changed packages, skipping default logic.", + // type must remain ambiguous because it is overloaded (boolean _or_ string _or_ array) + }, + "ignore-changes": { + describe: [ + "Ignore changes in files matched by glob(s) when detecting changed packages.", + "Pass --no-ignore-changes to completely disable.", + ].join("\n"), + type: "array", + }, + "include-merged-tags": { + describe: "Include tags from merged branches when detecting changed packages.", + type: "boolean", + }, + }; - return versionOptions(yargs, "changed"); + yargs.options(opts).group(Object.keys(opts), "Command Options:"); + + return listable.options(yargs, "Output Options:"); }; exports.handler = function handler(argv) { diff --git a/commands/changed/index.js b/commands/changed/index.js index 740cff41a3..89d860ff20 100644 --- a/commands/changed/index.js +++ b/commands/changed/index.js @@ -18,6 +18,15 @@ class ChangedCommand extends Command { } initialize() { + if (this.options.conventionalGraduate) { + // provide artificial --conventional-commits so --conventional-graduate works + this.options.conventionalCommits = true; + + if (this.options.forcePublish) { + this.logger.warn("option", "--force-publish superseded by --conventional-graduate"); + } + } + const updates = collectUpdates( this.packageGraph.rawPackageList, this.packageGraph, diff --git a/commands/changed/package.json b/commands/changed/package.json index e76a028551..375de78a4d 100644 --- a/commands/changed/package.json +++ b/commands/changed/package.json @@ -35,7 +35,6 @@ "@lerna/collect-updates": "file:../../utils/collect-updates", "@lerna/command": "file:../../core/command", "@lerna/listable": "file:../../utils/listable", - "@lerna/output": "file:../../utils/output", - "@lerna/version": "file:../version" + "@lerna/output": "file:../../utils/output" } } diff --git a/package-lock.json b/package-lock.json index e0d86e5728..b7fbd8f867 100644 --- a/package-lock.json +++ b/package-lock.json @@ -814,8 +814,7 @@ "@lerna/collect-updates": "file:utils/collect-updates", "@lerna/command": "file:core/command", "@lerna/listable": "file:utils/listable", - "@lerna/output": "file:utils/output", - "@lerna/version": "file:commands/version" + "@lerna/output": "file:utils/output" } }, "@lerna/check-working-tree": {