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.
48 lines
1.6 KiB
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
|