Reputation: 82
I am new to git and git-hooks. I am tryig to validate every push that is made and for that I need two things:-
I need to do that using Git's pre-receive hook, but I am not able to any of the above two mentioned things.
I have been searching this issue on SO, githooks's doc and other sites but nothing worked for me.
Thanks in advance.
Upvotes: 1
Views: 2129
Reputation: 30868
There is a gitlab
tag in the question, so I assume you've read Gitlab Server Hooks.
From the githooks doc on pre-receive, we can see that the hook doesn't take any parameter and it reads ref info from standard input. To read from standard input in bash, you can refer to the pre-push sample, which you can also find in the local repository's .git/hooks/pre-push.sample
if you haven't specified init.templateDir
in gitconfig. pre-receive
uses a different line format from pre-push
, so modify the while read
part,
#!/bin/bash
# <old-value> SP <new-value> SP <ref-name> LF
while read oldv newv ref;do
# get new commits
newcommits=$(git rev-list ${oldv}..${newv})
# get committer and email and message of each commit
for commit in ${newcommits};do
committer=$(git log -1 ${commit} --pretty="%cn")
email=$(git log -1 ${commit} --pretty="%ce")
message=$(git log -1 ${commit} --pretty="%B")
done
done
The above sample misses some checks like if it's a ref creation or deletion like in the pre-push
sample, and if there's any new commit. It's recommended to add these checks. The hook does not know the pusher's Gitlab account. The committer name and email may not accord with the account.
As git push
can send one or more given strings to the server by one or more -o <string>
or --push-options=<string>
and Gitlab supports the feature, you could also add codes to receive these strings. You can find how to do it in the pre-receive sample.
Upvotes: 2