diff options
author | Nicolás Reynolds <fauno@endefensadelsl.org> | 2013-04-17 16:33:18 -0300 |
---|---|---|
committer | Nicolás Reynolds <fauno@endefensadelsl.org> | 2013-04-17 16:33:18 -0300 |
commit | 2f20803b079f39bc97e4b64a4c78aa58e22a8217 (patch) | |
tree | 104ec8790aae8da1907faf7932a302975d847a63 | |
parent | d00c7af7a28fa9d061a00b3e9af6d31309d0ad7f (diff) |
Support for installing hooks
-rwxr-xr-x | git-hooks/auto-deploy | 16 | ||||
-rwxr-xr-x | git-hooks/generic | 12 | ||||
-rw-r--r-- | git-shell-commands/hook-install | 25 |
3 files changed, 53 insertions, 0 deletions
diff --git a/git-hooks/auto-deploy b/git-hooks/auto-deploy new file mode 100755 index 0000000..0480756 --- /dev/null +++ b/git-hooks/auto-deploy @@ -0,0 +1,16 @@ +#!/bin/bash +# auto-deploy +# Usage: auto-deploy /srv/http/repo + +# fail on any error +set -e + +# Can we write on the clone? +test -w "${1}/.git/HEAD" + +# pull this repo +git --git-dir "${1}/.git" \ + --work-tree "${1}" \ + pull origin master + +exit $? diff --git a/git-hooks/generic b/git-hooks/generic new file mode 100755 index 0000000..bd127a6 --- /dev/null +++ b/git-hooks/generic @@ -0,0 +1,12 @@ +#!/bin/sh +# Generic hook, installs itself as a valid githook(5) and runs whatever it +# finds on hacking.hook.$self +# Format: +# hacking.hooks.post-receive.auto-deploy /srv/http/markpower.hackcoop.com.ar + +git config --local --get-regexp "hacking.hooks.${0}.*" | \ +while read hook repo; do + hook="`echo "${hook}" | cut -d'.' -f4`" + + ${HOME}/.ssh/git-hooks/${hook} ${repo} ${@} </dev/stdin +done diff --git a/git-shell-commands/hook-install b/git-shell-commands/hook-install new file mode 100644 index 0000000..482a915 --- /dev/null +++ b/git-shell-commands/hook-install @@ -0,0 +1,25 @@ +#!/bin/sh +# * hook-install +# Installs a hook on a repo +# ssh git@host hook-install hook script repo [alt-dir] + +set -e + +hook="${1}" +script="${HOME}/.ssh/git-hooks/${2}" +repo="${HOME}/${3}" +clone="${4:-${repo}}" + +# Tests +test -f "${repo}/HEAD" +test -f "${clone}/.git/HEAD" +test -f "${repo}/hooks/${hook_name}" + +# Installs the generic hook that runs scripts +test -f "${repo}/hooks/${hook}" || \ + ln -s "${HOME}/.ssh/git-hooks/generic" "${repo}/hooks/${hook}" + +# Install the hook on the repo +git config --local --add "hacking.hooks.${hook}.${2}" "${clone}" + +exit $? |