Junio C Hamano <gitster@xxxxxxxxx> writes: > Junio C Hamano <gitster@xxxxxxxxx> 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@xxxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html