diff --git a/common/changes/@microsoft/rush/rush-pnpm-patch-remove_2024-09-01-01-28.json b/common/changes/@microsoft/rush/rush-pnpm-patch-remove_2024-09-01-01-28.json new file mode 100644 index 00000000000..cc6ff40a0a3 --- /dev/null +++ b/common/changes/@microsoft/rush/rush-pnpm-patch-remove_2024-09-01-01-28.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/rush", + "comment": "Support the `rush-pnpm patch-remove` command.", + "type": "none" + } + ], + "packageName": "@microsoft/rush" +} \ No newline at end of file diff --git a/libraries/rush-lib/src/cli/RushPnpmCommandLineParser.ts b/libraries/rush-lib/src/cli/RushPnpmCommandLineParser.ts index bfe3f90b901..2f404435424 100644 --- a/libraries/rush-lib/src/cli/RushPnpmCommandLineParser.ts +++ b/libraries/rush-lib/src/cli/RushPnpmCommandLineParser.ts @@ -334,6 +334,22 @@ export class RushPnpmCommandLineParser { } break; } + case 'patch-remove': { + const semver: typeof import('semver') = await import('semver'); + /** + * The "patch-remove" command was introduced in pnpm version 8.5.0 + */ + if (semver.lt(this._rushConfiguration.packageManagerToolVersion, '8.5.0')) { + this._terminal.writeErrorLine( + PrintUtilities.wrapWords( + `Error: The "pnpm patch-remove" command is added after pnpm@8.5.0.` + + ` Please update "pnpmVersion" >= 8.5.0 in ${RushConstants.rushJsonFilename} file and run "rush update" to use this command.` + ) + '\n' + ); + throw new AlreadyReportedError(); + } + break; + } // Known safe case 'audit': @@ -447,6 +463,7 @@ export class RushPnpmCommandLineParser { const subspaceConfigFolder: string = this._subspace.getSubspaceConfigFolderPath(); switch (commandName) { + case 'patch-remove': case 'patch-commit': { // why need to throw error when pnpm-config.json not exists? // 1. pnpm-config.json is required for `rush-pnpm patch-commit`. Rush writes the patched dependency to the pnpm-config.json when finishes.