#!/bin/sh
# git hook: post-receive

# !!! PLEASE ADJUST !!!
server=http://jenkins.example.org
projectname=ADJUSTME
token=ADJUSTME

trigger_jenkins()
{
  oldrev=$(git rev-parse $1)
  newrev=$(git rev-parse $2)
  refname="$3"

  if expr "$oldrev" : '0*$' >/dev/null ; then
    change_type="create"
  else
    if expr "$newrev" : '0*$' >/dev/null ; then
      change_type="delete"
    else
      change_type="update"
    fi
  fi

  newrev_type=$(git cat-file -t "$newrev" 2> /dev/null)
  oldrev_type=$(git cat-file -t "$oldrev" 2> /dev/null)

  case "$change_type" in
    create|update)
      rev="$newrev"
      rev_type="$newrev_type"
      ;;
    delete)
      return # we are not interested in deletes
      ;;
  esac

  case "$refname","$rev_type" in
    refs/heads/*,commit)
      # branch
      refname_type="branch"
      branch_name=${refname##refs/heads/}
      ;;
  esac

  echo "Detected branch $branch_name"

  # trigger autobuild
  if wget --tries=2 --dns-timeout=5 --connect-timeout=5 --read-timeout=5 \
          -O /dev/null "${server}/job/${projectname}/buildWithParameters?token=$token&branch=origin/${branch_name}" >/dev/null 2>&1 ; then
    echo "Triggered autobuild at ${server}/job/${projectname}/lastBuild/"
  else
    echo "Could not trigger autobuild at ${server} (project not present/set up?)"
  fi

  # or with curl:
  # cause=git-hook-trigger
  # if curl --insecure --max-time 5 --connect-timeout 5 \
  #        --data-urlencode "token=${token}" \
  #        --data-urlencode "cause=${cause}" \
  #        --data-urlencode "branch=${branch_name}" \
  #        "${server}/job/${projectname}/buildWithParameters" >/dev/null 2>&1; then
  # ...
}

if [ -n "$1" ] && [ -n "$2" ] && [ -n "$3" ]; then
  trigger_jenkins $2 $3 $1
else
  while read oldrev newrev refname; do
    trigger_jenkins $oldrev $newrev $refname
  done
fi

# vim:foldmethod=marker ts=2 ft=sh ai expandtab sw=2
