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
This commit is contained in:
lyn
2026-04-01 16:09:00 +00:00
parent 77fa2f77bc
commit d764f30589

View File

@@ -180,27 +180,61 @@ cmd_merge() {
merge_when_checks_succeed: true 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 'accept: application/json' \
-H 'Content-Type: application/json' \ -H 'Content-Type: application/json' \
-H "Authorization: token ${token}" \ -H "Authorization: token ${token}" \
-d "$json") -d "$json")
if echo "$RESPONSE" | jq -e '.message' >/dev/null 2>&1; then RESPONSE=$(cat "$TEMP_FILE")
ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message') rm -f "$TEMP_FILE"
echo "Error: $ERROR_MSG"
exit 1
fi
MERGED=$(echo "$RESPONSE" | jq -r '.merged') case "$HTTP_CODE" in
200)
if [[ "$MERGED" == "true" ]]; then MERGED=$(echo "$RESPONSE" | jq -r '.merged')
echo "Pull request merged successfully!" if [[ "$MERGED" == "true" ]]; then
else echo "Pull request merged successfully!"
echo "Error: Failed to merge pull request" else
echo "$RESPONSE" | jq '.' echo "Error: Failed to merge pull request"
exit 1 echo "$RESPONSE" | jq '.'
fi 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 # Usage