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

[PATCH 01/18] advice: Introduce error_resolve_conflict

From
Ramkumar Ramachandra <artagnon@gmail.com>
Date
Aug 1, 2011, 18:06 UTC
Message-ID
<1312222025-28453-2-git-send-email-artagnon@gmail.com>
In-Reply-To
<1312222025-28453-1-git-send-email-artagnon@gmail.com>

Enable future callers to report a conflict and not die immediately by introducing a new function called error_resolve_conflict. Re-implement die_resolve_conflict as a call to error_resolve_conflict followed by a call to die. Consequently, the message printed by die_resolve_conflict changes from

  fatal: 'commit' is not possible because you have unmerged files.
         Please, fix them up in the work tree ...
         ...
to
  error: 'commit' is not possible because you have unmerged files.
  hint: Fix them up in the work tree ...
  hint: ...
  fatal: Exiting because of an unresolved conflict.

Hints are printed using the same advise function introduced in v1.7.3-rc0~26^2~3 (Introduce advise() to print hints, 2010-08-11).

Inspired-by: Christian Couder <chistian.couder@gmail.com>
Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
 advice.c         |   31 ++++++++++++++++++++++++-------
 advice.h         |    3 ++-
 builtin/revert.c |    9 ---------
 3 files changed, 26 insertions(+), 17 deletions(-)
diff --git a/advice.c b/advice.c
index 0be4b5f..e02e632 100644
--- a/advice.c
+++ b/advice.c
@@ -19,6 +19,15 @@ static struct {
 	{ "detachedhead", &advice_detached_head },
 };
 
+void advise(const char *advice, ...)
+{
+	va_list params;
+
+	va_start(params, advice);
+	vreportf("hint: ", advice, params);
+	va_end(params);
+}
+
 int git_default_advice_config(const char *var, const char *value)
 {
 	const char *k = skip_prefix(var, "advice.");
@@ -34,16 +43,24 @@ int git_default_advice_config(const char *var, const char *value)
 	return 0;
 }
 
-void NORETURN die_resolve_conflict(const char *me)
+int error_resolve_conflict(const char *me)
 {
-	if (advice_resolve_conflict)
+	error("'%s' is not possible because you have unmerged files.", me);
+	if (advice_resolve_conflict) {
 		/*
 		 * Message used both when 'git commit' fails and when
 		 * other commands doing a merge do.
 		 */
-		die("'%s' is not possible because you have unmerged files.\n"
-		    "Please, fix them up in the work tree, and then use 'git add/rm <file>' as\n"
-		    "appropriate to mark resolution and make a commit, or use 'git commit -a'.", me);
-	else
-		die("'%s' is not possible because you have unmerged files.", me);
+		advise("Fix them up in the work tree,");
+		advise("and then use 'git add/rm <file>' as");
+		advise("appropriate to mark resolution and make a commit,");
+		advise("or use 'git commit -a'.");
+	}
+	return -1;
+}
+
+void NORETURN die_resolve_conflict(const char *me)
+{
+	error_resolve_conflict(me);
+	die("Exiting because of an unresolved conflict.");
 }
diff --git a/advice.h b/advice.h
index 3244ebb..e5d0af7 100644
--- a/advice.h
+++ b/advice.h
@@ -11,7 +11,8 @@ extern int advice_implicit_identity;
 extern int advice_detached_head;
 
 int git_default_advice_config(const char *var, const char *value);
-
+void advise(const char *advice, ...);
+int error_resolve_conflict(const char *me);
 extern void NORETURN die_resolve_conflict(const char *me);
 
 #endif /* ADVICE_H */
diff --git a/builtin/revert.c b/builtin/revert.c
index 1f27c63..2df3f3b 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -214,15 +214,6 @@ static void write_cherry_pick_head(void)
 	strbuf_release(&buf);
 }
 
-static void advise(const char *advice, ...)
-{
-	va_list params;
-
-	va_start(params, advice);
-	vreportf("hint: ", advice, params);
-	va_end(params);
-}
-
 static void print_advice(void)
 {
 	char *msg = getenv("GIT_CHERRY_PICK_HELP");
-- 
1.7.4.rc1.7.g2cf08.dirty
Previous: Ramkumar RamachandraNext: Ramkumar Ramachandra
Message 2 of 33 in “Sequencer for inclusion”
  1. 00/18 Sequencer for inclusionRamkumar Ramachandra, Aug 1, 2011
  2. 01/18 advice: Introduce error_resolve_conflictRamkumar Ramachandra, Aug 1, 2011
  3. 02/18 config: Introduce functions to write non-standard fileRamkumar Ramachandra, Aug 1, 2011
  4. 03/18 revert: Simplify and inline add_message_to_msgRamkumar Ramachandra, Aug 1, 2011
  5. 04/18 revert: Don't check lone argument in get_encodingRamkumar Ramachandra, Aug 1, 2011
  6. 05/18 revert: Rename no_replay to record_originRamkumar Ramachandra, Aug 1, 2011
  7. 06/18 revert: Eliminate global "commit" variableRamkumar Ramachandra, Aug 1, 2011
  8. 07/18 revert: Introduce struct to keep command-line optionsRamkumar Ramachandra, Aug 1, 2011
  9. 08/18 revert: Separate cmdline parsing from functional codeRamkumar Ramachandra, Aug 1, 2011
  10. 09/18 revert: Don't create invalid replay_opts in parse_argsRamkumar Ramachandra, Aug 1, 2011
  11. Christian CouderAug 2, 2011
  12. Christian CouderAug 2, 2011
  13. Ramkumar RamachandraAug 4, 2011
  14. 10/18 revert: Save data for continuing after conflict resolutionRamkumar Ramachandra, Aug 1, 2011
  15. 11/18 revert: Save command-line options for continuing operationRamkumar Ramachandra, Aug 1, 2011
  16. Christian CouderAug 4, 2011
  17. Ramkumar RamachandraAug 4, 2011
  18. 12/18 revert: Make pick_commits functionally act on a commit listRamkumar Ramachandra, Aug 1, 2011
  19. 13/18 revert: Introduce --reset to remove sequencer stateRamkumar Ramachandra, Aug 1, 2011
  20. 14/18 reset: Make reset remove the sequencer stateRamkumar Ramachandra, Aug 1, 2011
  21. 15/18 revert: Remove sequencer state when no commits are pendingRamkumar Ramachandra, Aug 1, 2011
  22. 16/18 revert: Don't implicitly stomp pending sequencer operationRamkumar Ramachandra, Aug 1, 2011
  23. 17/18 revert: Introduce --continue to continue the operationRamkumar Ramachandra, Aug 1, 2011
  24. Ramkumar RamachandraAug 1, 2011
  25. Christian CouderAug 2, 2011
  26. Christian CouderAug 2, 2011
  27. Christian CouderAug 2, 2011
  28. Ramkumar RamachandraAug 2, 2011
  29. Ramkumar RamachandraAug 4, 2011
  30. Christian CouderAug 2, 2011
  31. Christian CouderAug 4, 2011
  32. Ramkumar RamachandraAug 4, 2011
  33. 18/18 revert: Propagate errors upwards from do_pick_commitRamkumar Ramachandra, Aug 1, 2011

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.