исправление pre-commit hooks для корректной работы с изменёнными файлами
This commit is contained in:
		| @@ -17,38 +17,21 @@ | |||||||
|  |  | ||||||
| set -e | set -e | ||||||
|  |  | ||||||
| # Сохраняем хеши файлов до форматирования |  | ||||||
| TEMP_DIR=$(mktemp -d) |  | ||||||
| find . -name "*.go" -type f | while read file; do |  | ||||||
|     if [ -f "$file" ]; then |  | ||||||
|         md5sum "$file" > "$TEMP_DIR/$(basename $file).md5" 2>/dev/null || true |  | ||||||
|     fi |  | ||||||
| done |  | ||||||
|  |  | ||||||
| # Запускаем форматирование | # Запускаем форматирование | ||||||
| make fmt || true | make fmt || true | ||||||
|  |  | ||||||
| # Проверяем, были ли изменения | # Проверяем какие файлы были изменены (только те, что отслеживаются git) | ||||||
| CHANGED=false | CHANGED_FILES=$(git diff --name-only --diff-filter=M | grep '\.go$' || true) | ||||||
| find . -name "*.go" -type f | while read file; do |  | ||||||
|     if [ -f "$file" ] && [ -f "$TEMP_DIR/$(basename $file).md5" ]; then |  | ||||||
|         OLD_MD5=$(cat "$TEMP_DIR/$(basename $file).md5" | awk '{print $1}') |  | ||||||
|         NEW_MD5=$(md5sum "$file" | awk '{print $1}') |  | ||||||
|         if [ "$OLD_MD5" != "$NEW_MD5" ]; then |  | ||||||
|             CHANGED=true |  | ||||||
|             break |  | ||||||
|         fi |  | ||||||
|     fi |  | ||||||
| done |  | ||||||
|  |  | ||||||
| # Удаляем временную директорию |  | ||||||
| rm -rf "$TEMP_DIR" |  | ||||||
|  |  | ||||||
| # Если файлы были изменены, добавляем их в git | # Если файлы были изменены, добавляем их в git | ||||||
| if [ "$CHANGED" = true ]; then | if [ ! -z "$CHANGED_FILES" ]; then | ||||||
|     git add -u |     echo "Formatting changed the following files:" | ||||||
|  |     echo "$CHANGED_FILES" | ||||||
|  |     # Добавляем только измененные файлы, которые уже отслеживаются | ||||||
|  |     echo "$CHANGED_FILES" | xargs -r git add | ||||||
|     echo "Files were formatted and staged" |     echo "Files were formatted and staged" | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | echo "Formatting completed" | ||||||
| # Всегда возвращаем успех | # Всегда возвращаем успех | ||||||
| exit 0 | exit 0 | ||||||
| @@ -20,13 +20,19 @@ set -e | |||||||
| # Запускаем тесты с покрытием | # Запускаем тесты с покрытием | ||||||
| make test-coverage | make test-coverage | ||||||
|  |  | ||||||
| # Если coverage.out был изменен, добавляем его | # coverage.out в .gitignore, не добавляем его | ||||||
| if git diff --quiet coverage.out 2>/dev/null; then | # Но если скрипт coverage-badge.sh изменил какие-то файлы (например, README с бейджем), | ||||||
|     echo "Coverage unchanged" | # они будут добавлены | ||||||
| else | CHANGED_FILES=$(git diff --name-only --diff-filter=M | grep -v '\.out$' | grep -v '^coverage' || true) | ||||||
|     git add coverage.out 2>/dev/null || true |  | ||||||
|     echo "Coverage updated and staged" | if [ ! -z "$CHANGED_FILES" ]; then | ||||||
|  |     echo "Test coverage updated the following files:" | ||||||
|  |     echo "$CHANGED_FILES" | ||||||
|  |     # Добавляем только измененные файлы, которые уже отслеживаются | ||||||
|  |     echo "$CHANGED_FILES" | xargs -r git add | ||||||
|  |     echo "Files were updated and staged" | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | echo "Tests completed successfully" | ||||||
| # Всегда возвращаем успех если тесты прошли | # Всегда возвращаем успех если тесты прошли | ||||||
| exit 0 | exit 0 | ||||||
		Reference in New Issue
	
	Block a user