You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
scripts/code_format/git-hooks/install-client-side-hooks

48 lines
1.6 KiB

#!/bin/bash
# Install client side hooks into all TDE local repositories
# Note: this is <tdehome>/scripts/code_format/git-hooks
SCRIPT_DIR=`dirname $(readlink -f "$0")`
TDE_DIR="${SCRIPT_DIR}/../../.."
if [[ ! -f "${TDE_DIR}/.gitmodules" ]]; then
echo " --- Unable to find repository list (.gitmodules). Aborting."
exit 1
fi
sed -n "s|^\[submodule \"\([^\"]*\)\"\]$|\1|p" <"${TDE_DIR}/.gitmodules" | \
grep "^main/" | \
while read MODULE; do
cd "${TDE_DIR}/${MODULE}"
GIT_COMMON_DIR=`git rev-parse --git-common-dir`
if [[ "${GIT_COMMON_DIR}" == ".git" ]]; then
# Normal repository
HOOK_DIR="${TDE_DIR}/${MODULE}/${GIT_COMMON_DIR}/hooks"
else
# Worktree repository
HOOK_DIR="${GIT_COMMON_DIR}/hooks"
fi
# Check hook folder exists
if [ ! -d "${HOOK_DIR}" ]; then
echo " --- Unable to find the hook folder for the repository ${MODULE}"
echo " Skipping module."
continue
fi
# Check whether the pre-commit hook already exists. Warn users unless the
# script was invoked with "-f" parameter.
if [ -e "${HOOK_DIR}/pre-commit" -a "$1" != "-f" ]; then
echo " --- Pre-commit hook already exists for the repository ${MODULE}"
echo " Rerun this script with '-f' to force hook overwriting."
echo " Skipping module."
continue
fi
cp "${SCRIPT_DIR}/pre-commit" "${HOOK_DIR}/"
chmod a+x "${HOOK_DIR}/pre-commit"
if [ -e "${HOOK_DIR}/pre-commit" ]; then
echo " Installed pre-commit hook for the repository ${MODULE}"
else
echo " --- Something went wrong when installing the pre-commit hook for the repository ${MODULE}"
fi
done