# Get the absolute path of the current directory # This ensures the git config works regardless of where the folder is located ROOT_DIR := $(shell pwd) .PHONY: help install uninstall status test help: @echo "Git Hook Management" @echo "-------------------" @echo "make install - Set this folder as the global git hooks source" @echo "make uninstall - Remove the global hooks setting" @echo "make status - Show current global hooks configuration" @echo "make test - Run a simulation to verify the hook works" install: @git config --global core.hooksPath $(ROOT_DIR) @chmod +x $(ROOT_DIR)/pre-commit @echo "Success: Global hooks path set to $(ROOT_DIR)" @echo "Your pre-commit protection is now active for all repositories." uninstall: @git config --global --unset core.hooksPath @echo "Success: Global hooks path removed." status: @echo -n "Current global hooks path: " @git config --global core.hooksPath || echo "None set" test: @echo "--- STARTING SIMULATION ---" @chmod +x $(ROOT_DIR)/pre-commit @echo "1. Testing 'N' (Should block commit)..." @rm -rf test-repo && mkdir test-repo @cd test-repo && git init -q @cd test-repo && git config user.email "test@example.com" && git config user.name "Tester" @cd test-repo && git checkout -b main -q @cd test-repo && touch file_n.txt && git add file_n.txt @# Use 'bash' to honor PATH; '|| true' allows the Makefile to continue when the hook blocks @cd test-repo && (echo "n" | bash ../pre-commit > /dev/null 2>&1 || true) @if [ $$(cd test-repo && git log --oneline 2>/dev/null | wc -l) -eq 0 ]; then \ echo " Result: Blocked successfully."; \ else \ echo " Result: FAILED (Commit was allowed)."; exit 1; \ fi @echo "2. Testing 'y' (Should allow commit)..." @rm -rf test-repo && mkdir test-repo @cd test-repo && git init -q @cd test-repo && git config user.email "test@example.com" && git config user.name "Tester" @cd test-repo && git checkout -b main -q @cd test-repo && touch file_y.txt && git add file_y.txt @cd test-repo && echo "y" | bash ../pre-commit > /dev/null 2>&1 @cd test-repo && git commit -m "Test Y" -q @if [ $$(cd test-repo && git log --oneline 2>/dev/null | wc -l) -eq 1 ]; then \ echo " Result: Allowed successfully."; \ else \ echo " Result: FAILED (Commit was blocked)."; exit 1; \ fi @rm -rf test-repo @echo "--- SIMULATION COMPLETE: Cleanup done ---"