From 3cb8217c34dd381ac7a978d1e88e6ced29341c53 Mon Sep 17 00:00:00 2001 From: MirzaSamadAhmedBaig <89132160+Mirza-Samad-Ahmed-Baig@users.noreply.github.com> Date: Thu, 26 Jun 2025 18:30:47 +0500 Subject: [PATCH] Fix: Install script improvements (#41) Co-authored-by: MirzaSamad20~ --- install.sh | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/install.sh b/install.sh index c83c0b0..d89cc7c 100755 --- a/install.sh +++ b/install.sh @@ -201,15 +201,9 @@ compare_versions() { fi # Split versions into arrays - local v1_parts v2_parts - IFS='.' read -ra v1_parts <<< "$version1" || { - log_error "compare_versions: Failed to parse version1: $version1" - return 1 - } - IFS='.' read -ra v2_parts <<< "$version2" || { - log_error "compare_versions: Failed to parse version2: $version2" - return 1 - } + local v1_parts=() v2_parts=() + IFS='.' read -ra v1_parts <<< "$version1" + IFS='.' read -ra v2_parts <<< "$version2" # Compare each part for i in {0..2}; do @@ -646,6 +640,7 @@ get_source_files() { -not -name "*.log" \ -not -name "*.logs" \ -not -name "settings.local.json" \ + -not -name "CLAUDE.md" \ 2>/dev/null | sed 's|^\.claude/||' | sort); then log_error "get_source_files: Failed to enumerate files in .claude directory" return 1 @@ -1090,12 +1085,10 @@ if [[ "$UNINSTALL_MODE" = true ]]; then fi # Only remove files that we know we installed - if [[ -f ".claude/$installed_file" ]] || \ - [[ "$installed_file" == "CLAUDE.md" && -f "CLAUDE.md" ]] || \ - [[ "$installed_file" == "VERSION" ]] || \ - [[ "$installed_file" == ".checksums" ]] || \ - [[ "$installed_file" =~ ^commands/ ]] || \ - [[ "$installed_file" =~ ^shared/ ]]; then + if [[ -f "$current_dir/.claude/$installed_file" ]] || + [[ "$installed_file" == "CLAUDE.md" && -f "$current_dir/CLAUDE.md" ]] || + [[ "$installed_file" == "VERSION" && -f "$current_dir/VERSION" ]] || + [[ "$installed_file" == ".checksums" && -f "$current_dir/.checksums" ]]; then if [[ "$DRY_RUN" = true ]]; then echo " Would remove: $installed_file" else @@ -1105,7 +1098,7 @@ if [[ "$UNINSTALL_MODE" = true ]]; then ((removed_count++)) fi fi - done < <(find . -type f) + done < <(get_installed_files "$INSTALL_DIR") # Remove empty directories, but not the main directory if it contains preserved files if [[ "$DRY_RUN" != true ]]; then @@ -1538,7 +1531,6 @@ copy_with_update_check() { # Retry copy operation with error capture while [[ $retry_count -lt $max_retries ]]; do if cp_error=$(cp "$src_file" "$dest_file.new" 2>&1); then - sync 2>/dev/null || true # Ensure file is written target_file="$dest_file.new" copy_performed=true break @@ -1559,7 +1551,6 @@ copy_with_update_check() { # Retry copy operation with error capture while [[ $retry_count -lt $max_retries ]]; do if cp_error=$(cp "$src_file" "$dest_file" 2>&1); then - sync 2>/dev/null || true # Ensure file is written copy_performed=true break else @@ -1579,7 +1570,6 @@ copy_with_update_check() { if [[ "$DRY_RUN" != true ]]; then # File is identical, still copy to ensure permissions are correct if cp_error=$(cp "$src_file" "$dest_file" 2>&1); then - sync 2>/dev/null || true # Ensure file is written copy_performed=true else log_warning "Failed to update identical file $basename_file: $cp_error" @@ -1618,7 +1608,6 @@ copy_with_update_check() { # Try to re-copy the file once more if cp_error=$(cp "$src_file" "$target_file" 2>&1); then - sync 2>/dev/null || true # Ensure file is written sleep 0.1 # Brief pause before verification if verify_file_integrity "$src_file" "$target_file"; then log_verbose "Recovery successful: integrity verified for $basename_file"