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

Re: [PATCH] Also read SQUASH_MSG if a conflict on a merge squash occurred

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 9, 2016, 20:24 UTC
Message-ID
<xmqqziu7h01f.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<xmqqfuvzil3y.fsf@gitster.mtv.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 22 quoted lines
> Junio C Hamano <gitster@pobox.com> writes:
>
>> The duplicated code to read the same file bothers me somewhat.
>>
>> I wondered if it makes the result easier to follow (and easier to
>> update) if this part of the code is restructured like this:
>>
>> 	if (file_exists(git_path_merge_msg()) ||
>>             file_exists(git_path_squash_msg())) {
>> 	    if (file_exists(git_path_squash_msg())) {
>> 		read SQUASH_MSG;
>> 	    }
>>             if (file_exists(git_path_merge_msg()))
>>             	read MERGE_MSG;
>> 	    }
>>             hook_arg1 = "merge";
>> 	}
>>
>> but I am not sure if that structure is better.
>
> ... as this duplicates file_exists() call to the same thing, which
> is no better than duplicated calls to read *_MSG files.

So, let's take the program structure from your original, but fix the order of the inclusion (and the log message), perhaps like the attached patch.

Don't we also want to have a new test so that this "contents from both files are included in the result in the expected order" feature will not get broken in the future?

-- >8 --
Subject: [PATCH] commit: do not lose SQUASH_MSG contents

When concluding a conflicted "git merge --squash", the command failed to read SQUASH_MSG that was prepared by "git merge", and showed only the "# Conflicts:" list of conflicted paths.

Place the contents from SQUASH_MSG at the beginning, just like we show the commit log skeleton first when concluding a normal merge, and then show the "# Conflicts:" list, to help the user write the log message for the resulting commit.

Signed-off-by: Sven Strickroth <sven@cs-ware.de>
---
 builtin/commit.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/builtin/commit.c b/builtin/commit.c
index b3bd2d4..4ad3931 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -726,9 +726,19 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
 				      &sb, &ctx);
 		hook_arg1 = "message";
 	} else if (!stat(git_path_merge_msg(), &statbuf)) {
+		hook_arg1 = "merge";
+
+		/*
+		 * In a conflicted 'merge squash', the material to help
+		 * writing the log message is found in SQUASH_MSG.
+		 */
+		if (!stat(git_path_squash_msg(), &statbuf)) {
+			if (strbuf_read_file(&sb, git_path_squash_msg(), 0) < 0)
+				die_errno(_("could not read SQUASH_MSG"));
+			hook_arg1 = "squash";
+		}
 		if (strbuf_read_file(&sb, git_path_merge_msg(), 0) < 0)
 			die_errno(_("could not read MERGE_MSG"));
-		hook_arg1 = "merge";
 	} else if (!stat(git_path_squash_msg(), &statbuf)) {
 		if (strbuf_read_file(&sb, git_path_squash_msg(), 0) < 0)
 			die_errno(_("could not read SQUASH_MSG"));
-- 
2.8.0-rc1-141-gbaa22e3
Previous: Junio C HamanoNext: Sven Strickroth
Message 8 of 13 in “Commit message not helpful after merge squash with conflicts”
  1. Sven StrickrothMar 5, 2016
  2. Also read SQUASH_MSG if a conflict on a merge squash occurredSven Strickroth, Mar 8, 2016
  3. Junio C HamanoMar 8, 2016
  4. Sven StrickrothMar 8, 2016
  5. Junio C HamanoMar 8, 2016
  6. commit: do not lose SQUASH_MSG contentsSven Strickroth, Mar 8, 2016
  7. Junio C HamanoMar 9, 2016
  8. Junio C HamanoMar 9, 2016
  9. commit: do not lose SQUASH_MSG contentsSven Strickroth, Mar 13, 2016
  10. Junio C HamanoMar 14, 2016
  11. Junio C HamanoMar 14, 2016
  12. commit: do not lose SQUASH_MSG contentsSven Strickroth, Mar 21, 2016
  13. Junio C HamanoMar 21, 2016

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.