git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 2/2] builtin/am: allow disabling conflict advice

From
Philippe Blain via GitGitGadget <gitgitgadget@gmail.com>
Date
Mar 10, 2024, 19:51 UTC
Message-ID
<3235542cc6f77779cca1aeff65236e16b0a15d76.1710100261.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.1682.v2.git.1710100261.gitgitgadget@gmail.com>
From: Philippe Blain <levraiphilippeblain@gmail.com>

When 'git am' or 'git rebase --apply' encounter a conflict, they show a message instructing the user how to continue the operation. This message can't be disabled.

Use ADVICE_MERGE_CONFLICT introduced in the previous commit to allow disabling it. Update the tests accordingly, as the advice output is now on stderr instead of stdout. In t4150, redirect stdout to 'out' and stderr to 'err', since this is less confusing. In t4254, as we are testing a specific failure mode of 'git am', simply disable the advice.

Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
---
 builtin/am.c          | 14 +++++++++-----
 t/t4150-am.sh         |  8 ++++----
 t/t4254-am-corrupt.sh |  2 +-
 3 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/builtin/am.c b/builtin/am.c
index d1990d7edcb..0e97b827e4b 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -1150,19 +1150,23 @@ static const char *msgnum(const struct am_state *state)
 static void NORETURN die_user_resolve(const struct am_state *state)
 {
 	if (state->resolvemsg) {
-		printf_ln("%s", state->resolvemsg);
+		advise_if_enabled(ADVICE_MERGE_CONFLICT, "%s", state->resolvemsg);
 	} else {
 		const char *cmdline = state->interactive ? "git am -i" : "git am";
+		struct strbuf sb = STRBUF_INIT;
 
-		printf_ln(_("When you have resolved this problem, run \"%s --continue\"."), cmdline);
-		printf_ln(_("If you prefer to skip this patch, run \"%s --skip\" instead."), cmdline);
+		strbuf_addf(&sb, _("When you have resolved this problem, run \"%s --continue\"."), cmdline);
+		strbuf_addf(&sb, _("If you prefer to skip this patch, run \"%s --skip\" instead."), cmdline);
 
 		if (advice_enabled(ADVICE_AM_WORK_DIR) &&
 		    is_empty_or_missing_file(am_path(state, "patch")) &&
 		    !repo_index_has_changes(the_repository, NULL, NULL))
-			printf_ln(_("To record the empty patch as an empty commit, run \"%s --allow-empty\"."), cmdline);
+			strbuf_addf(&sb, _("To record the empty patch as an empty commit, run \"%s --allow-empty\"."), cmdline);
 
-		printf_ln(_("To restore the original branch and stop patching, run \"%s --abort\"."), cmdline);
+		strbuf_addf(&sb, _("To restore the original branch and stop patching, run \"%s --abort\"."), cmdline);
+
+		advise_if_enabled(ADVICE_MERGE_CONFLICT, "%s", sb.buf);
+		strbuf_release(&sb);
 	}
 
 	exit(128);
diff --git a/t/t4150-am.sh b/t/t4150-am.sh
index 3b125762694..5e2b6c80eae 100755
--- a/t/t4150-am.sh
+++ b/t/t4150-am.sh
@@ -1224,8 +1224,8 @@ test_expect_success 'record as an empty commit when meeting e-mail message that
 
 test_expect_success 'skip an empty patch in the middle of an am session' '
 	git checkout empty-commit^ &&
-	test_must_fail git am empty-commit.patch >err &&
-	grep "Patch is empty." err &&
+	test_must_fail git am empty-commit.patch >out 2>err &&
+	grep "Patch is empty." out &&
 	grep "To record the empty patch as an empty commit, run \"git am --allow-empty\"." err &&
 	git am --skip &&
 	test_path_is_missing .git/rebase-apply &&
@@ -1236,8 +1236,8 @@ test_expect_success 'skip an empty patch in the middle of an am session' '
 
 test_expect_success 'record an empty patch as an empty commit in the middle of an am session' '
 	git checkout empty-commit^ &&
-	test_must_fail git am empty-commit.patch >err &&
-	grep "Patch is empty." err &&
+	test_must_fail git am empty-commit.patch >out 2>err &&
+	grep "Patch is empty." out &&
 	grep "To record the empty patch as an empty commit, run \"git am --allow-empty\"." err &&
 	git am --allow-empty >output &&
 	grep "No changes - recorded it as an empty commit." output &&
diff --git a/t/t4254-am-corrupt.sh b/t/t4254-am-corrupt.sh
index 45f1d4f95e5..661feb60709 100755
--- a/t/t4254-am-corrupt.sh
+++ b/t/t4254-am-corrupt.sh
@@ -59,7 +59,7 @@ test_expect_success setup '
 # Also, it had the unwanted side-effect of deleting f.
 test_expect_success 'try to apply corrupted patch' '
 	test_when_finished "git am --abort" &&
-	test_must_fail git -c advice.amWorkDir=false am bad-patch.diff 2>actual &&
+	test_must_fail git -c advice.amWorkDir=false -c advice.mergeConflict=false am bad-patch.diff 2>actual &&
 	echo "error: git diff header lacks filename information (line 4)" >expected &&
 	test_path_is_file f &&
 	test_cmp expected actual
-- 
gitgitgadget
Previous: Philippe BlainNext: phillip.wood123@gmail.com
Message 19 of 32 in “sequencer: allow disabling conflict advice”
  1. sequencer: allow disabling conflict advicePhilippe Blain via GitGitGadget, Mar 2, 2024
  2. Philippe BlainMar 2, 2024
  3. Junio C HamanoMar 3, 2024
  4. Philippe BlainMar 9, 2024
  5. Philippe BlainMar 9, 2024
  6. Junio C HamanoMar 9, 2024
  7. Junio C HamanoMar 9, 2024
  8. Phillip WoodMar 4, 2024
  9. Phillip WoodMar 4, 2024
  10. Junio C HamanoMar 4, 2024
  11. Philippe BlainMar 9, 2024
  12. Phillip WoodMar 9, 2024
  13. Junio C HamanoMar 9, 2024
  14. Philippe BlainMar 9, 2024
  15. 0/2 Allow disabling advice shown after merge conflictsPhilippe Blain via GitGitGadget, Mar 10, 2024
  16. 1/2 sequencer: allow disabling conflict advicePhilippe Blain via GitGitGadget, Mar 10, 2024
  17. Kristoffer HaugsbakkMar 11, 2024
  18. Philippe BlainMar 16, 2024
  19. 2/2 builtin/am: allow disabling conflict advicePhilippe Blain via GitGitGadget, Mar 10, 2024
  20. phillip.wood123@gmail.comMar 11, 2024
  21. Junio C HamanoMar 11, 2024
  22. Junio C HamanoMar 11, 2024
  23. Philippe BlainMar 16, 2024
  24. Philippe BlainMar 16, 2024
  25. Rubén JustoMar 11, 2024
  26. Philippe BlainMar 16, 2024
  27. 0/2 Allow disabling advice shown after merge conflictsPhilippe Blain via GitGitGadget, Mar 16, 2024
  28. 1/2 sequencer: allow disabling conflict advicePhilippe Blain via GitGitGadget, Mar 16, 2024
  29. 2/2 builtin/am: allow disabling conflict advicePhilippe Blain via GitGitGadget, Mar 16, 2024
  30. Junio C HamanoMar 18, 2024
  31. Phillip WoodMar 25, 2024
  32. Junio C HamanoMar 25, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.