We are using a ticketing system that I want to automatically update as developers push their changes to the server. In order to update it, I only need to provide a specific URL with the commit message as a GET variable. The page being called will then log this change. I know my way to go is with hooks, but I am not familiar with Bash nor Perl so it is quite challenging.
I want to achieve this:
- Developer PUSHes to the server
post-receive
hook runs and checks which different commits are new (because there could be several in one push)- It loops through them, and for each commit, it will open a URL with the commit message (
curl http://server.com/logthis.asp?msg=Here_goes_the_commit_message
, something like that)
That's it. Although I have checked out some samples related to this kind of idea, none do exactly this. How could this be done?
The main PITA is to isolate the correct list of new revisions, which I borrowed from /usr/share/doc/git/contrib/hooks/post-receive-email(show_new_revisions).
while read oval nval ref ; do
if expr "$ref" : "^refs/heads/"; then
if expr "$oval" : '0*$' >/dev/null
then
revspec=$nval
else
revspec=$oval..$nval
fi
other_branches=$(git for-each-ref --format='%(refname)' refs/heads/ |
grep -F -v $ref)
# You may want to collect the revisions to sort out
# duplicates before the transmission to the bugtracker,
# but not sorting is easier ;-)
for revision in `git rev-parse --not $other_branches | git rev-list --stdin $revspec`; do
# I don't know if you need to url-escape the content
# Also you may want to transmit the data in a POST request,
wget "http://server.com/logthis.asp?msg=$(git log $revision~1..$revision)"
done
fi
done
来源:https://stackoverflow.com/questions/8263186/git-post-receive-hook-that-grabs-commit-messages-and-posts-back-to-url