diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4d5d7f0..b591bd7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,13 +19,13 @@ repos: hooks: - id: test-coverage name: Run test coverage - entry: make test-coverage + entry: bash scripts/test-coverage-precommit.sh language: system pass_filenames: false - id: fmt name: Format code - entry: bash -c "make fmt && git add -u" + entry: bash scripts/fmt-precommit.sh language: system pass_filenames: false diff --git a/scripts/fmt-precommit.sh b/scripts/fmt-precommit.sh new file mode 100755 index 0000000..b21fb43 --- /dev/null +++ b/scripts/fmt-precommit.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# ALR - Any Linux Repository +# Copyright (C) 2025 The ALR Authors +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +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 + +# Проверяем, были ли изменения +CHANGED=false +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 +if [ "$CHANGED" = true ]; then + git add -u + echo "Files were formatted and staged" +fi + +# Всегда возвращаем успех +exit 0 \ No newline at end of file diff --git a/scripts/test-coverage-precommit.sh b/scripts/test-coverage-precommit.sh new file mode 100755 index 0000000..3ce215c --- /dev/null +++ b/scripts/test-coverage-precommit.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# ALR - Any Linux Repository +# Copyright (C) 2025 The ALR Authors +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +set -e + +# Запускаем тесты с покрытием +make test-coverage + +# Если coverage.out был изменен, добавляем его +if git diff --quiet coverage.out 2>/dev/null; then + echo "Coverage unchanged" +else + git add coverage.out 2>/dev/null || true + echo "Coverage updated and staged" +fi + +# Всегда возвращаем успех если тесты прошли +exit 0 \ No newline at end of file