/
Watashicuvu
/
agentic-tools
Обзор
Документация
Войти
/
Watashicuvu
/
agentic-tools
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/init-git-hooks.sh
159 строк
5 KB
Якуб
mts update
12 апр 2026, 21:19
12 апр 2026, 21:19
bff6dcd
Код
Авторство
О чём код?
#!/usr/bin/env bash # ============================================================================= # init-git-hooks.sh — Универсальная установка git hooks # ============================================================================= # Назначение: Автоматическая установка всех git hooks из .githooks/ в .git/hooks/ # # Особенности: # - Сканирует .githooks/ динамически (без хардкода названий) # - Исключает install*.sh и README* файлы # - Устанавливает в указанный проект или в текущий # # Использование: # ./scripts/init-git-hooks.sh /path/to/project # ./scripts/init-git-hooks.sh # текущая директория # ============================================================================= set -e # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Пути REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)" SCRIPTS_DIR="$REPO_ROOT/scripts" GITHOOKS_DIR="$REPO_ROOT/.githooks" # ============================================================================= # Проверка аргументов # ============================================================================= if [[ $# -gt 1 ]]; then echo "" echo -e "${BLUE}🔧 Git Hooks Installation${NC}" echo "" echo -e "${YELLOW}Usage:${NC}" echo " $0 [project-path]" echo "" echo -e "${YELLOW}Examples:${NC}" echo " $0 /absolute/path/to/project" echo " $0 # current directory" echo "" exit 1 fi # Определяем целевую директорию if [[ $# -eq 1 ]]; then PROJECT_PATH="$1" else PROJECT_PATH="$(pwd)" fi # ============================================================================= # Проверка: Git repository # ============================================================================= if [[ ! -d "$PROJECT_PATH/.git" ]]; then echo "" echo -e "${RED}❌ Error: Not a git repository${NC}" echo "" echo " Path: $PROJECT_PATH" echo "" echo " To fix:" echo " $ git init $PROJECT_PATH" echo "" exit 1 fi # ============================================================================= # Проверка: Директория .githooks # ============================================================================= if [[ ! -d "$GITHOOKS_DIR" ]]; then echo -e "${YELLOW}⚠️ .githooks directory not found${NC}" echo "" echo " Creating directory..." mkdir -p "$GITHOOKS_DIR" fi # ============================================================================= # Установка hooks # ============================================================================= GIT_HOOKS_DIR="$PROJECT_PATH/.git/hooks" echo "" echo -e "${BLUE}🔧 Installing git hooks to:${NC}" echo " $PROJECT_PATH" echo "" # Считаем установленные и пропущенные хуки INSTALLED=0 SKIPPED=0 FAILED=0 # Сканируем .githooks/ динамически for hook_source in "$GITHOOKS_DIR"/*; do # Пропускаем, если не файл [[ ! -f "$hook_source" ]] && continue # Получаем имя файла без пути hook_name="$(basename "$hook_source")" # Исключаем install*.sh и README* файлы if [[ "$hook_name" == install*.sh ]] || [[ "$hook_name" == README* ]]; then echo -e "${YELLOW}⚠️ Skipped (system file): $hook_name${NC}" ((SKIPPED++)) continue fi # Исключаем .sh файлы (это не git hooks) if [[ "$hook_name" == *.sh ]]; then echo -e "${YELLOW}⚠️ Skipped (script file): $hook_name${NC}" ((SKIPPED++)) continue fi # Копируем хук hook_target="$GIT_HOOKS_DIR/$hook_name" if cp "$hook_source" "$hook_target" && chmod +x "$hook_target"; then echo -e "${GREEN}✓${NC} Installed: $hook_name" ((INSTALLED++)) else echo -e "${RED}❌${NC} Failed: $hook_name" ((FAILED++)) fi done # ============================================================================= # Вывод результата # ============================================================================= echo "" echo -e "${GREEN}✅ Installation complete!${NC}" echo "" echo " 📊 Summary:" echo " - Installed: $INSTALLED" echo " - Skipped: $SKIPPED" echo " - Failed: $FAILED" echo "" if [[ $INSTALLED -gt 0 ]]; then echo " 📁 Installed hooks:" for hook_name in "$GIT_HOOKS_DIR"/*; do if [[ -f "$hook_name" ]]; then echo " - .git/hooks/$(basename "$hook_name")" fi done echo "" fi echo -e "${YELLOW}ℹ️ To bypass hooks (emergency only):${NC}" echo " $ git commit --no-verify" echo "" echo -e "${BLUE}📖 Documentation:${NC}" echo " - .githooks/README.md" echo " - docs/swarm/FILE_BASED_REVIEW.md" echo "" exit 0