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