diff --git a/git/config b/git/config index 2c88339..7446d11 100644 --- a/git/config +++ b/git/config @@ -4,5 +4,8 @@ [core] excludesfile = /Users/jens/.gitignore_global editor = o + hooksPath = /home/jens/.config/git/hooks [init] defaultBranch = master +[credential] + helper = store diff --git a/git/hooks/pre-commit b/git/hooks/pre-commit new file mode 100755 index 0000000..99c9cf0 --- /dev/null +++ b/git/hooks/pre-commit @@ -0,0 +1,65 @@ +#!/bin/sh + +# Pre-commit hook to check for trailing whitespace and missing newline at EOF + +# Exit on first error +set -e + +# Color codes for output +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' # No Color + +errors_found=0 + +# Get list of staged files +staged_files=$(git diff --cached --name-only --diff-filter=ACM) + +if [ -z "$staged_files" ]; then + exit 0 +fi + +# Check for trailing whitespace +echo "Checking for trailing whitespace..." +for file in $staged_files; do + if [ -f "$file" ]; then + # Check if file has trailing whitespace + if grep -q '[[:space:]]$' "$file"; then + echo "${RED}✗${NC} Trailing whitespace found in: $file" + # Show lines with trailing whitespace + grep -n '[[:space:]]$' "$file" | while IFS=: read -r line_num line_content; do + echo " Line $line_num: '${line_content}'" + done + errors_found=1 + fi + fi +done + +# Check for missing newline at end of file +echo "Checking for newline at end of files..." +for file in $staged_files; do + if [ -f "$file" ]; then + # Check if file ends with a newline + if [ -n "$(tail -c 1 "$file")" ]; then + echo "${RED}✗${NC} Missing newline at end of file: $file" + errors_found=1 + fi + fi +done + +# Report results +if [ $errors_found -eq 0 ]; then + echo "${GREEN}✓${NC} All checks passed!" + exit 0 +else + echo "" + echo "${RED}Pre-commit checks failed!${NC}" + echo "Please fix the issues above and try again." + echo "" + echo "To fix trailing whitespace, you can use:" + echo " sed -i 's/[[:space:]]*$//' " + echo "" + echo "To add missing newline at EOF, you can use:" + echo " echo >> " + exit 1 +fi \ No newline at end of file diff --git a/git/hooks/prepare-commit-msg b/git/hooks/prepare-commit-msg new file mode 100755 index 0000000..cd54375 --- /dev/null +++ b/git/hooks/prepare-commit-msg @@ -0,0 +1,66 @@ +#!/bin/bash +# +# Git prepare-commit-msg hook +# Automatically generates a formatted commit message showing added, modified, and deleted files +# +# To install: Copy this file to .git/hooks/prepare-commit-msg and make it executable +# chmod +x .git/hooks/prepare-commit-msg + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +# Only run for regular commits (not merge, squash, message, etc.) +# 'message' is used during rebase when applying existing commits +case "$COMMIT_SOURCE" in + merge|squash|commit|message) + exit 0 + ;; +esac + +# Get the staged changes +ADDED_FILES=$(git diff --cached --name-only --diff-filter=A) +MODIFIED_FILES=$(git diff --cached --name-only --diff-filter=M) +DELETED_FILES=$(git diff --cached --name-only --diff-filter=D) +RENAMED_FILES=$(git diff --cached --name-only --diff-filter=R) +COPIED_FILES=$(git diff --cached --name-only --diff-filter=C) + +ADDED_COUNT=$(echo "$ADDED_FILES" | grep -c . 2>/dev/null || echo 0) +MODIFIED_COUNT=$(echo "$MODIFIED_FILES" | grep -c . 2>/dev/null || echo 0) +DELETED_COUNT=$(echo "$DELETED_FILES" | grep -c . 2>/dev/null || echo 0) +RENAMED_COUNT=$(echo "$RENAMED_FILES" | grep -c . 2>/dev/null || echo 0) +COPIED_COUNT=$(echo "$COPIED_FILES" | grep -c . 2>/dev/null || echo 0) + +# If no staged changes, exit +if [ $ADDED_COUNT -eq 0 ] && [ $MODIFIED_COUNT -eq 0 ] && [ $DELETED_COUNT -eq 0 ] && [ $RENAMED_COUNT -eq 0 ] && [ $COPIED_COUNT -eq 0 ]; then + exit 0 +fi + +# Create the commit message template +{ + echo "your commit message here" + echo "" + + # Added files + if [ $ADDED_COUNT -gt 0 ]; then + echo "$ADDED_FILES" | sed 's/^/* added: /' + echo "" + fi + + # Modified files + if [ $MODIFIED_COUNT -gt 0 ]; then + echo "$MODIFIED_FILES" | sed 's/^/* modified: /' + echo "" + fi + + # Deleted files + if [ $DELETED_COUNT -gt 0 ]; then + echo "$DELETED_FILES" | sed 's/^/* deleted: /' + echo "" + fi + + echo "# Diff stats:" + git diff --cached --stat | sed 's/^/# /' + echo "" + +} > "$COMMIT_MSG_FILE" diff --git a/git/ignore b/git/ignore index 1e58af4..c378c5c 100644 --- a/git/ignore +++ b/git/ignore @@ -1 +1,12 @@ -**/.claude/settings.local.json \ No newline at end of file +**/.claude/settings.local.json +**/.claude/settings.local.json + +**/.claude/settings.local.json + +**/.claude/settings.local.json + +**/.claude/settings.local.json + +**/.claude/settings.local.json + +**/.claude/settings.local.json