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

🎨 Optimize code structure and reuse

This commit is contained in:
Tw93
2025-10-05 20:33:30 +08:00
parent a06b2e7418
commit 85fd92fa03
4 changed files with 76 additions and 53 deletions

View File

@@ -270,7 +270,8 @@ start_cleanup() {
if [[ -t 0 ]]; then
echo ""
echo "System-level cleanup removes system caches and temp files, optional."
echo -en "${BLUE}Enter admin password to enable, or press Enter to skip: ${NC}"
echo -e "${BLUE}Enter admin password to enable, or press Enter to skip:${NC}"
echo -n "> "
read -s password
echo ""

View File

@@ -440,32 +440,38 @@ perform_update() {
check_requirements
if command -v brew >/dev/null 2>&1 && brew list mole >/dev/null 2>&1; then
echo -e "${BLUE}${NC} Updating Homebrew..."
# Update Homebrew with real-time output
brew update 2>&1 | grep -v "^==>" | grep -v "^Already up-to-date" || true
echo -e "${BLUE}${NC} Upgrading Mole..."
local upgrade_output
upgrade_output=$(brew upgrade mole 2>&1) || true
if echo "$upgrade_output" | grep -q "already installed"; then
# Get current version from brew
local current_version
current_version=$(brew info mole 2>/dev/null | grep "mole:" | awk '{print $3}' | head -1)
echo -e "${GREEN}${NC} Already on latest version (${current_version:-$VERSION})"
elif echo "$upgrade_output" | grep -q "Error:"; then
log_error "Update failed. Try: brew update && brew upgrade mole"
exit 1
# Try to use shared function if available (when running from installed Mole)
resolve_source_dir 2>/dev/null || true
if [[ -f "$SOURCE_DIR/lib/common.sh" ]]; then
# shellcheck disable=SC1090,SC1091
source "$SOURCE_DIR/lib/common.sh"
update_via_homebrew "$VERSION"
else
# Show upgrade output (exclude headers and warnings)
echo "$upgrade_output" | grep -v "^==>" | grep -v "^Updating Homebrew" | grep -v "^Warning:"
# Get new version
local new_version
new_version=$(brew info mole 2>/dev/null | grep "mole:" | awk '{print $3}' | head -1)
echo -e "${GREEN}${NC} Updated to latest version (${new_version:-$VERSION})"
fi
# Fallback: inline implementation
echo -e "${BLUE}${NC} Updating Homebrew..."
brew update 2>&1 | grep -Ev "^(==>|Already up-to-date)" || true
rm -f "$HOME/.cache/mole/version_check" "$HOME/.cache/mole/update_message"
echo -e "${BLUE}${NC} Upgrading Mole..."
local upgrade_output
upgrade_output=$(brew upgrade mole 2>&1) || true
if echo "$upgrade_output" | grep -q "already installed"; then
local current_version
current_version=$(brew list --versions mole 2>/dev/null | awk '{print $2}')
echo -e "${GREEN}${NC} Already on latest version (${current_version:-$VERSION})"
elif echo "$upgrade_output" | grep -q "Error:"; then
log_error "Homebrew upgrade failed"
echo "$upgrade_output" | grep "Error:" >&2
exit 1
else
echo "$upgrade_output" | grep -Ev "^(==>|Updating Homebrew|Warning:)" || true
local new_version
new_version=$(brew list --versions mole 2>/dev/null | awk '{print $2}')
echo -e "${GREEN}${NC} Updated to latest version (${new_version:-$VERSION})"
fi
rm -f "$HOME/.cache/mole/version_check" "$HOME/.cache/mole/update_message"
fi
exit 0
fi
@@ -492,11 +498,14 @@ perform_update() {
exit 0
fi
# Update silently
create_directories >/dev/null 2>&1
install_files >/dev/null 2>&1
verify_installation >/dev/null 2>&1
setup_path >/dev/null 2>&1
# Update with minimal output (suppress info/success, show errors only)
local old_verbose=$VERBOSE
VERBOSE=0
create_directories || { VERBOSE=$old_verbose; log_error "Failed to create directories"; exit 1; }
install_files || { VERBOSE=$old_verbose; log_error "Failed to install files"; exit 1; }
verify_installation || { VERBOSE=$old_verbose; log_error "Failed to verify installation"; exit 1; }
setup_path
VERBOSE=$old_verbose
local updated_version
updated_version="$(get_installed_version || true)"

View File

@@ -260,6 +260,41 @@ request_sudo() {
fi
}
# Homebrew update utilities
update_via_homebrew() {
local version="${1:-unknown}"
echo -e "${BLUE}${NC} Updating Homebrew..."
# Filter out common noise but show important info
brew update 2>&1 | grep -Ev "^(==>|Already up-to-date)" || true
echo -e "${BLUE}${NC} Upgrading Mole..."
local upgrade_output
upgrade_output=$(brew upgrade mole 2>&1) || true
if echo "$upgrade_output" | grep -q "already installed"; then
# Get current version
local current_version
current_version=$(brew list --versions mole 2>/dev/null | awk '{print $2}')
echo -e "${GREEN}${NC} Already on latest version (${current_version:-$version})"
elif echo "$upgrade_output" | grep -q "Error:"; then
log_error "Homebrew upgrade failed"
echo "$upgrade_output" | grep "Error:" >&2
return 1
else
# Show relevant output, filter noise
echo "$upgrade_output" | grep -Ev "^(==>|Updating Homebrew|Warning:)" || true
# Get new version
local new_version
new_version=$(brew list --versions mole 2>/dev/null | awk '{print $2}')
echo -e "${GREEN}${NC} Updated to latest version (${new_version:-$version})"
fi
# Clear version check cache
rm -f "$HOME/.cache/mole/version_check" "$HOME/.cache/mole/update_message"
return 0
}
# Load basic configuration
load_config() {
MOLE_MAX_LOG_SIZE="${MOLE_MAX_LOG_SIZE:-1048576}"

24
mole
View File

@@ -143,29 +143,7 @@ show_help() {
update_mole() {
# Check if installed via Homebrew
if command -v brew >/dev/null 2>&1 && brew list mole >/dev/null 2>&1; then
echo -e "${BLUE}→${NC} Updating Homebrew..."
# Update Homebrew with real-time output
brew update 2>&1 | grep -v "^==>" | grep -v "^Already up-to-date" || true
echo -e "${BLUE}→${NC} Upgrading Mole..."
local upgrade_output
upgrade_output=$(brew upgrade mole 2>&1) || true
if echo "$upgrade_output" | grep -q "already installed"; then
echo -e "${GREEN}✓${NC} Already on latest version ($VERSION)"
elif echo "$upgrade_output" | grep -q "Error:"; then
log_error "Update failed. Try: brew update && brew upgrade mole"
exit 1
else
# Show upgrade output (exclude headers and warnings)
echo "$upgrade_output" | grep -v "^==>" | grep -v "^Updating Homebrew" | grep -v "^Warning:"
# Get new version
local new_version
new_version=$(brew info mole 2>/dev/null | grep "mole:" | awk '{print $3}' | head -1)
echo -e "${GREEN}✓${NC} Updated to latest version (${new_version:-$VERSION})"
fi
rm -f "$HOME/.cache/mole/version_check" "$HOME/.cache/mole/update_message"
update_via_homebrew "$VERSION"
exit 0
fi