aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README2
-rwxr-xr-xgit-hooks67
2 files changed, 58 insertions, 11 deletions
diff --git a/README b/README
index 6784bb1..530e5e7 100644
--- a/README
+++ b/README
@@ -9,6 +9,8 @@ Add git-hooks to your PATH environment variable so 'git hooks' can be run.
Run 'git hooks --install' Inside a git project to change that projects git hooks to use git-hooks hooks. 'git hooks --uninstall' can be run at any time to go back to the old hooks that were installed before (typically the default which does nothing).
+Run 'git hooks --installglobal' to force any new git repository or any git repository you clone to have a reminders to install git hooksi. (It can't be on by default for security reasons of course)
+
************************************
Overview
diff --git a/git-hooks b/git-hooks
index fa08001..2d75c8b 100755
--- a/git-hooks
+++ b/git-hooks
@@ -95,6 +95,23 @@ function run_hook
set +e
}
+function install_hooks_into
+{
+ DIR=$1
+ cd "${DIR}"
+
+ set -e
+ mv hooks hooks.old
+ set +e
+ mkdir hooks
+ cd hooks
+ for file in applypatch-msg commit-msg post-applypatch post-checkout post-commit post-merge post-receive pre-applypatch pre-auto-gc pre-commit prepare-commit-msg pre-rebase pre-receive update pre-push
+ do
+ echo "${2}" > "${file}"
+ chmod +x "${file}"
+ done
+}
+
function install_hooks
{
GITDIR=`git rev-parse --git-dir`
@@ -108,17 +125,9 @@ function install_hooks
echo "hooks.old already exists, perhaps you already installed?"
return 1
fi
- set -e
- mv hooks hooks.old
- set +e
- mkdir hooks
- cd hooks
- for file in applypatch-msg commit-msg post-applypatch post-checkout post-commit post-merge post-receive pre-applypatch pre-auto-gc pre-commit prepare-commit-msg pre-rebase pre-receive update pre-push
- do
- echo '#!/usr/bin/env bash
-git-hooks run "$0" "$@"' > "${file}"
- chmod +x "${file}"
- done
+ cmd='#!/usr/bin/env bash
+git-hooks run "$0" "$@"';
+ install_hooks_into "${PWD}" "${cmd}"
else
if [ ! -d hooks.old ] ; then
echo "Error, hooks.old doesn't exists, aborting uninstall to not destroy something"
@@ -158,6 +167,28 @@ function report_error {
exit 1
}
+function installglobal {
+ TEMPLATE="$HOME/.git-template-with-git-hooks"
+ if [ ! -d "${TEMPLATE}" ] ; then
+ DEFAULT=/usr/share/git-core/templates
+ if [ -d ${DEFAULT} ] ; then
+ cp -rf /usr/share/git-core/templates "${TEMPLATE}"
+ else
+ mkdir -p "${TEMPLATE}/hooks"
+ fi
+ cmd="#!/usr/bin/env bash
+echo \"git hooks not installed in this repository. Run 'git hooks --install' to install it or 'git hooks -h' for more information.\"";
+ install_hooks_into "${TEMPLATE}" "${cmd}"
+ mv "${TEMPLATE}/hooks.old" "${TEMPLATE}/hooks.original"
+ fi
+ git config --global init.templatedir "${TEMPLATE}"
+ echo "Git global config init.templatedir is now set to ${TEMPLATE}"
+}
+
+function uninstallglobal {
+ git config --global --unset init.templatedir
+}
+
case $1 in
run )
if [ ! -z "${GIT_DIR}" ] ; then
@@ -170,14 +201,28 @@ case $1 in
--install|--uninstall )
install_hooks "$1"
;;
+ --installglobal )
+ installglobal
+ ;;
+ --uninstallglobal )
+ uninstallglobal
+ ;;
-h|--help|-? )
echo 'Git Hooks'
+ echo ' A tool to manage project, user, and global Git hooks for multiple git repositories.'
+ echo ' https://github.com/icefox/git-hooks'
echo ''
echo 'Options:'
echo ' --install Replace existing hooks in this repository with a call to'
echo ' git hooks run [hook]. Move old hooks directory to hooks.old'
echo ' --uninstall Remove existing hooks in this repository and rename hooks.old'
echo ' back to hooks'
+ echo ' --installglobal'
+ echo ' Create a template .git directory that that will be used whenever'
+ echo ' a git repository is created or cloned that will remind the user'
+ echo ' to install git-hooks.'
+ echo ' --uninstallglobal'
+ echo ' Turn off the global .git directory template that has the reminder.'
echo " run [cmd] Run the hooks for cmd (such as pre-commit)"
echo " (no arguments) Show currently installed hooks"
;;