refactor: improve pre-commit hook to format only staged files
Changes: - Format only staged PHP files (not all dirty files) - Auto-stage only the files that were already staged - Prevents accidentally staging unstaged changes - Safer for partial staging workflows - Maintains full automation for normal commits This aligns with industry best practices from lint-staged and prevents security risks from staging unintended files. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -23,10 +23,11 @@ chmod +x .githooks/*
|
|||||||
|
|
||||||
### `pre-commit` - Laravel Pint Auto-formatter ✅ ENFORCED
|
### `pre-commit` - Laravel Pint Auto-formatter ✅ ENFORCED
|
||||||
**What it does:**
|
**What it does:**
|
||||||
- Runs Laravel Pint on staged files only (`--dirty`)
|
- Runs Laravel Pint on staged PHP files only (not unstaged files)
|
||||||
- Auto-formats code to match team standards
|
- Auto-formats code to match team standards
|
||||||
- Automatically stages formatted files
|
- Automatically re-stages the formatted files
|
||||||
- Fast feedback (runs in seconds)
|
- Fast feedback (runs in seconds)
|
||||||
|
- Safe: Won't format or stage files you haven't explicitly added
|
||||||
|
|
||||||
**When it runs:**
|
**When it runs:**
|
||||||
- Every time you run `git commit`
|
- Every time you run `git commit`
|
||||||
|
|||||||
@@ -1,22 +1,37 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Laravel Pint Pre-commit Hook
|
# Laravel Pint Pre-commit Hook
|
||||||
# Automatically format code before committing
|
# Automatically format staged PHP files before committing
|
||||||
|
|
||||||
echo "🎨 Running Laravel Pint..."
|
echo "🎨 Running Laravel Pint..."
|
||||||
|
|
||||||
# Run Pint on staged files only
|
# Get only staged PHP files
|
||||||
./vendor/bin/pint --dirty
|
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '\.php$')
|
||||||
|
|
||||||
# Check if Pint made changes
|
# Exit early if no PHP files are staged
|
||||||
if ! git diff --quiet; then
|
if [ -z "$STAGED_FILES" ]; then
|
||||||
echo "✅ Code formatted! Files have been updated."
|
echo "✅ No PHP files staged"
|
||||||
echo " Changes have been staged automatically."
|
|
||||||
|
|
||||||
# Stage the formatted files
|
|
||||||
git add -u
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
echo "✅ Code style looks good!"
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Run Pint only on staged files
|
||||||
|
echo "$STAGED_FILES" | xargs ./vendor/bin/pint
|
||||||
|
|
||||||
|
# Check if Pint made changes to any of the staged files
|
||||||
|
CHANGED=false
|
||||||
|
for file in $STAGED_FILES; do
|
||||||
|
if ! git diff --quiet "$file" 2>/dev/null; then
|
||||||
|
CHANGED=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Re-stage the formatted files (only the ones that were already staged)
|
||||||
|
if [ "$CHANGED" = true ]; then
|
||||||
|
echo "✅ Code formatted! Files have been updated."
|
||||||
|
echo " Changes have been staged automatically."
|
||||||
|
echo "$STAGED_FILES" | xargs git add
|
||||||
|
else
|
||||||
|
echo "✅ Code style looks good!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
// Testing pre-commit hook - staged files only
|
||||||
use App\Http\Controllers\ProfileController;
|
use App\Http\Controllers\ProfileController;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|||||||
Reference in New Issue
Block a user