diff --git a/commands/version/__tests__/version-command.test.js b/commands/version/__tests__/version-command.test.js index 692e4242f5..7755510ac9 100644 --- a/commands/version/__tests__/version-command.test.js +++ b/commands/version/__tests__/version-command.test.js @@ -734,4 +734,14 @@ describe("VersionCommand", () => { expect(changedFiles).toContain("packages/package-1/package-lock.json"); }); }); + + describe("with spurious -- arguments", () => { + it("ignores the extra arguments with cheesy parseConfiguration()", async () => { + const cwd = await initFixture("lifecycle"); + await lernaVersion(cwd)("--yes", "--", "--loglevel", "ignored", "--blah"); + + const logMessages = loggingOutput("warn"); + expect(logMessages).toContain("Arguments after -- are no longer passed to subprocess executions."); + }); + }); }); diff --git a/commands/version/command.js b/commands/version/command.js index 918910dde3..820687be02 100644 --- a/commands/version/command.js +++ b/commands/version/command.js @@ -156,6 +156,11 @@ exports.builder = (yargs, composed) => { yargs.options(opts); + // workaround yargs bug that re-interprets unknown arguments in argv._ + yargs.parserConfiguration({ + "populate--": true, + }); + if (!composed) { // hide options from composed command's help output yargs.group(Object.keys(opts), "Command Options:"); @@ -231,6 +236,11 @@ exports.builder = (yargs, composed) => { } /* eslint-enable no-param-reassign */ + if (argv["--"]) { + log.warn("EDOUBLEDASH", "Arguments after -- are no longer passed to subprocess executions."); + log.warn("EDOUBLEDASH", "This will cause an error in a future major version."); + } + return argv; }); };