65 lines
1.5 KiB
Bash
Executable file
65 lines
1.5 KiB
Bash
Executable file
#!/bin/bash -e
|
|
#
|
|
# This hook adds a comment for guidance about the commit message
|
|
# format on top of the default commit message.
|
|
#
|
|
# Called by "git commit" with the name of the file that has the
|
|
# commit message, followed by the description of the commit
|
|
# message's source. The hook's purpose is to edit the commit
|
|
# message file. If the hook fails with a non-zero status,
|
|
# the commit is aborted.
|
|
|
|
COMMIT_MSG_FILE=$1
|
|
COMMIT_SOURCE=$2
|
|
SHA1=$3
|
|
|
|
# Function to test if a string starts with another string
|
|
beginswith() {
|
|
case $2 in
|
|
("$1"*) return 0 ;;
|
|
(*) return 1 ;;
|
|
esac
|
|
}
|
|
|
|
original=$(cat "$COMMIT_MSG_FILE")
|
|
|
|
if beginswith $'\n#' "$original"; then
|
|
|
|
# Find common path prefix of changed files
|
|
path=""
|
|
count=0
|
|
common=""
|
|
|
|
while read -r file; do
|
|
if [ -z "$common" ]; then
|
|
common="$file"
|
|
count=${#file}
|
|
else
|
|
while [ $count -gt 0 ]; do
|
|
prefix=${file:0:$count}
|
|
common_prefix=${common:0:$count}
|
|
[ "$prefix" = "$common_prefix" ] && break
|
|
count=$((count - 1))
|
|
done
|
|
fi
|
|
done <<EOF
|
|
$(git -P diff --cached --name-only -r)
|
|
EOF
|
|
|
|
[ $count -gt 0 ] && path="${common:0:$count}" || path=""
|
|
|
|
# Clean up path info (e.g., remove .local/bin/scripts)
|
|
path=$(echo "$path" | sed 's|.local/bin/scripts|bin|')
|
|
|
|
# Remove numeric prefixes like "2-box/" → "box/"
|
|
case "$path" in
|
|
[0-9]-*) path="${path#*-}" ;;
|
|
esac
|
|
|
|
{
|
|
# Simplify path and add to commit message
|
|
echo "$path" | sed 's|^\.||;s|\.\([a-z]*\)$||;s|[/_-]\?$|: |'
|
|
echo "$original"
|
|
} > "$COMMIT_MSG_FILE"
|
|
|
|
fi
|