Skip to content
Snippets Groups Projects
Commit c189913f authored by Richard Hartmann's avatar Richard Hartmann
Browse files

Implement hook system

Thanks to Vincent Demeester for this idea.
parent 6bce32ed
No related branches found
No related tags found
No related merge requests found
......@@ -111,6 +111,21 @@ an interactive user.
As noted earlier, `vcsh` will set <$GIT_DIR> and <$GIT_WORK_TREE> to the
appropriate values for fake bare git repositories.
## HOOK SYSTEM
`vcsh` provides a hook system. Hook scripts need to be executable and placed
in <$XDG_CONFIG_HOME/vcsh/hooks-available>. From there, they should be
soft-linked <$XDG_CONFIG_HOME/vcsh/hooks-enabled>.
Hooks follow a simple format. `pre-run` will be run before anything is run.
If you want to have more than one script for a certain hook, just append
strings to order them. A system of `pre-run`, `pre-run.10`, `pre-run.20` etc
is suggested. The dot it optional.
If you want to create hooks for a specific `vcsh` repository, simply prepend
the repository's name, followed by a dot, i.e. `zsh.pre-run`. This dot is
mandatory.
## DETAILED HOWTO AND FURTHER READING
Man pages are intended to be short and thus often useless to glean best
......
......@@ -11,6 +11,7 @@
[ -r "$XDG_CONFIG_HOME/vcsh/config" ] && . "$XDG_CONFIG_HOME/vcsh/config"
[ -n "$VCSH_DEBUG" ] && set -vx
[ -z "$VCSH_REPO_D" ] && VCSH_REPO_D="$XDG_CONFIG_HOME/vcsh/repo.d"
[ -z "$VCSH_HOOK_D" ] && VCSH_HOOK_D="$XDG_CONFIG_HOME/vcsh/hooks-enabled"
[ -z "$VCSH_BASE" ] && VCSH_BASE="$HOME"
[ -z "$VCSH_GITIGNORE" ] && VCSH_GITIGNORE='exact'
......@@ -103,14 +104,23 @@ To continue, type \"Yes, do as I say\""
}
enter() {
hook pre-enter
use
$SHELL
hook post-enter
}
git_dir_exists() {
[ -d "$GIT_DIR" ] || fatal "no repository found for '$VCSH_REPO_NAME'" 12
}
hook() {
for f in $VCSH_HOOK_D/$1* $VCSH_HOOK_D/$VCSH_REPO_NAME.$1*; do
[ -x "$f" ] || continue
"$f"
done
}
init() {
[ ! -e "$GIT_DIR" ] || fatal "'$GIT_DIR' exists" 10
export GIT_WORK_TREE="$VCSH_BASE"
......@@ -150,8 +160,10 @@ rename() {
}
run() {
hook pre-run
use
$VCSH_EXTERNAL_COMMAND
hook post-run
}
setup() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment