Skip to content

Commit cceed18

Browse files
AI Assistantclaude
andcommitted
fix(upgrade-all): detect pipx packages with missing metadata and provide fix
Enhanced pipx upgrade-all error handling to distinguish between missing metadata issues (user-fixable) and actual failures. Problem: - pipx upgrade-all exits with non-zero code when any package has missing metadata - This happens with packages installed using pipx < 0.15.0.0 - Script treated partial success as complete failure - User received generic error message without actionable fix Solution: - Detect "missing internal pipx metadata" pattern in output - Extract broken package name from error message - Use log_reconcile() with ⚙ icon for partial upgrades - Provide exact fix command: pipx uninstall <pkg> && pipx install <pkg> - Only mark as failure if it's a real error (not metadata issue) Behavior: Before: ❌ pipx packages (see log for details) ⏭ pipx packages (failed) After (metadata issue): ⚙ pipx packages (partial: black has missing metadata, run: pipx uninstall black && pipx install black) After (real failure): ❌ pipx packages (see log for details) This treats missing metadata as a skippable issue with clear resolution path, similar to how we handle system-managed packages and transient network errors. 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 7d691cb commit cceed18

1 file changed

Lines changed: 17 additions & 1 deletion

File tree

scripts/upgrade_all.sh

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,23 @@ stage_4_user_packages() {
556556

557557
# Pipx packages
558558
if command -v pipx >/dev/null 2>&1; then
559-
run_cmd "pipx packages" pipx upgrade-all || log_skip "pipx packages (failed)"
559+
if [ "$DRY_RUN" = "1" ]; then
560+
log_info "DRY-RUN: pipx upgrade-all"
561+
else
562+
local temp_log=$(mktemp)
563+
if pipx upgrade-all >> "$LOG_FILE" 2>&1; then
564+
log_success "pipx packages"
565+
else
566+
# Check if only failure was missing metadata (known issue)
567+
if grep -q "missing internal pipx metadata" "$LOG_FILE" 2>/dev/null; then
568+
local broken_pkg=$(grep -oP "Not upgrading \K\w+" "$LOG_FILE" 2>/dev/null | tail -1)
569+
log_reconcile "pipx packages (partial: $broken_pkg has missing metadata, run: pipx uninstall $broken_pkg && pipx install $broken_pkg)"
570+
else
571+
log_fail "pipx packages (see $LOG_FILE for details)"
572+
fi
573+
fi
574+
rm -f "$temp_log"
575+
fi
560576
else
561577
log_skip "pipx (not installed)"
562578
fi

0 commit comments

Comments
 (0)