From 33a8bd643206ec8000a98d0cca29a94f82491130 Mon Sep 17 00:00:00 2001 From: Ilya Grigoriev Date: Fri, 3 Feb 2023 22:09:35 -0800 Subject: [PATCH] Mention --multi in hint when one revset resolves to multiple revisions --- src/cli_util.rs | 20 +++++++++++++++++++- tests/test_rebase_command.rs | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/cli_util.rs b/src/cli_util.rs index 2cc550ab0f3..9b1e2d3e753 100644 --- a/src/cli_util.rs +++ b/src/cli_util.rs @@ -1398,7 +1398,9 @@ pub fn resolve_base_revs( } } else { for revision_str in revisions { - let commit = workspace_command.resolve_single_rev(revision_str)?; + let commit = workspace_command + .resolve_single_rev(revision_str) + .map_err(add_multi_message_to_hint_if_mutliple_revisions)?; let commit_hash = short_commit_hash(commit.id()); if !commits.insert(commit) { return Err(user_error(format!( @@ -1416,6 +1418,22 @@ pub fn resolve_base_revs( } } +fn add_multi_message_to_hint_if_mutliple_revisions(err: CommandError) -> CommandError { + if let CommandError::UserError { message, hint } = err { + let hint = if message.contains("more than one revision") { + let hint = hint.map(|h| format!("{h}\n")).unwrap_or_default(); + Some(format!( + "{hint}If this was intentional, specify the `--multi` argument" + )) + } else { + hint + }; + CommandError::UserError { message, hint } + } else { + err + } +} + pub fn update_working_copy( ui: &mut Ui, repo: &Arc, diff --git a/tests/test_rebase_command.rs b/tests/test_rebase_command.rs index 25cf6e63b14..af958bd32dc 100644 --- a/tests/test_rebase_command.rs +++ b/tests/test_rebase_command.rs @@ -320,6 +320,7 @@ fn test_rebase_multiple_destinations() { Hint: The revset "b|c" resolved to these revisions: fe2e8e8b50b3 c d370aee184ba b + If this was intentional, specify the `--multi` argument "###); let stdout = test_env.jj_cmd_success(&repo_path, &["rebase", "--multi", "-r", "a", "-d", "b|c"]);