#!/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