81 lines
2.4 KiB
Bash
Executable File
81 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# install-hooks.sh — Instala os git hooks OKF no Hub vault
|
|
# Uso: bash scripts/install-hooks.sh [--uninstall]
|
|
#
|
|
# Criado: 28-06-2026
|
|
|
|
VAULT="/media/ealmeida/Dados/Hub"
|
|
SCRIPTS_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
GIT_DIR=$(git -C "$VAULT" rev-parse --git-dir 2>/dev/null)
|
|
|
|
if [[ -z "$GIT_DIR" ]]; then
|
|
echo "ERRO: $VAULT não é um repositório git"
|
|
exit 1
|
|
fi
|
|
|
|
# Resolver path absoluto do .git
|
|
if [[ "$GIT_DIR" == ".git" ]]; then
|
|
GIT_ABSOLUTE="$VAULT/.git"
|
|
else
|
|
GIT_ABSOLUTE="$GIT_DIR"
|
|
fi
|
|
|
|
HOOKS_DIR="$GIT_ABSOLUTE/hooks"
|
|
HOOK_FILE="$HOOKS_DIR/pre-commit"
|
|
HOOK_SOURCE="$SCRIPTS_DIR/okf-validate.sh"
|
|
|
|
# ─── Desinstalar ──────────────────────────────────────────────────────────────
|
|
|
|
if [[ "${1:-}" == "--uninstall" ]]; then
|
|
if [[ -L "$HOOK_FILE" ]]; then
|
|
rm "$HOOK_FILE"
|
|
echo "[OK] Hook removido: $HOOK_FILE"
|
|
elif [[ -f "$HOOK_FILE" ]]; then
|
|
echo "[AVISO] $HOOK_FILE não é um symlink — remover manualmente se necessário"
|
|
else
|
|
echo "[INFO] Nenhum hook instalado"
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
# ─── Instalar ─────────────────────────────────────────────────────────────────
|
|
|
|
echo "=== Instalar OKF pre-commit hook ==="
|
|
echo "Vault: $VAULT"
|
|
echo "Git dir: $GIT_ABSOLUTE"
|
|
echo "Hook: $HOOK_FILE"
|
|
echo "Source: $HOOK_SOURCE"
|
|
echo ""
|
|
|
|
# Verificar que o script de validação existe
|
|
if [[ ! -f "$HOOK_SOURCE" ]]; then
|
|
echo "ERRO: Script não encontrado — $HOOK_SOURCE"
|
|
exit 1
|
|
fi
|
|
|
|
# Tornar executável
|
|
chmod +x "$HOOK_SOURCE"
|
|
|
|
# Criar diretório hooks se não existir
|
|
mkdir -p "$HOOKS_DIR"
|
|
|
|
# Backup do hook existente (se não for nosso symlink)
|
|
if [[ -f "$HOOK_FILE" ]] && [[ ! -L "$HOOK_FILE" ]]; then
|
|
BACKUP="$HOOK_FILE.backup.$(date +%Y%m%d)"
|
|
mv "$HOOK_FILE" "$BACKUP"
|
|
echo "[INFO] Hook existente guardado em: $BACKUP"
|
|
fi
|
|
|
|
# Remover symlink antigo se existir
|
|
[[ -L "$HOOK_FILE" ]] && rm "$HOOK_FILE"
|
|
|
|
# Criar symlink
|
|
ln -s "$HOOK_SOURCE" "$HOOK_FILE"
|
|
chmod +x "$HOOK_FILE"
|
|
|
|
echo "[OK] Hook instalado: $HOOK_FILE → $HOOK_SOURCE"
|
|
echo ""
|
|
echo "Testar: git -C $VAULT commit --dry-run -m 'test'"
|
|
echo "Validar tudo: bash $HOOK_SOURCE --all"
|
|
echo "Desinstalar: bash $SCRIPTS_DIR/install-hooks.sh --uninstall"
|