From 58c7ec7d60f37cdfb78eb22c357f9ef5b3b94ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Janik=20Michael=20M=C3=BCller?= <45454768+H0mire@users.noreply.github.com> Date: Wed, 22 May 2024 22:03:04 +0000 Subject: [PATCH] bugfix --- update-dots.sh | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) 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