1
0
mirror of https://github.com/tw93/Mole.git synced 2026-02-04 15:04:42 +00:00

refactor: improve brew cleanup timeout handling and remove app_caches, clean_extras, and optimize_core tests.

This commit is contained in:
Tw93
2026-01-03 12:53:31 +08:00
parent ac5c0e3c9d
commit 3cb21aad7e
26 changed files with 255 additions and 340 deletions

View File

@@ -43,41 +43,32 @@ clean_homebrew() {
MOLE_SPINNER_PREFIX=" " start_inline_spinner "Homebrew cleanup and autoremove..."
fi
fi
# Run cleanup/autoremove in parallel with a timeout guard.
# Run cleanup/autoremove in parallel with timeout guard per command.
local timeout_seconds=${MO_BREW_TIMEOUT:-120}
local brew_tmp_file autoremove_tmp_file
local brew_pid autoremove_pid
local brew_exit=0
local autoremove_exit=0
if [[ "$skip_cleanup" == "false" ]]; then
brew_tmp_file=$(create_temp_file)
(brew cleanup > "$brew_tmp_file" 2>&1) &
run_with_timeout "$timeout_seconds" brew cleanup > "$brew_tmp_file" 2>&1 &
brew_pid=$!
fi
autoremove_tmp_file=$(create_temp_file)
(brew autoremove > "$autoremove_tmp_file" 2>&1) &
run_with_timeout "$timeout_seconds" brew autoremove > "$autoremove_tmp_file" 2>&1 &
autoremove_pid=$!
local elapsed=0
local brew_done=false
local autoremove_done=false
[[ "$skip_cleanup" == "true" ]] && brew_done=true
while [[ "$brew_done" == "false" ]] || [[ "$autoremove_done" == "false" ]]; do
if [[ $elapsed -ge $timeout_seconds ]]; then
[[ -n "$brew_pid" ]] && kill -TERM $brew_pid 2> /dev/null || true
kill -TERM $autoremove_pid 2> /dev/null || true
break
fi
[[ -n "$brew_pid" ]] && { kill -0 $brew_pid 2> /dev/null || brew_done=true; }
kill -0 $autoremove_pid 2> /dev/null || autoremove_done=true
sleep 1
((elapsed++))
done
if [[ -n "$brew_pid" ]]; then
wait "$brew_pid" 2> /dev/null || brew_exit=$?
fi
wait "$autoremove_pid" 2> /dev/null || autoremove_exit=$?
local brew_success=false
if [[ "$skip_cleanup" == "false" && -n "$brew_pid" ]]; then
if wait $brew_pid 2> /dev/null; then
brew_success=true
fi
if [[ "$skip_cleanup" == "false" && $brew_exit -eq 0 ]]; then
brew_success=true
fi
local autoremove_success=false
if wait $autoremove_pid 2> /dev/null; then
if [[ $autoremove_exit -eq 0 ]]; then
autoremove_success=true
fi
if [[ -t 1 ]]; then stop_inline_spinner; fi
@@ -100,7 +91,7 @@ clean_homebrew() {
echo -e " ${GREEN}${ICON_SUCCESS}${NC} Homebrew cleanup (${removed_count} items)"
fi
fi
elif [[ $elapsed -ge $timeout_seconds ]]; then
elif [[ $brew_exit -eq 124 ]]; then
echo -e " ${YELLOW}${ICON_WARNING}${NC} Homebrew cleanup timed out · run ${GRAY}brew cleanup${NC} manually"
fi
# Process autoremove output - only show if packages were removed
@@ -113,7 +104,7 @@ clean_homebrew() {
if [[ $removed_packages -gt 0 ]]; then
echo -e " ${GREEN}${ICON_SUCCESS}${NC} Removed orphaned dependencies (${removed_packages} packages)"
fi
elif [[ $elapsed -ge $timeout_seconds ]]; then
elif [[ $autoremove_exit -eq 124 ]]; then
echo -e " ${YELLOW}${ICON_WARNING}${NC} Autoremove timed out · run ${GRAY}brew autoremove${NC} manually"
fi
# Update cache timestamp on successful completion or when cleanup was intelligently skipped