diff --git a/update-dots.sh b/update-dots.sh index 8b4408a0a..35a948588 100644 --- a/update-dots.sh +++ b/update-dots.sh @@ -191,14 +191,35 @@ if ! git pull; then done done - # run diff command to determine which files do only exist in the old dotfiles - diff_files=$(diff -qr "$base" "$temp_folder" | grep -E "^Only in $base" | awk '{print $4}') - for file in $diff_files; do + deleted_files=() + renamed_files=() + + # Extract deleted files and save to variable + deleted_files=$(git diff --name-status HEAD origin/$current_branch | awk '$1 == "D" {print $2}') + + # Extract renamed files and save to variable + renamed_files=$(git diff --name-status HEAD origin/$current_branch | awk '$1 ~ /^R/ {print $2}') + + + files_to_remove=() + + for file in $deleted_files; do + if ! file_in_excludes "$file" && [[ ! " ${modified_files[*]} " =~ " $file " ]]; then - echo -e "${YELLOW}File $file does not exist in the new dotfiles. Deleting...${RESET}" - if [[ -e "$HOME/$file" ]]; then - rm -rf "$HOME/$file" - fi + files_to_remove+=("$file") + fi + done + for file in $renamed_files; do + if ! file_in_excludes "$file" && [[ ! " ${modified_files[*]} " =~ " $file " ]]; then + files_to_remove+=("$file") + fi + done + + # Remove files + for file in "${files_to_remove[@]}"; do + echo -e "${YELLOW}Removing $file ...${RESET}" + if [[ -f "$HOME/$file" ]]; then + rm -rf "$HOME/$file" fi done @@ -217,7 +238,7 @@ renamed_files=() deleted_files=$(git diff --name-status @{1} | awk '$1 == "D" {print $2}') # Extract renamed files and save to variable -renamed_files=$(git diff --name-status @{1} | awk '$1 ~ /^R/ {print $2, "->", $3}') +renamed_files=$(git diff --name-status @{1} | awk '$1 ~ /^R/ {print $2}') files_to_remove=() @@ -237,7 +258,9 @@ done # Remove files for file in "${files_to_remove[@]}"; do echo -e "${YELLOW}Removing $file ...${RESET}" - rm -rf "$HOME/$file" + if [[ -f "$HOME/$file" ]]; then + rm -rf "$HOME/$file" + fi done