> Change the hardcoded lookup for .git/hooks/* to optionally lookup in > $(git config core.hooksDirectory)/* instead if that config key is set. > > This is essentially a more intrusive version of the git-init ability to > specify hooks on init time via init templates. > > The difference between that facility and this feature is that this can > be set up after the fact via e.g. ~/.gitconfig or /etc/gitconfig to > apply for all your personal repositories, or all repositories on the > system. > > I plan on using this on a centralized Git server where users can create > arbitrary repositories under /gitroot, but I'd like to manage all the > hooks that should be run centrally via a unified dispatch mechanism. > > Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> > --- > Documentation/config.txt | 10 ++++++++++ > Documentation/githooks.txt | 5 ++++- > cache.h | 1 + > config.c | 3 +++ > environment.c | 1 + > run-command.c | 5 ++++- > t/t1350-config-hooks-directory.sh | 35 +++++++++++++++++++++++++++++++++++ > 7 files changed, 58 insertions(+), 2 deletions(-) > create mode 100755 t/t1350-config-hooks-directory.sh > > diff --git a/Documentation/config.txt b/Documentation/config.txt > index 42d2b50..2faf3c0 100644 > --- a/Documentation/config.txt > +++ b/Documentation/config.txt > @@ -618,6 +618,16 @@ core.attributesFile:: > $XDG_CONFIG_HOME/git/attributes. If $XDG_CONFIG_HOME is either not > set or empty, $HOME/.config/git/attributes is used instead. > > +core.hooksDirectory:: > + By default Git will look for your hooks in the '$GIT_DIR/hooks' > + directory. Set this to different absolute directory name, Mental note: here you say that it should be an absolute directory. > + e.g. '/etc/git/hooks', and Git will try to find your hooks that s/hooks that/hooks in that/ > + directory, e.g. '/etc/git/hooks/pre-receive' instead of in > + '$GIT_DIR/hooks'. > ++ > +This is useful in cases where you'd like to centrally configure your > +Git hooks instead of configuring them on a per-repository basis. > + > core.editor:: > Commands such as `commit` and `tag` that lets you edit > messages by launching an editor uses the value of this > diff --git a/t/t1350-config-hooks-directory.sh b/t/t1350-config-hooks-directory.sh > new file mode 100755 > index 0000000..556c1d3 > --- /dev/null > +++ b/t/t1350-config-hooks-directory.sh > @@ -0,0 +1,35 @@ > +#!/bin/sh > + > +test_description='Test the core.hooksDirectory configuration variable' > + > +. ./test-lib.sh > + > +test_expect_success 'set up a pre-commit hook in core.hooksDirectory' ' > + mkdir -p .git/custom-hooks .git/hooks && > + cat >.git/custom-hooks/pre-commit <<EOF && > +#!$SHELL_PATH > +printf "%s" "." >>.git/PRE-COMMIT-HOOK-WAS-CALLED > +EOF > + cat >.git/hooks/pre-commit <<EOF && > + chmod +x .git/hooks/pre-commit > +#!$SHELL_PATH > +printf "%s" "SHOULD NOT BE CALLED" >>.git/PRE-COMMIT-HOOK-WAS-CALLED > +EOF > + chmod +x .git/custom-hooks/pre-commit > +' Please use the 'write_script' helper for, well, writing scripts. > + > +test_expect_success 'Check that various forms of specifying core.hooksDirectory work' ' > + test_commit no_custom_hook && > + git config core.hooksDirectory .git/custom-hooks && > + test_commit have_custom_hook && > + git config core.hooksDirectory .git/custom-hooks/ && > + test_commit have_custom_hook_trailing_slash && These two cases ensure that it should work even when the configured hook directory is given as a relative path, though the docs say it should be an absolute path. > + git config core.hooksDirectory "$PWD/.git/custom-hooks" && > + test_commit have_custom_hook_abs_path && > + git config core.hooksDirectory "$PWD/.git/custom-hooks/" && > + test_commit have_custom_hook_abs_path_trailing_slash && > + printf "%s" "...." >.git/PRE-COMMIT-HOOK-WAS-CALLED.expect && > + test_cmp .git/PRE-COMMIT-HOOK-WAS-CALLED.expect .git/PRE-COMMIT-HOOK-WAS-CALLED Indentation with spaces. > +' > + > +test_done > -- > 2.1.3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html