mirror of
https://github.com/FranP-code/Reflecto.git
synced 2025-10-13 00:43:31 +00:00
71 lines
1.9 KiB
Plaintext
71 lines
1.9 KiB
Plaintext
lint-staged
|
|
|
|
#!/bin/sh
|
|
# Exit on any error
|
|
set -e
|
|
|
|
# Check if there are any staged files
|
|
if [ -z "$(git diff --cached --name-only)" ]; then
|
|
echo "No staged files to format"
|
|
exit 0
|
|
fi
|
|
|
|
# Store the hash of staged changes to detect modifications
|
|
STAGED_HASH=$(git diff --cached | sha256sum | cut -d' ' -f1)
|
|
|
|
# Save list of staged files (handling all file states)
|
|
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACMR)
|
|
PARTIALLY_STAGED=$(git diff --name-only)
|
|
|
|
# Stash unstaged changes to preserve working directory
|
|
# --keep-index keeps staged changes in working tree
|
|
git stash push --quiet --keep-index --message "pre-commit-stash" || true
|
|
STASHED=$?
|
|
|
|
# Run formatter on the staged files
|
|
pnpm dlx ultracite fix
|
|
FORMAT_EXIT_CODE=$?
|
|
|
|
# Restore working directory state
|
|
if [ $STASHED -eq 0 ]; then
|
|
# Re-stage the formatted files
|
|
if [ -n "$STAGED_FILES" ]; then
|
|
echo "$STAGED_FILES" | while IFS= read -r file; do
|
|
if [ -f "$file" ]; then
|
|
git add "$file"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Restore unstaged changes
|
|
git stash pop --quiet || true
|
|
|
|
# Restore partial staging if files were partially staged
|
|
if [ -n "$PARTIALLY_STAGED" ]; then
|
|
for file in $PARTIALLY_STAGED; do
|
|
if [ -f "$file" ] && echo "$STAGED_FILES" | grep -q "^$file$"; then
|
|
# File was partially staged - need to unstage the unstaged parts
|
|
git restore --staged "$file" 2>/dev/null || true
|
|
git add -p "$file" < /dev/null 2>/dev/null || git add "$file"
|
|
fi
|
|
done
|
|
fi
|
|
else
|
|
# No stash was created, just re-add the formatted files
|
|
if [ -n "$STAGED_FILES" ]; then
|
|
echo "$STAGED_FILES" | while IFS= read -r file; do
|
|
if [ -f "$file" ]; then
|
|
git add "$file"
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
# Check if staged files actually changed
|
|
NEW_STAGED_HASH=$(git diff --cached | sha256sum | cut -d' ' -f1)
|
|
if [ "$STAGED_HASH" != "$NEW_STAGED_HASH" ]; then
|
|
echo "✨ Files formatted by Ultracite"
|
|
fi
|
|
|
|
exit $FORMAT_EXIT_CODE
|