feat(workspace): offer safe sandbox cleanup

This commit is contained in:
2026-08-28 09:32:16 +02:00
parent e532c6ee9c
commit d9d30d2b30

View File

@@ -201,6 +201,68 @@ main() {
exit 1 exit 1
fi fi
unset api_key unset api_key
if ((${#sandbox_names[@]} == 0)) || ! ask_yes_no 'Do you want to delete existing Docker sbx sandboxes?'; then
return 0
fi
printf 'Existing Docker sbx sandboxes:\n'
local index
for index in "${!sandbox_names[@]}"; do
printf ' %d) %s\n' "$((index + 1))" "${sandbox_names[index]}"
done
local selection selection_part range_start range_end
local valid_selection index sandbox_name
declare -A selected_indices=()
while true; do
read -r -p 'Sandboxes to delete (for example, 1-3 or 1, 2, 7; press Enter to cancel): ' selection || return 0
[[ -z "$selection" ]] && return 0
selected_indices=()
valid_selection=true
IFS=',' read -ra selection_parts <<< "$selection"
for selection_part in "${selection_parts[@]}"; do
selection_part="${selection_part//[[:space:]]/}"
if [[ "$selection_part" =~ ^([0-9]+)-([0-9]+)$ ]]; then
range_start=$((10#${BASH_REMATCH[1]}))
range_end=$((10#${BASH_REMATCH[2]}))
if ((range_start < 1 || range_start > range_end || range_end > ${#sandbox_names[@]})); then
valid_selection=false
break
fi
for ((index = range_start; index <= range_end; index++)); do
selected_indices[$index]=1
done
elif [[ "$selection_part" =~ ^[0-9]+$ ]]; then
index=$((10#$selection_part))
if ((index < 1 || index > ${#sandbox_names[@]})); then
valid_selection=false
break
fi
selected_indices[$index]=1
else
valid_selection=false
break
fi
done
if [[ "$valid_selection" != true || ${#selected_indices[@]} -eq 0 ]]; then
printf 'Please enter valid sandbox numbers and ranges from 1 to %d.\n' "${#sandbox_names[@]}"
continue
fi
for ((index = 1; index <= ${#sandbox_names[@]}; index++)); do
if [[ ${selected_indices[$index]:-} == 1 ]]; then
sandbox_name="${sandbox_names[index - 1]}"
printf 'Deleting Docker sbx sandbox: %s\n' "$sandbox_name"
if ! sbx rm --force "$sandbox_name"; then
printf 'Unable to delete Docker sbx sandbox: %s\n' "$sandbox_name" >&2
fi
fi
done
return 0
done
} }
main "$@" main "$@"