1
0
mirror of https://github.com/tw93/Mole.git synced 2026-03-23 22:40:08 +00:00

refactor(clean): simplify Xcode DeviceSupport cleanup logic

- Use array slicing instead of manual loop for splitting dirs
- Remove redundant early returns with duplicated safe_clean calls
- Consolidate cache/logs cleanup to single location at function end
This commit is contained in:
tw93
2026-03-03 16:16:52 +08:00
parent b663974f76
commit 25cba0cf38

View File

@@ -359,49 +359,24 @@ clean_xcode_device_support() {
version_dirs+=("$entry") version_dirs+=("$entry")
done < <(command find "$ds_dir" -mindepth 1 -maxdepth 1 -print0 2> /dev/null) done < <(command find "$ds_dir" -mindepth 1 -maxdepth 1 -print0 2> /dev/null)
if [[ ${#version_dirs[@]} -le $keep_count ]]; then
# Nothing to remove, still clean caches/logs inside existing versions
safe_clean "$ds_dir"/*/Symbols/System/Library/Caches/* "$display_name symbol cache"
safe_clean "$ds_dir"/*.log "$display_name logs"
return 0
fi
# Sort by modification time (most recent first) # Sort by modification time (most recent first)
local -a sorted_dirs=() local -a sorted_dirs=()
while IFS= read -r line; do while IFS= read -r line; do
sorted_dirs+=("${line#* }") sorted_dirs+=("${line#* }")
done < <( done < <(
for entry in "${version_dirs[@]}"; do for entry in "${version_dirs[@]}"; do
local mtime printf '%s %s\n' "$(stat -f%m "$entry" 2> /dev/null || echo 0)" "$entry"
mtime=$(stat -f%m "$entry" 2> /dev/null || echo "0")
printf '%s %s\n' "$mtime" "$entry"
done | sort -rn done | sort -rn
) )
# Split into keep vs remove # Get stale versions (everything after keep_count)
local -a stale_dirs=() local -a stale_dirs=("${sorted_dirs[@]:$keep_count}")
local idx=0
for entry in "${sorted_dirs[@]}"; do
if [[ $idx -lt $keep_count ]]; then
((idx++)) || true
continue
fi
stale_dirs+=("$entry")
((idx++)) || true
done
if [[ ${#stale_dirs[@]} -eq 0 ]]; then
safe_clean "$ds_dir"/*/Symbols/System/Library/Caches/* "$display_name symbol cache"
safe_clean "$ds_dir"/*.log "$display_name logs"
return 0
fi
if [[ ${#stale_dirs[@]} -gt 0 ]]; then
# Calculate total size of stale versions # Calculate total size of stale versions
local stale_size_kb=0 local stale_size_kb=0 entry_size_kb
local stale_entry
for stale_entry in "${stale_dirs[@]}"; do for stale_entry in "${stale_dirs[@]}"; do
local entry_size_kb entry_size_kb=$(get_path_size_kb "$stale_entry" 2> /dev/null || echo 0)
entry_size_kb=$(get_path_size_kb "$stale_entry" 2> /dev/null || echo "0")
stale_size_kb=$((stale_size_kb + entry_size_kb)) stale_size_kb=$((stale_size_kb + entry_size_kb))
done done
local stale_size_human local stale_size_human
@@ -410,9 +385,7 @@ clean_xcode_device_support() {
if [[ "$DRY_RUN" == "true" ]]; then if [[ "$DRY_RUN" == "true" ]]; then
echo -e " ${YELLOW}${ICON_DRY_RUN}${NC} ${display_name} · would remove ${#stale_dirs[@]} old versions (${stale_size_human}), keeping ${keep_count} most recent" echo -e " ${YELLOW}${ICON_DRY_RUN}${NC} ${display_name} · would remove ${#stale_dirs[@]} old versions (${stale_size_human}), keeping ${keep_count} most recent"
note_activity note_activity
return 0 else
fi
# Remove old versions # Remove old versions
local removed_count=0 local removed_count=0
for stale_entry in "${stale_dirs[@]}"; do for stale_entry in "${stale_dirs[@]}"; do
@@ -428,8 +401,10 @@ clean_xcode_device_support() {
echo -e " ${GREEN}${ICON_SUCCESS}${NC} ${display_name} · removed ${removed_count} old versions, ${stale_size_human}" echo -e " ${GREEN}${ICON_SUCCESS}${NC} ${display_name} · removed ${removed_count} old versions, ${stale_size_human}"
note_activity note_activity
fi fi
fi
fi
# Still clean caches/logs inside the kept versions # Clean caches/logs inside kept versions
safe_clean "$ds_dir"/*/Symbols/System/Library/Caches/* "$display_name symbol cache" safe_clean "$ds_dir"/*/Symbols/System/Library/Caches/* "$display_name symbol cache"
safe_clean "$ds_dir"/*.log "$display_name logs" safe_clean "$ds_dir"/*.log "$display_name logs"
} }