From d764f30589d327a4973bb7606ee97b08ae37c81c Mon Sep 17 00:00:00 2001 From: lyn Date: Wed, 1 Apr 2026 16:09:00 +0000 Subject: [PATCH] fix(pr): proper HTTP status code handling for merge command Handle different HTTP status codes returned by merge API: - 200: success (check merged field) - 409: conflict (output error message) - 404: not found - 423: repo archived - 405: empty response / try again later - etc: generic error handling --- git-hangman-lab/scripts/pr | 64 +++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 15 deletions(-) diff --git a/git-hangman-lab/scripts/pr b/git-hangman-lab/scripts/pr index 3a5b35a..975185e 100755 --- a/git-hangman-lab/scripts/pr +++ b/git-hangman-lab/scripts/pr @@ -180,27 +180,61 @@ cmd_merge() { merge_when_checks_succeed: true }') - RESPONSE=$(curl -s -X POST "https://git.hangman-lab.top/api/v1/repos/${OWNER}/${REPO_NAME}/pulls/${pr_index}/merge" \ + TEMP_FILE=$(mktemp) + HTTP_CODE=$(curl -s -o "$TEMP_FILE" -w "%{http_code}" -X POST "https://git.hangman-lab.top/api/v1/repos/${OWNER}/${REPO_NAME}/pulls/${pr_index}/merge" \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H "Authorization: token ${token}" \ -d "$json") - if echo "$RESPONSE" | jq -e '.message' >/dev/null 2>&1; then - ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message') - echo "Error: $ERROR_MSG" - exit 1 - fi + RESPONSE=$(cat "$TEMP_FILE") + rm -f "$TEMP_FILE" - MERGED=$(echo "$RESPONSE" | jq -r '.merged') - - if [[ "$MERGED" == "true" ]]; then - echo "Pull request merged successfully!" - else - echo "Error: Failed to merge pull request" - echo "$RESPONSE" | jq '.' - exit 1 - fi + case "$HTTP_CODE" in + 200) + MERGED=$(echo "$RESPONSE" | jq -r '.merged') + if [[ "$MERGED" == "true" ]]; then + echo "Pull request merged successfully!" + else + echo "Error: Failed to merge pull request" + echo "$RESPONSE" | jq '.' + exit 1 + fi + ;; + 409) + ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message // "Conflicting changes"') + echo "Error [$HTTP_CODE]: $ERROR_MSG" + exit 1 + ;; + 404) + ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message // "Not found"') + echo "Error [$HTTP_CODE]: $ERROR_MSG" + exit 1 + ;; + 423) + ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message // "Repository is archived"') + echo "Error [$HTTP_CODE]: $ERROR_MSG" + exit 1 + ;; + 405) + ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message // empty') + if [[ -n "$ERROR_MSG" && "$ERROR_MSG" != "null" ]]; then + echo "Error [$HTTP_CODE]: $ERROR_MSG" + else + echo "Error [$HTTP_CODE]: Please try again later" + fi + exit 1 + ;; + *) + if echo "$RESPONSE" | jq -e '.message' >/dev/null 2>&1; then + ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message') + echo "Error [$HTTP_CODE]: $ERROR_MSG" + else + echo "Error [$HTTP_CODE]: Unknown error" + fi + exit 1 + ;; + esac } # Usage