|
- #!/usr/bin/env bash
- # Copyright © 2023 OpenIM. All rights reserved.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- #
- # -----------------------------------------------------------------------------
- # init-githooks.sh
- #
- # This script assists in managing Git hooks for the OpenIM project.
- # When executed:
- # 1. It prompts the user to enable git hooks.
- # 2. If the user accepts, it copies predefined hook scripts to the appropriate
- # Git directory, making them executable.
- # 3. If requested, it can delete the added hooks.
- #
- # This script equal runs `make init-githooks` command.
- # Usage:
- # ./init-githooks.sh Prompt to enable git hooks.
- # ./init-githooks.sh --delete Delete previously added git hooks.
- # ./init-githooks.sh --help Show the help message.
- #
- # Example: `scripts/build-go.sh --help`.
- # Documentation & related context can be found at:
- # https://gist.github.com/cubxxw/126b72104ac0b0ca484c9db09c3e5694
- #
- # -----------------------------------------------------------------------------
-
- OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
- HOOKS_DIR="${OPENIM_ROOT}/.git/hooks"
-
- help_info() {
- echo "Usage: $0 [options]"
- echo
- echo "This script helps to manage git hooks."
- echo
- echo "Options:"
- echo " -h, --help Show this help message and exit."
- echo " -d, --delete Delete the hooks that have been added."
- echo " By default, it will prompt to enable git hooks."
- }
-
- delete_hooks() {
- for file in ${OPENIM_ROOT}/scripts/githooks/*.sh; do
- hook_name=$(basename "$file" .sh) # This removes the .sh extension
- rm -f "$HOOKS_DIR/$hook_name"
- done
- echo "Git hooks have been deleted."
- }
-
- enable_hooks() {
- echo "Would you like to:"
- echo "1) Enable git hooks mode"
- echo "2) Delete existing git hooks"
- echo "Please select a number (or any other key to exit):"
- read -r choice
-
- case "$choice" in
- 1)
- for file in ${OPENIM_ROOT}/scripts/githooks/*.sh; do
- hook_name=$(basename "$file" .sh) # This removes the .sh extension
- cp -f "$file" "$HOOKS_DIR/$hook_name"
- done
-
- chmod +x $HOOKS_DIR/*
-
- echo "Git hooks mode has been enabled."
- echo "With git hooks enabled, every time you perform a git action (e.g. git commit), the corresponding hooks script will be triggered automatically."
- echo "This means that if the size of the file you're committing exceeds the set limit (e.g. 42MB), the commit will be rejected."
- ;;
- 2)
- delete_hooks
- ;;
- *)
- echo "Exiting without making changes."
- ;;
- esac
- }
-
-
- case "$1" in
- -h|--help)
- help_info
- ;;
- -d|--delete)
- delete_hooks
- ;;
- *)
- enable_hooks
- ;;
- esac
|