# [PATCH] git-merge: run commit hooks when making merge commits

4 messages from 2007-07-11 to 2007-07-12. Participants: Sam Vilain, Junio C Hamano, Andy Parkins.
Thread: https://gitlist.dev/t/8979

## Sam Vilain, 2007-07-11 10:32

Subject: [PATCH] git-merge: run commit hooks when making merge commits
Message-ID: <11841499201242-git-send-email-sam.vilain@catalyst.net.nz>
URL: https://gitlist.dev/e/11841499201242-git-send-email-sam.vilain%40catalyst.net.nz

```
git-merge.sh was not running the commit hooks, so run them in the two
places where we go to commit.

Signed-off-by: Sam Vilain <sam.vilain@catalyst.net.nz>
---
   Not sure if it should call these or some specialist hooks, like
   git-am does.

 git-merge.sh |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/git-merge.sh b/git-merge.sh
index 981d69d..ef4f51b 100755
--- a/git-merge.sh
+++ b/git-merge.sh
@@ -117,6 +117,29 @@ merge_name () {
 	fi
 }
 
+call_pre_hooks () {
+	message="$1"
+	if test -x "$GIT_DIR"/hooks/pre-commit
+	then
+		"$GIT_DIR"/hooks/pre-commit || exit 1
+	fi
+	if test -x "$GIT_DIR"/hooks/commit-msg
+	then
+		printf '%s\n' "$message" > "$GIT_DIR"/MERGE_MSG
+		"$GIT_DIR"/hooks/commit-msg "$GIT_DIR"/MERGE_MSG || exit 1
+		cat "$GIT_DIR"/MERGE_MSG
+	else
+		echo "$message"
+	fi
+}
+
+call_post_hook () {
+	if test -x "$GIT_DIR"/hooks/post-commit
+	then
+		"$GIT_DIR"/hooks/post-commit
+	fi
+}
+
 case "$#" in 0) usage ;; esac
 
 have_message=
@@ -334,11 +357,13 @@ f,*)
 		   result_tree=$(git-write-tree)
 		then
 			echo "Wonderful."
+			merge_msg=$(call_pre_hooks "$merge_msg")
 			result_commit=$(
 				printf '%s\n' "$merge_msg" |
 				git-commit-tree $result_tree -p HEAD -p "$1"
 			) || exit
 			finish "$result_commit" "In-index merge"
+			call_post_hook
 			dropsave
 			exit 0
 		fi
@@ -440,8 +465,10 @@ done
 if test '' != "$result_tree"
 then
     parents=$(git-show-branch --independent "$head" "$@" | sed -e 's/^/-p /')
+    merge_msg=$(call_pre_hooks "$merge_msg")
     result_commit=$(printf '%s\n' "$merge_msg" | git-commit-tree $result_tree $parents) || exit
     finish "$result_commit" "Merge made by $wt_strategy."
+    call_post_hook
     dropsave
     exit 0
 fi
-- 
1.5.2.1.1131.g3b90

```

## Junio C Hamano, 2007-07-11 21:26

Subject: Re: [PATCH] git-merge: run commit hooks when making merge commits
Message-ID: <7vd4yy4opa.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vd4yy4opa.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <11841499201242-git-send-email-sam.vilain@catalyst.net.nz>

```
Sam Vilain <sam.vilain@catalyst.net.nz> writes:

> git-merge.sh was not running the commit hooks, so run them in the two
> places where we go to commit.
>
> Signed-off-by: Sam Vilain <sam.vilain@catalyst.net.nz>
> ---
>    Not sure if it should call these or some specialist hooks, like
>    git-am does.

I suspect some people have pre-commit scripts that have been
meant to catch style errors for their own commits, and invoking
that on merge would wreak havoc --- there is not much you can do
if you want to get the work done by somebody else at that point.
Introducing a new pre-merge-commit hook would probably be safer;
if one wants to use the same check as one's pre-commit does, the
new hook in the repository can exec $GIT_DIR/hooks/pre-commit.

The commit-msg hook I have no clue what people usually use it
for in the real world, but a merge commit message tends to be
quite different from the message you would give to your own
straight line commits, so custom reformatting rules people have
in commit-msg hook may not apply to merge commit messages.

Same for post-commit, but probably to lessor extent, as I
suspect people use that mostly for per-commit notification
mechanism.

```

## Sam Vilain, 2007-07-11 23:21

Subject: Re: [PATCH] git-merge: run commit hooks when making merge commits
Message-ID: <469565FF.5040103@vilain.net>
URL: https://gitlist.dev/e/469565FF.5040103%40vilain.net
In-Reply-To: <7vd4yy4opa.fsf@assigned-by-dhcp.cox.net>

```
Junio C Hamano wrote:
> Sam Vilain <sam.vilain@catalyst.net.nz> writes:
> 
>> git-merge.sh was not running the commit hooks, so run them in the two
>> places where we go to commit.
>>
>> Signed-off-by: Sam Vilain <sam.vilain@catalyst.net.nz>
>> ---
>>    Not sure if it should call these or some specialist hooks, like
>>    git-am does.
> 
> I suspect some people have pre-commit scripts that have been
> meant to catch style errors for their own commits, and invoking
> that on merge would wreak havoc --- there is not much you can do
> if you want to get the work done by somebody else at that point.
> Introducing a new pre-merge-commit hook would probably be safer;
> if one wants to use the same check as one's pre-commit does, the
> new hook in the repository can exec $GIT_DIR/hooks/pre-commit.
> 
> The commit-msg hook I have no clue what people usually use it
> for in the real world, but a merge commit message tends to be
> quite different from the message you would give to your own
> straight line commits, so custom reformatting rules people have
> in commit-msg hook may not apply to merge commit messages.

True.  OTOH, if you commit with `git commit` after a merge which failed
or was called with --no-commit, then it will call the commit hook.  So
those scripts would have to deal with that case anyway.

So, should `git commit` detect it is committing a merge and call the
merge-hooks, should we use the same hooks, or, should this be something
like hooks/*-automerge ?

Sam.

```

## Andy Parkins, 2007-07-12 08:03

Subject: Re: [PATCH] git-merge: run commit hooks when making merge commits
Message-ID: <200707120903.46538.andyparkins@gmail.com>
URL: https://gitlist.dev/e/200707120903.46538.andyparkins%40gmail.com
In-Reply-To: <7vd4yy4opa.fsf@assigned-by-dhcp.cox.net>

```
On Wednesday 2007 July 11, Junio C Hamano wrote:

> The commit-msg hook I have no clue what people usually use it
> for in the real world, but a merge commit message tends to be

I use it for adding my Signed-Off-By automatically in my git repository.  Of 
course that's only valid for the likes of me because I can be sure that I 
only ever commit my own patches, rather than integrating other people's.



Andy

-- 
Dr Andy Parkins, M Eng (hons), MIET
andyparkins@gmail.com

```
