summaryrefslogtreecommitdiff
path: root/git-shell-commands/hook-install
diff options
context:
space:
mode:
Diffstat (limited to 'git-shell-commands/hook-install')
-rwxr-xr-xgit-shell-commands/hook-install17
1 files changed, 11 insertions, 6 deletions
diff --git a/git-shell-commands/hook-install b/git-shell-commands/hook-install
index 08a0340..b38836a 100755
--- a/git-shell-commands/hook-install
+++ b/git-shell-commands/hook-install
@@ -5,19 +5,24 @@
set -e
+exit 1 # I don't trust this script
+
hook="${1}"
script="${HOME}/.ssh/git-hooks/${2}"
-repo="${HOME}/${3}"
+repo="${3}"
clone="${4:-${repo}}"
+repo="$(sed -r 's,^/*,,' <<<"$repo")"
+_repo="$(sed -r -e '/(^|\/)\.\.($|\/)/d' -e "s,[^A-Za-z0-9\./_~-],,g" <<<"$repo")"
+test "$repo" = "$_repo" || { printf 'Illegal name: %s\n' "${repo}"; exit 1; }
+test -d "$repo".git || { printf 'Does not exist: %s\n' "${repo}"; exit 1; }
+
# Tests
-test -f "${repo}/HEAD"
+test -f "${repo}.git/HEAD"
test -f "${clone}/.git/HEAD"
# Installs the generic hook that runs scripts
-test -f "${repo}/hooks/${hook}" || ln -s "${HOME}/.ssh/git-hooks/generic" "${repo}/hooks/${hook}"
+test -f "${repo}.git/hooks/${hook}" || ln -s "${HOME}/.ssh/git-hooks/generic" "${repo}.git/hooks/${hook}"
# Install the hook on the repo
-git config -f "${repo}/config" --add "hacking.hooks.${hook}.${2}" "${clone}"
-
-exit $?
+git config -f "${repo}.git/config" --add "hacking.hooks.${hook}.${2}" "${clone}"