Skip to content

Commit

Permalink
Merge branch 'js/maint-merge-use-prepare-commit-msg-hook' into maint
Browse files Browse the repository at this point in the history
* js/maint-merge-use-prepare-commit-msg-hook:
  merge: honor prepare-commit-msg hook
  • Loading branch information
Junio C Hamano committed Mar 16, 2011
2 parents 6affdbe + 65969d4 commit 5b8aac3
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 8 deletions.
37 changes: 29 additions & 8 deletions builtin/merge.c
Original file line number Diff line number Diff line change
Expand Up @@ -795,6 +795,32 @@ static void add_strategies(const char *string, unsigned attr)

}

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];
Expand All @@ -806,6 +832,7 @@ static int merge_trivial(void)
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();
Expand Down Expand Up @@ -835,6 +862,7 @@ static int finish_automerge(struct commit_list *common,
}
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);
Expand Down Expand Up @@ -1316,14 +1344,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
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",
Expand Down
12 changes: 12 additions & 0 deletions t/t7505-prepare-commit-msg-hook.sh
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,18 @@ test_expect_success 'with hook (-c)' '
'

test_expect_success 'with hook (merge)' '
head=`git rev-parse HEAD` &&
git checkout -b other HEAD@{1} &&
echo "more" >> file &&
git add file &&
git commit -m other &&
git checkout - &&
git merge other &&
test "`git log -1 --pretty=format:%s`" = merge
'

cat > "$HOOK" <<'EOF'
#!/bin/sh
exit 1
Expand Down

0 comments on commit 5b8aac3

Please sign in to comment.