From: Junio C Hamano Date: Wed, 16 Mar 2011 23:47:25 +0000 (-0700) Subject: Merge branch 'js/maint-merge-use-prepare-commit-msg-hook' into maint X-Git-Tag: v1.7.4.2~25 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/5b8aac32fbf5be49e2cdfbdb082fa6bca9548d24?hp=-c Merge branch 'js/maint-merge-use-prepare-commit-msg-hook' into maint * js/maint-merge-use-prepare-commit-msg-hook: merge: honor prepare-commit-msg hook --- 5b8aac32fbf5be49e2cdfbdb082fa6bca9548d24 diff --combined builtin/merge.c index a682043fe5,ca16657d25..d534520c3e --- a/builtin/merge.c +++ b/builtin/merge.c @@@ -194,8 -194,8 +194,8 @@@ static struct option builtin_merge_opti "merge strategy to use", option_parse_strategy), OPT_CALLBACK('X', "strategy-option", &xopts, "option=value", "option for selected merge strategy", option_parse_x), - OPT_CALLBACK('m', "message", &merge_msg, "message", - "message to be used for the merge commit (if any)", + OPT_CALLBACK('m', "message", &merge_msg, "MESSAGE", + "merge commit message (for a non-fast-forward merge)", option_parse_message), OPT__VERBOSITY(&verbosity), OPT_BOOLEAN(0, "abort", &abort_current_merge, @@@ -795,6 -795,32 +795,32 @@@ static void add_strategies(const char * } + static void write_merge_msg(void) + { + int fd = open(git_path("MERGE_MSG"), O_WRONLY | O_CREAT, 0666); + if (fd < 0) + die_errno("Could not open '%s' for writing", + git_path("MERGE_MSG")); + if (write_in_full(fd, merge_msg.buf, merge_msg.len) != merge_msg.len) + die_errno("Could not write to '%s'", git_path("MERGE_MSG")); + close(fd); + } + + static void read_merge_msg(void) + { + strbuf_reset(&merge_msg); + if (strbuf_read_file(&merge_msg, git_path("MERGE_MSG"), 0) < 0) + die_errno("Could not read from '%s'", git_path("MERGE_MSG")); + } + + static void run_prepare_commit_msg(void) + { + write_merge_msg(); + run_hook(get_index_file(), "prepare-commit-msg", + git_path("MERGE_MSG"), "merge", NULL, NULL); + read_merge_msg(); + } + static int merge_trivial(void) { unsigned char result_tree[20], result_commit[20]; @@@ -806,6 -832,7 +832,7 @@@ parent->next = xmalloc(sizeof(*parent->next)); parent->next->item = remoteheads->item; parent->next->next = NULL; + run_prepare_commit_msg(); commit_tree(merge_msg.buf, result_tree, parent, result_commit, NULL); finish(result_commit, "In-index merge"); drop_save(); @@@ -835,6 -862,7 +862,7 @@@ static int finish_automerge(struct comm } free_commit_list(remoteheads); strbuf_addch(&merge_msg, '\n'); + run_prepare_commit_msg(); commit_tree(merge_msg.buf, result_tree, parents, result_commit, NULL); strbuf_addf(&buf, "Merge made by %s.", wt_strategy); finish(result_commit, buf.buf); @@@ -1316,14 -1344,7 +1344,7 @@@ int cmd_merge(int argc, const char **ar die_errno("Could not write to '%s'", git_path("MERGE_HEAD")); close(fd); strbuf_addch(&merge_msg, '\n'); - fd = open(git_path("MERGE_MSG"), O_WRONLY | O_CREAT, 0666); - if (fd < 0) - die_errno("Could not open '%s' for writing", - git_path("MERGE_MSG")); - if (write_in_full(fd, merge_msg.buf, merge_msg.len) != - merge_msg.len) - die_errno("Could not write to '%s'", git_path("MERGE_MSG")); - close(fd); + write_merge_msg(); fd = open(git_path("MERGE_MODE"), O_WRONLY | O_CREAT | O_TRUNC, 0666); if (fd < 0) die_errno("Could not open '%s' for writing",