[![PyPI Python Versions](https://img.shields.io/pypi/pyversions/flowtool-githooks.svg)](https://pypi.python.org/pypi/flowtool-githooks)
[![PyPI Latest Version](https://img.shields.io/pypi/v/flowtool-githooks.svg)](https://pypi.python.org/pypi/flowtool-githooks)
[![PyPI Distribution Format](https://img.shields.io/pypi/format/flowtool-githooks.svg)](https://pypi.python.org/pypi/flowtool-githooks)

flowtool-githooks
=================

Some functionality to use granular git hooks.

The main concept behind `flowtool-githooks` is, that instead of running
one single hook script the package will 'run' a directory instead.
The directory will be created right next to where the hook is in
`.git/hooks` and it has the name of the hook plus `.d`.
So for example the directory for the `pre-commit` hook is
`.git/hooks/pre-commit.d` right next to the hook script:
`.git/hooks/pre-commit`

`flowtool-githooks` ships the runner script and adds some commands to
manage the content of the hook directories.

Scripts inside the hooks directory, `.git/hooks/pre-commit.d`
and `.git/hooks/commit-msg.d` currently, are only executed, if
the are executable. This is an old way of activating and
deactivating the scripts by the management command.

## Installation

Currently the `flowtool-githooks` package contains only the runner and
the management commands. To get some pre configured hooks check the
[`flowtool-githooks-demo`](https://github.com/isnok/py-flowlib/tree/master/hooks-demo) package, and (for python-related hooks)
[`flowtool-python`](https://github.com/isnok/py-flowlib/tree/master/pythonic).

Once you have `flowtool-githooks` and it's requirements installed,
you can run

```shell
flowtool githooks-install   # install the runner (asks before overwriting anything)
```

from inside a git repository to install the hooks.
When they are installed, they can be configred interactively by running

```shell
flowtool githooks-config    # interactively configure git hooks (needs other hook-pkgs also)
```

And you can also just get the status of githooks in the current repo:

```shell
flowtool githooks-status
```

## Custom hook scripts

Currently it is better supported to create symlinks in the hook directory.
To introduce arbitrary scripts/executables as git hooks use the command:

```shell
$ flowtool githooks-introduce --hook <hook_name> /path/to/file
$ flowtool githooks-introduce --help  # might be helpful as well
```


## More to come

There is also a small library of "discovery functions" contained in this package.
It is used by some hook scripts to find files to take care of.
