Show [migrated] marker and summary in migrate-pr

Interactive picker now marks already-migrated PRs. All modes (--all,
explicit numbers, interactive) track and display success/fail/skip
counts at the end.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-13 21:08:23 +03:00
parent fbacec7f6f
commit 401d0e87a4

View File

@@ -735,6 +735,26 @@ cmd_migrate_pr() {
log "INFO" "Archived repo: ${archived_api}" log "INFO" "Archived repo: ${archived_api}"
# Load already-migrated PR numbers for skip detection and display
local migrated_numbers
migrated_numbers=$(echo "$onboard_state" | jq -r '[.migrated_prs // [] | .[].old_number] | map(tostring) | .[]')
# Counters for summary
local migrated=0 failed=0 skipped=0
# Helper: attempt migration of one PR with counting
_try_migrate() {
local num="$1"
if echo "$migrated_numbers" | grep -qx "$num"; then
log "INFO" "PR #${num} already migrated — skipping"
skipped=$((skipped + 1))
elif migrate_one_pr "$num"; then
migrated=$((migrated + 1))
else
failed=$((failed + 1))
fi
}
if [ "$all" = true ]; then if [ "$all" = true ]; then
# Migrate all open PRs from archived repo # Migrate all open PRs from archived repo
local prs local prs
@@ -744,14 +764,14 @@ cmd_migrate_pr() {
count=$(echo "$prs" | jq 'length') count=$(echo "$prs" | jq 'length')
log "INFO" "Found ${count} open PR(s) on archived repo" log "INFO" "Found ${count} open PR(s) on archived repo"
echo "$prs" | jq -r '.[] | .number' | while read -r num; do while read -r num; do
migrate_one_pr "$num" || true _try_migrate "$num"
done done < <(echo "$prs" | jq -r '.[] | .number')
elif [ ${#pr_numbers[@]} -gt 0 ]; then elif [ ${#pr_numbers[@]} -gt 0 ]; then
# Migrate specific PR numbers # Migrate specific PR numbers
for num in "${pr_numbers[@]}"; do for num in "${pr_numbers[@]}"; do
migrate_one_pr "$num" || true _try_migrate "$num"
done done
else else
@@ -767,26 +787,33 @@ cmd_migrate_pr() {
return return
fi fi
# Display PRs with [migrated] marker for already-processed ones
echo "" >&2 echo "" >&2
echo "Open PRs on archived repo:" >&2 echo "Open PRs on archived repo:" >&2
echo "$prs" | jq -r '.[] | " #\(.number): \(.title) (\(.base.ref) <- \(.head.ref))"' >&2 while IFS=$'\t' read -r num title base_ref head_ref; do
if echo "$migrated_numbers" | grep -qx "$num"; then
echo " #${num}: ${title} (${base_ref} <- ${head_ref}) [migrated]" >&2
else
echo " #${num}: ${title} (${base_ref} <- ${head_ref})" >&2
fi
done < <(echo "$prs" | jq -r '.[] | "\(.number)\t\(.title)\t\(.base.ref)\t\(.head.ref)"')
echo "" >&2 echo "" >&2
echo "Enter PR numbers to migrate (space-separated), or 'all':" >&2 echo "Enter PR numbers to migrate (space-separated), or 'all':" >&2
local selection local selection
read -r selection read -r selection
if [ "$selection" = "all" ]; then if [ "$selection" = "all" ]; then
echo "$prs" | jq -r '.[] | .number' | while read -r num; do while read -r num; do
migrate_one_pr "$num" || true _try_migrate "$num"
done done < <(echo "$prs" | jq -r '.[] | .number')
else else
for num in $selection; do for num in $selection; do
migrate_one_pr "$num" || true _try_migrate "$num"
done done
fi fi
fi fi
log "INFO" "PR migration complete" log "INFO" "Migration complete: ${migrated} migrated, ${failed} failed, ${skipped} skipped"
} }
# ─── Main ─────────────────────────────────────────────────────────── # ─── Main ───────────────────────────────────────────────────────────