Files
delivery-tracker/.githooks/prepare-commit-msg

47 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# Prepare commit message hook: auto-generate commit message based on changes
COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
# Only suggest message for regular commits (not merge, squash, etc.)
if [ -z "$COMMIT_SOURCE" ] || [ "$COMMIT_SOURCE" = "message" ]; then
# Get list of changed files
CHANGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)
if [ -z "$CHANGED_FILES" ]; then
exit 0
fi
# Determine commit type based on changed files
if echo "$CHANGED_FILES" | grep -q "backend/"; then
PREFIX="backend:"
elif echo "$CHANGED_FILES" | grep -q "frontend/"; then
PREFIX="frontend:"
elif echo "$CHANGED_FILES" | grep -q "\.github\|\.gitea\|deploy\|docker"; then
PREFIX="deploy:"
else
PREFIX="chore:"
fi
# Count files
FILE_COUNT=$(echo "$CHANGED_FILES" | wc -l | tr -d ' ')
# Generate suggested message
if [ "$FILE_COUNT" -eq 1 ]; then
FILENAME=$(basename "$CHANGED_FILES")
SUGGESTED_MSG="$PREFIX update $FILENAME"
else
SUGGESTED_MSG="$PREFIX update $FILE_COUNT files"
fi
# If message file is empty or has default template, add suggestion
if [ ! -s "$COMMIT_MSG_FILE" ] || ! grep -v '^#' "$COMMIT_MSG_FILE" | grep -q '[^[:space:]]'; then
echo "$SUGGESTED_MSG" > "$COMMIT_MSG_FILE"
echo "" >> "$COMMIT_MSG_FILE"
echo "# Suggested commit message generated based on changes" >> "$COMMIT_MSG_FILE"
echo "# Changed files:" >> "$COMMIT_MSG_FILE"
echo "$CHANGED_FILES" | sed 's/^/# /' >> "$COMMIT_MSG_FILE"
fi
fi