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