You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							171 lines
						
					
					
						
							5.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							171 lines
						
					
					
						
							5.8 KiB
						
					
					
				
								#!/bin/bash
							 | 
						|
								
							 | 
						|
								# TimeSafari Debug Hook Installer
							 | 
						|
								# Run this script in any repository to install the debug pre-commit hook
							 | 
						|
								
							 | 
						|
								set -e
							 | 
						|
								
							 | 
						|
								# Colors for output
							 | 
						|
								RED='\033[0;31m'
							 | 
						|
								GREEN='\033[0;32m'
							 | 
						|
								YELLOW='\033[1;33m'
							 | 
						|
								BLUE='\033[0;34m'
							 | 
						|
								NC='\033[0m' # No Color
							 | 
						|
								
							 | 
						|
								echo -e "${BLUE}🔧 TimeSafari Debug Hook Installer${NC}"
							 | 
						|
								echo "============================================="
							 | 
						|
								
							 | 
						|
								# Check if we're in a git repository
							 | 
						|
								if ! git rev-parse --git-dir > /dev/null 2>&1; then
							 | 
						|
								    echo -e "${RED}❌ Error: Not in a git repository${NC}"
							 | 
						|
								    echo "Please run this script from within a git repository"
							 | 
						|
								    exit 1
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Get repository root
							 | 
						|
								REPO_ROOT=$(git rev-parse --show-toplevel)
							 | 
						|
								HOOKS_DIR="$REPO_ROOT/.git/hooks"
							 | 
						|
								SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
							 | 
						|
								
							 | 
						|
								echo -e "${BLUE}Repository:${NC} $REPO_ROOT"
							 | 
						|
								echo -e "${BLUE}Hooks directory:${NC} $HOOKS_DIR"
							 | 
						|
								echo -e "${BLUE}Script directory:${NC} $SCRIPT_DIR"
							 | 
						|
								
							 | 
						|
								# Check if hooks directory exists
							 | 
						|
								if [[ ! -d "$HOOKS_DIR" ]]; then
							 | 
						|
								    echo -e "${RED}❌ Error: Hooks directory not found${NC}"
							 | 
						|
								    echo "This repository may not be properly initialized"
							 | 
						|
								    exit 1
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Check if we have the hook files in the repository
							 | 
						|
								HOOK_SCRIPT="$SCRIPT_DIR/git-hooks/pre-commit"
							 | 
						|
								CONFIG_FILE="$SCRIPT_DIR/git-hooks/debug-checker.config"
							 | 
						|
								
							 | 
						|
								if [[ ! -f "$HOOK_SCRIPT" ]]; then
							 | 
						|
								    echo -e "${RED}❌ Error: Pre-commit hook script not found${NC}"
							 | 
						|
								    echo "Expected location: $HOOK_SCRIPT"
							 | 
						|
								    echo "Make sure you're running this from the TimeSafari repository"
							 | 
						|
								    exit 1
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								if [[ ! -f "$CONFIG_FILE" ]]; then
							 | 
						|
								    echo -e "${RED}❌ Error: Debug checker config not found${NC}"
							 | 
						|
								    echo "Expected location: $CONFIG_FILE"
							 | 
						|
								    echo "Make sure you're running this from the TimeSafari repository"
							 | 
						|
								    exit 1
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Check if already installed
							 | 
						|
								if [[ -f "$HOOKS_DIR/pre-commit" && -f "$HOOKS_DIR/debug-checker.config" ]]; then
							 | 
						|
								    echo -e "${YELLOW}⚠️  Debug hook already appears to be installed${NC}"
							 | 
						|
								    echo -e "   Checking if update is needed..."
							 | 
						|
								    
							 | 
						|
								    # Check if files are different
							 | 
						|
								    if diff "$HOOK_SCRIPT" "$HOOKS_DIR/pre-commit" > /dev/null 2>&1; then
							 | 
						|
								        echo -e "  ${GREEN}✅${NC} Hook script is up to date"
							 | 
						|
								        HOOK_UP_TO_DATE=true
							 | 
						|
								    else
							 | 
						|
								        echo -e "  ${YELLOW}⚠️  Hook script differs - will update${NC}"
							 | 
						|
								        HOOK_UP_TO_DATE=false
							 | 
						|
								    fi
							 | 
						|
								    
							 | 
						|
								    if diff "$CONFIG_FILE" "$HOOKS_DIR/debug-checker.config" > /dev/null 2>&1; then
							 | 
						|
								        echo -e "  ${GREEN}✅${NC} Config file is up to date"
							 | 
						|
								        CONFIG_UP_TO_DATE=true
							 | 
						|
								    else
							 | 
						|
								        echo -e "  ${YELLOW}⚠️  Config file differs - will update${NC}"
							 | 
						|
								        CONFIG_UP_TO_DATE=false
							 | 
						|
								    fi
							 | 
						|
								    
							 | 
						|
								    if [[ "$HOOK_UP_TO_DATE" == true && "$CONFIG_UP_TO_DATE" == true ]]; then
							 | 
						|
								        echo -e "\n${GREEN}✅ Debug hook is already up to date!${NC}"
							 | 
						|
								        echo -e "   No installation needed"
							 | 
						|
								    else
							 | 
						|
								        echo -e "\n${BLUE}Updating existing installation...${NC}"
							 | 
						|
								    fi
							 | 
						|
								else
							 | 
						|
								    echo -e "\n${BLUE}Installing debug hook...${NC}"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Copy/update the hook script if needed
							 | 
						|
								if [[ "$HOOK_UP_TO_DATE" != true ]]; then
							 | 
						|
								    cp "$HOOK_SCRIPT" "$HOOKS_DIR/pre-commit"
							 | 
						|
								    chmod +x "$HOOKS_DIR/pre-commit"
							 | 
						|
								    echo -e "  ${GREEN}✅${NC} Pre-commit hook installed/updated"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Copy/update the config file if needed
							 | 
						|
								if [[ "$CONFIG_UP_TO_DATE" != true ]]; then
							 | 
						|
								    cp "$CONFIG_FILE" "$HOOKS_DIR/debug-checker.config"
							 | 
						|
								    echo -e "  ${GREEN}✅${NC} Configuration file installed/updated"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Copy/update the README if needed
							 | 
						|
								README_FILE="$SCRIPT_DIR/git-hooks/README.md"
							 | 
						|
								if [[ -f "$README_FILE" ]]; then
							 | 
						|
								    if [[ ! -f "$HOOKS_DIR/README.md" ]] || ! diff "$README_FILE" "$HOOKS_DIR/README.md" > /dev/null 2>&1; then
							 | 
						|
								        cp "$README_FILE" "$HOOKS_DIR/README.md"
							 | 
						|
								        echo -e "  ${GREEN}✅${NC} Documentation installed/updated"
							 | 
						|
								    else
							 | 
						|
								        echo -e "  ${GREEN}✅${NC} Documentation is up to date"
							 | 
						|
								    fi
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								echo -e "\n${GREEN}🎉 Debug hook installation complete!${NC}"
							 | 
						|
								
							 | 
						|
								# Test the installation
							 | 
						|
								echo -e "\n${BLUE}Testing installation...${NC}"
							 | 
						|
								if [[ -x "$HOOKS_DIR/pre-commit" ]]; then
							 | 
						|
								    echo -e "  ${GREEN}✅${NC} Hook is executable"
							 | 
						|
								else
							 | 
						|
								    echo -e "  ${RED}❌${NC} Hook is not executable"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								if [[ -f "$HOOKS_DIR/debug-checker.config" ]]; then
							 | 
						|
								    echo -e "  ${GREEN}✅${NC} Config file exists"
							 | 
						|
								else
							 | 
						|
								    echo -e "  ${RED}❌${NC} Config file missing"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Show current branch status
							 | 
						|
								CURRENT_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null || echo "detached")
							 | 
						|
								echo -e "\n${BLUE}Current branch:${NC} $CURRENT_BRANCH"
							 | 
						|
								
							 | 
						|
								# Check if this is a protected branch
							 | 
						|
								PROTECTED_BRANCHES=("master" "main" "production" "release" "stable")
							 | 
						|
								IS_PROTECTED=false
							 | 
						|
								
							 | 
						|
								for branch in "${PROTECTED_BRANCHES[@]}"; do
							 | 
						|
								    if [[ "$CURRENT_BRANCH" == "$branch" ]]; then
							 | 
						|
								        IS_PROTECTED=true
							 | 
						|
								        break
							 | 
						|
								    fi
							 | 
						|
								done
							 | 
						|
								
							 | 
						|
								if [[ "$IS_PROTECTED" == true ]]; then
							 | 
						|
								    echo -e "${YELLOW}⚠️  You're on a protected branch ($CURRENT_BRANCH)${NC}"
							 | 
						|
								    echo -e "   The debug hook will now run on all commits to this branch"
							 | 
						|
								    echo -e "   Consider switching to a feature branch for development"
							 | 
						|
								else
							 | 
						|
								    echo -e "${GREEN}✅ You're on a feature branch ($CURRENT_BRANCH)${NC}"
							 | 
						|
								    echo -e "   The debug hook will be skipped on this branch"
							 | 
						|
								    echo -e "   You can develop with debug code freely"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								echo -e "\n${BLUE}Next steps:${NC}"
							 | 
						|
								echo "1. The hook will now run automatically on protected branches"
							 | 
						|
								echo "2. Test it by trying to commit a file with debug code"
							 | 
						|
								echo "3. Use feature branches for development with debug code"
							 | 
						|
								echo "4. Check the README.md in .git/hooks/ for more information"
							 | 
						|
								
							 | 
						|
								echo -e "\n${BLUE}To test the hook:${NC}"
							 | 
						|
								echo "1. Create a test file with debug code (e.g., console.log('test'))"
							 | 
						|
								echo "2. Stage it: git add <filename>"
							 | 
						|
								echo "3. Try to commit: git commit -m 'test'"
							 | 
						|
								echo "4. The hook should prevent the commit if debug code is found"
							 | 
						|
								
							 | 
						|
								echo -e "\n${BLUE}To uninstall:${NC}"
							 | 
						|
								echo "rm $HOOKS_DIR/pre-commit"
							 | 
						|
								echo "rm $HOOKS_DIR/debug-checker.config"
							 | 
						|
								echo "rm $HOOKS_DIR/README.md"
							 | 
						|
								
							 |