Initial upload: Local AI Commit Reviewer CLI with CI/CD workflow
This commit is contained in:
69
src/hooks/hooks.py
Normal file
69
src/hooks/hooks.py
Normal file
@@ -0,0 +1,69 @@
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def get_hook_script() -> str:
|
||||
return """#!/bin/bash
|
||||
# Local AI Commit Reviewer - Pre-commit Hook
|
||||
# Automatically reviews staged changes before committing
|
||||
|
||||
set -e
|
||||
|
||||
# Allow bypass with --no-verify
|
||||
if [ "$1" = "--no-verify" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Get the directory where this script is located
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
# Change to repository root
|
||||
cd "$SCRIPT_DIR/../.."
|
||||
|
||||
# Run the AI commit reviewer
|
||||
python -m aicr review --hook --strictness balanced || exit 1
|
||||
"""
|
||||
|
||||
|
||||
def install_pre_commit_hook(
|
||||
repo_path: Path,
|
||||
content: str | None = None,
|
||||
force: bool = False
|
||||
) -> bool:
|
||||
hooks_dir = repo_path / ".git" / "hooks"
|
||||
hooks_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
hook_path = hooks_dir / "pre-commit"
|
||||
|
||||
if hook_path.exists() and not force:
|
||||
return False
|
||||
|
||||
if content is None:
|
||||
content = get_hook_script()
|
||||
|
||||
try:
|
||||
hook_path.write_text(content)
|
||||
hook_path.chmod(0o755)
|
||||
return True
|
||||
except OSError:
|
||||
return False
|
||||
|
||||
|
||||
def check_hook_installed(repo_path: Path) -> bool:
|
||||
hook_path = repo_path / ".git" / "hooks" / "pre-commit"
|
||||
if not hook_path.exists():
|
||||
return False
|
||||
|
||||
content = hook_path.read_text()
|
||||
return "aicr" in content or "local-ai-commit-reviewer" in content
|
||||
|
||||
|
||||
def uninstall_hook(repo_path: Path) -> bool:
|
||||
hook_path = repo_path / ".git" / "hooks" / "pre-commit"
|
||||
if not hook_path.exists():
|
||||
return True
|
||||
|
||||
try:
|
||||
hook_path.unlink()
|
||||
return True
|
||||
except OSError:
|
||||
return False
|
||||
Reference in New Issue
Block a user