47 lines
1.6 KiB
Bash
Executable File
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
|