From dc45fe8db6ef3ab35e32e5cc4be494271c375197 Mon Sep 17 00:00:00 2001 From: soulis-1256 Date: Thu, 20 Aug 2026 18:44:48 +0300 Subject: [PATCH] Clarify and condition leftover cleanup prompts --- lib/prompts.sh | 41 ++++++++++++++++++++++++++++++++--------- tests/unit/test_core.sh | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 9 deletions(-) diff --git a/lib/prompts.sh b/lib/prompts.sh index 5225705..3263f9c 100644 --- a/lib/prompts.sh +++ b/lib/prompts.sh @@ -559,24 +559,47 @@ offer_leftover_cleanup() { leftover=$(list_assemblrr_leftovers || true) [ -n "$leftover" ] || return 0 + local has_install=false + local has_media=false + if echo "$leftover" | grep -q $'^install\t'; then + has_install=true + fi + if echo "$leftover" | grep -q $'^media\t'; then + has_media=true + fi + echo - log_warning "Found leftover assemblrr files from an earlier attempt:" + log_warning "Found leftover ${APP_DISPLAY_NAME:-assemblrr} files from an earlier attempt:" while IFS=$'\t' read -r kind path; do [ -n "$path" ] || continue - log_warning " $path" + case "$kind" in + install) log_warning " Install: $path" ;; + media) log_warning " Media: $path" ;; + *) log_warning " $path" ;; + esac done <<< "$leftover" - read -p "Remove leftover install files (keeps media)? (Y/n) [Default = y]: " ans - ans=${ans:-y} - if [ "${ans,,}" = "y" ]; then - while IFS=$'\t' read -r kind path; do - [ "$kind" = "install" ] && [ -n "$path" ] && safe_rm_rf "$path" - done <<< "$leftover" + if [ "$has_install" = true ]; then + local prompt_msg="Remove leftover install files? (Y/n) [Default = y]: " + if [ "$has_media" = true ]; then + prompt_msg="Remove leftover install files (keeps media)? (Y/n) [Default = y]: " + fi + read -p "$prompt_msg" ans + ans=${ans:-y} + if [ "${ans,,}" = "y" ]; then + while IFS=$'\t' read -r kind path; do + [ "$kind" = "install" ] && [ -n "$path" ] && safe_rm_rf "$path" + done <<< "$leftover" + fi fi leftover=$(list_assemblrr_leftovers || true) if echo "$leftover" | grep -q $'^media\t'; then - read -p "Also remove leftover media directories? (y/N) [Default = n]: " ans + local prompt_media="Remove leftover media directories? (y/N) [Default = n]: " + if [ "$has_install" = true ]; then + prompt_media="Also remove leftover media directories? (y/N) [Default = n]: " + fi + read -p "$prompt_media" ans ans=${ans:-n} if [ "${ans,,}" = "y" ]; then while IFS=$'\t' read -r kind path; do diff --git a/tests/unit/test_core.sh b/tests/unit/test_core.sh index e03a9e5..a5dbdd2 100755 --- a/tests/unit/test_core.sh +++ b/tests/unit/test_core.sh @@ -181,6 +181,41 @@ assert_contains "$gate" "uninstall" "points at uninstall" assert_contains "$gate" "upgrade" "points at upgrade" assert_contains "$gate" "exit 1" "stops setup" +test_suite "offer_leftover_cleanup" +# shellcheck disable=SC1091 +source "$REPO_ROOT/lib/prompts.sh" + +media_only_home="$tmp/media-only-home" +mkdir -p "$media_only_home/assemblrr-media/torrents/movies" +out_media=$(HOME="$media_only_home" offer_leftover_cleanup <<< "n" 2>&1 || true) +assert_contains "$out_media" "Media: $media_only_home/assemblrr-media" "media labeled in leftover output" +assert_not_contains "$out_media" "Install:" "no install label when only media leftover" +assert_true "media directory kept when answering n" "[ -d \"$media_only_home/assemblrr-media\" ]" + +HOME="$media_only_home" offer_leftover_cleanup <<< "y" >/dev/null 2>&1 || true +assert_false "media directory removed when answering y" "[ -d \"$media_only_home/assemblrr-media\" ]" + +inst_only_home="$tmp/inst-only-home" +mkdir -p "$inst_only_home/assemblrr" +out_inst=$(HOME="$inst_only_home" offer_leftover_cleanup <<< "n" 2>&1 || true) +assert_contains "$out_inst" "Install: $inst_only_home/assemblrr" "install labeled in leftover output" +assert_not_contains "$out_inst" "Media:" "no media label when only install leftover" +assert_true "install directory kept when answering n" "[ -d \"$inst_only_home/assemblrr\" ]" + +HOME="$inst_only_home" offer_leftover_cleanup <<< "y" >/dev/null 2>&1 || true +assert_false "install directory removed when answering y" "[ -d \"$inst_only_home/assemblrr\" ]" + +both_home="$tmp/both-home" +mkdir -p "$both_home/assemblrr" "$both_home/assemblrr-media/torrents/movies" +out_both=$(HOME="$both_home" offer_leftover_cleanup <<< $'n\nn' 2>&1 || true) +assert_contains "$out_both" "Install: $both_home/assemblrr" "both: install labeled" +assert_contains "$out_both" "Media: $both_home/assemblrr-media" "both: media labeled" + +# Remove install only (answer y, then n) +HOME="$both_home" offer_leftover_cleanup <<< $'y\nn' >/dev/null 2>&1 || true +assert_false "install directory removed on y" "[ -d \"$both_home/assemblrr\" ]" +assert_true "media directory kept on n" "[ -d \"$both_home/assemblrr-media\" ]" + test_suite "print_detected_locations" loc=$(INSTALL_DIR=/mnt/e/assemblrr MEDIA_DIRECTORY=/mnt/e/assemblrr-media \ HOME="$ptr_home" print_detected_locations "Detected installation:")