[Kde-scm-interest] Post-commit hooks script

Johannes Sixt j.sixt at viscovery.net
Thu Dec 3 13:02:59 CET 2009


Jean-Nicolas Artaud schrieb:
>     * BUG/CCMAIL
>     * email/CIA

These are only notifications, but you can use the post-update hook only if
reflogs are enabled on the server (I do not know whether this is the case
on gitorious) because you have to find out the old value of the updated
branch (that would be branchname@{1}).

>     * license header checks 

Strictly speaking, this is a verification, and should actually be a
pre-commit hook that prevents that wrong headers enter the repository in
the first place. But you cannot force users to enable the hook...

> Another thing is *necessary* for me is to have an example of a post-update 
> hook script because I cannot imagine what parameters are necessary for this.

It would go like this:

---- 8< ------
#!/bin/sh

treat_ref()
{
   old=$1@{1}	# this assumes that reflogs are available!
   new=$1
   for cmt in $(git rev-list $old..$new); do
      # investigate commit message
      git cat-file commit $cmt |
      while read line; do
         case $line in
         CCMAIL:*)
             ...
             ;;
         BUG:*)
             ...
             ;;
         esac
      done
      # investigate added files (but skip merges)
      git rev-parse --verify --quiet $cmt^2 -- ||
      git diff-tree --name-only --diff-filter=A -r $cmt^..$cmt -- |
      while read file; do
         # check license header
         git cat-file blob "$cmt:$file" | ...
      done
   done
}

for ref
do
    case $ref in
    refs/heads/*)
       treat_ref "$ref"
    esac
done
exit 0

---- 8< ------

-- Hannes


More information about the Kde-scm-interest mailing list