From d75c7c5a9413298ba466c7a5c1ef0e9a09aec4d7 Mon Sep 17 00:00:00 2001 From: Peter Wood Date: Wed, 28 May 2025 16:29:38 -0400 Subject: [PATCH] refactor: Enhance cleanup script for my-aliases.zsh tracking with improved color output and confirmation prompts --- cleanup-alias-tracking.sh | 89 +++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 41 deletions(-) diff --git a/cleanup-alias-tracking.sh b/cleanup-alias-tracking.sh index f18b71d..79cffb6 100755 --- a/cleanup-alias-tracking.sh +++ b/cleanup-alias-tracking.sh @@ -1,4 +1,5 @@ #!/bin/bash +# filepath: cleanup-alias-tracking.sh # Cleanup script for removing my-aliases.zsh from git tracking # This script handles the repository cleanup needed after the alias file @@ -6,25 +7,31 @@ set -e -# Colors for output -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -RED='\033[0;31m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color +# Colors for output - use printf instead of echo -e for better compatibility +print_color() { + local color="$1" + local message="$2" + case "$color" in + "green") printf '\033[0;32m%s\033[0m\n' "$message" ;; + "yellow") printf '\033[1;33m%s\033[0m\n' "$message" ;; + "red") printf '\033[0;31m%s\033[0m\n' "$message" ;; + "blue") printf '\033[0;34m%s\033[0m\n' "$message" ;; + *) printf '%s\n' "$message" ;; + esac +} # Script directory and repository root SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$SCRIPT_DIR" -echo -e "${BLUE}=== Alias File Tracking Cleanup Script ===${NC}" -echo -e "${YELLOW}This script will remove my-aliases.zsh from git tracking${NC}" -echo -e "${YELLOW}and update .gitignore to prevent future conflicts.${NC}" +print_color "blue" "=== Alias File Tracking Cleanup Script ===" +print_color "yellow" "This script will remove my-aliases.zsh from git tracking" +print_color "yellow" "and update .gitignore to prevent future conflicts." echo "" # Verify we're in a git repository if [ ! -d "$REPO_ROOT/.git" ]; then - echo -e "${RED}Error: Not in a git repository${NC}" + print_color "red" "Error: Not in a git repository" echo "Please run this script from the root of your shell repository" exit 1 fi @@ -33,30 +40,30 @@ fi cd "$REPO_ROOT" # Check current git status -echo -e "${BLUE}=== Current Git Status ===${NC}" +print_color "blue" "=== Current Git Status ===" git status --porcelain # Check if my-aliases.zsh is currently tracked if git ls-files --error-unmatch dotfiles/my-aliases.zsh >/dev/null 2>&1; then - echo -e "${YELLOW}my-aliases.zsh is currently tracked by git${NC}" + print_color "yellow" "my-aliases.zsh is currently tracked by git" ALIASES_TRACKED=true else - echo -e "${GREEN}my-aliases.zsh is already untracked${NC}" + print_color "green" "my-aliases.zsh is already untracked" ALIASES_TRACKED=false fi # Check if .gitignore already has the entry if grep -q "dotfiles/my-aliases.zsh" .gitignore 2>/dev/null; then - echo -e "${GREEN}.gitignore already contains entry for my-aliases.zsh${NC}" + print_color "green" ".gitignore already contains entry for my-aliases.zsh" GITIGNORE_UPDATED=true else - echo -e "${YELLOW}.gitignore needs to be updated${NC}" + print_color "yellow" ".gitignore needs to be updated" GITIGNORE_UPDATED=false fi # Prompt for confirmation echo "" -echo -e "${YELLOW}Actions that will be performed:${NC}" +print_color "yellow" "Actions that will be performed:" if [ "$ALIASES_TRACKED" = true ]; then echo " 1. Remove dotfiles/my-aliases.zsh from git tracking" fi @@ -73,50 +80,50 @@ echo "" read -p "Continue? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then - echo -e "${YELLOW}Cleanup cancelled${NC}" + print_color "yellow" "Cleanup cancelled" exit 0 fi # Step 1: Remove from git tracking if needed if [ "$ALIASES_TRACKED" = true ]; then - echo -e "${BLUE}=== Removing my-aliases.zsh from git tracking ===${NC}" + print_color "blue" "=== Removing my-aliases.zsh from git tracking ===" # Check if file exists and remove from tracking if [ -f "dotfiles/my-aliases.zsh" ]; then git rm --cached dotfiles/my-aliases.zsh - echo -e "${GREEN}✓ Removed dotfiles/my-aliases.zsh from git tracking${NC}" + print_color "green" "✓ Removed dotfiles/my-aliases.zsh from git tracking" else # File doesn't exist but is tracked - remove from index anyway git rm --cached dotfiles/my-aliases.zsh 2>/dev/null || true - echo -e "${GREEN}✓ Removed non-existent dotfiles/my-aliases.zsh from git index${NC}" + print_color "green" "✓ Removed non-existent dotfiles/my-aliases.zsh from git index" fi fi # Step 2: Update .gitignore if needed if [ "$GITIGNORE_UPDATED" = false ]; then - echo -e "${BLUE}=== Updating .gitignore ===${NC}" + print_color "blue" "=== Updating .gitignore ===" # Check if the "Generated dotfiles" section already exists if grep -q "Generated dotfiles" .gitignore 2>/dev/null; then # Add to existing section if ! grep -q "dotfiles/my-aliases.zsh" .gitignore; then sed -i '/# Generated dotfiles/a dotfiles/my-aliases.zsh' .gitignore - echo -e "${GREEN}✓ Added entry to existing Generated dotfiles section${NC}" + print_color "green" "✓ Added entry to existing Generated dotfiles section" fi else # Create new section echo "" >> .gitignore echo "# Generated dotfiles - these are created dynamically by bootstrap process" >> .gitignore echo "dotfiles/my-aliases.zsh" >> .gitignore - echo -e "${GREEN}✓ Added new Generated dotfiles section to .gitignore${NC}" + print_color "green" "✓ Added new Generated dotfiles section to .gitignore" fi fi # Step 3: Check if we have changes to commit if git diff --cached --quiet && git diff --quiet; then - echo -e "${GREEN}=== No changes to commit - cleanup already complete ===${NC}" + print_color "green" "=== No changes to commit - cleanup already complete ===" else - echo -e "${BLUE}=== Committing changes ===${NC}" + print_color "blue" "=== Committing changes ===" # Add .gitignore changes if any git add .gitignore @@ -130,47 +137,47 @@ else # Commit the changes git commit -m "$COMMIT_MSG" - echo -e "${GREEN}✓ Changes committed successfully${NC}" + print_color "green" "✓ Changes committed successfully" fi # Step 4: Verify the cleanup -echo -e "${BLUE}=== Verification ===${NC}" +print_color "blue" "=== Verification ===" # Check that file is no longer tracked if ! git ls-files --error-unmatch dotfiles/my-aliases.zsh >/dev/null 2>&1; then - echo -e "${GREEN}✓ dotfiles/my-aliases.zsh is no longer tracked${NC}" + print_color "green" "✓ dotfiles/my-aliases.zsh is no longer tracked" else - echo -e "${RED}✗ dotfiles/my-aliases.zsh is still tracked${NC}" + print_color "red" "✗ dotfiles/my-aliases.zsh is still tracked" fi # Check that .gitignore contains the entry if grep -q "dotfiles/my-aliases.zsh" .gitignore; then - echo -e "${GREEN}✓ .gitignore contains entry for dotfiles/my-aliases.zsh${NC}" + print_color "green" "✓ .gitignore contains entry for dotfiles/my-aliases.zsh" else - echo -e "${RED}✗ .gitignore missing entry for dotfiles/my-aliases.zsh${NC}" + print_color "red" "✗ .gitignore missing entry for dotfiles/my-aliases.zsh" fi # Show final git status -echo -e "${BLUE}=== Final Git Status ===${NC}" +print_color "blue" "=== Final Git Status ===" git status --porcelain # Check if we need to push if git log --oneline origin/main..HEAD 2>/dev/null | grep -q "Remove my-aliases.zsh"; then echo "" - echo -e "${YELLOW}=== Push Required ===${NC}" - echo -e "${YELLOW}You have local commits that need to be pushed to the remote repository.${NC}" - echo "Run: ${BLUE}git push origin main${NC}" + print_color "yellow" "=== Push Required ===" + print_color "yellow" "You have local commits that need to be pushed to the remote repository." + printf "Run: \033[0;34mgit push origin main\033[0m\n" elif ! git remote >/dev/null 2>&1; then - echo -e "${YELLOW}No remote repository configured${NC}" + print_color "yellow" "No remote repository configured" else - echo -e "${GREEN}Repository is up to date with remote${NC}" + print_color "green" "Repository is up to date with remote" fi echo "" -echo -e "${GREEN}=== Cleanup Complete! ===${NC}" -echo -e "${GREEN}The my-aliases.zsh file is now properly configured as a generated file.${NC}" +print_color "green" "=== Cleanup Complete! ===" +print_color "green" "The my-aliases.zsh file is now properly configured as a generated file." echo "" -echo -e "${YELLOW}Next steps:${NC}" -echo "1. Push changes if needed: ${BLUE}git push origin main${NC}" +print_color "yellow" "Next steps:" +printf "1. Push changes if needed: \033[0;34mgit push origin main\033[0m\n" echo "2. Run bootstrap/setup on this system to regenerate aliases" echo "3. The aliases file will now be created dynamically without git conflicts"