зеркало из https://github.com/microsoft/git.git
merge: honor prepare-commit-msg hook
When a merge is stopped due to conflicts or --no-commit, the subsequent commit calls the prepare-commit-msg hook. However, it is not called after a clean merge. Fix this inconsistency by invoking the hook after clean merges as well. Signed-off-by: Jay Soffian <jaysoffian@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
7ed863a85a
Коммит
65969d43d1
|
@ -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)
|
static int merge_trivial(void)
|
||||||
{
|
{
|
||||||
unsigned char result_tree[20], result_commit[20];
|
unsigned char result_tree[20], result_commit[20];
|
||||||
|
@ -806,6 +832,7 @@ static int merge_trivial(void)
|
||||||
parent->next = xmalloc(sizeof(*parent->next));
|
parent->next = xmalloc(sizeof(*parent->next));
|
||||||
parent->next->item = remoteheads->item;
|
parent->next->item = remoteheads->item;
|
||||||
parent->next->next = NULL;
|
parent->next->next = NULL;
|
||||||
|
run_prepare_commit_msg();
|
||||||
commit_tree(merge_msg.buf, result_tree, parent, result_commit, NULL);
|
commit_tree(merge_msg.buf, result_tree, parent, result_commit, NULL);
|
||||||
finish(result_commit, "In-index merge");
|
finish(result_commit, "In-index merge");
|
||||||
drop_save();
|
drop_save();
|
||||||
|
@ -835,6 +862,7 @@ static int finish_automerge(struct commit_list *common,
|
||||||
}
|
}
|
||||||
free_commit_list(remoteheads);
|
free_commit_list(remoteheads);
|
||||||
strbuf_addch(&merge_msg, '\n');
|
strbuf_addch(&merge_msg, '\n');
|
||||||
|
run_prepare_commit_msg();
|
||||||
commit_tree(merge_msg.buf, result_tree, parents, result_commit, NULL);
|
commit_tree(merge_msg.buf, result_tree, parents, result_commit, NULL);
|
||||||
strbuf_addf(&buf, "Merge made by %s.", wt_strategy);
|
strbuf_addf(&buf, "Merge made by %s.", wt_strategy);
|
||||||
finish(result_commit, buf.buf);
|
finish(result_commit, buf.buf);
|
||||||
|
@ -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"));
|
die_errno("Could not write to '%s'", git_path("MERGE_HEAD"));
|
||||||
close(fd);
|
close(fd);
|
||||||
strbuf_addch(&merge_msg, '\n');
|
strbuf_addch(&merge_msg, '\n');
|
||||||
fd = open(git_path("MERGE_MSG"), O_WRONLY | O_CREAT, 0666);
|
write_merge_msg();
|
||||||
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);
|
|
||||||
fd = open(git_path("MERGE_MODE"), O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
fd = open(git_path("MERGE_MODE"), O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
die_errno("Could not open '%s' for writing",
|
die_errno("Could not open '%s' for writing",
|
||||||
|
|
|
@ -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'
|
cat > "$HOOK" <<'EOF'
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
exit 1
|
exit 1
|
||||||
|
|
Загрузка…
Ссылка в новой задаче