address review feedback: wrap ErrCannotDeleteSubmittedReview, fix nits
PR Ready Gate / clear-labels (pull_request) Successful in 2s
CI / test (pull_request) Successful in 19s
CI / review (anthropic--claude-4.6-sonnet, sonnet, SONNET_REVIEW_TOKEN) (pull_request) Successful in 34s
CI / review (gpt-5, security, ., rodin/security-patterns, SECURITY_REVIEW.md, SECURITY_REVIEW_TOKEN) (pull_request) Successful in 1m19s
CI / review (gpt-5, gpt, GPT_REVIEW_TOKEN) (pull_request) Successful in 1m59s
PR Ready Gate / clear-labels (pull_request) Successful in 2s
CI / test (pull_request) Successful in 19s
CI / review (anthropic--claude-4.6-sonnet, sonnet, SONNET_REVIEW_TOKEN) (pull_request) Successful in 34s
CI / review (gpt-5, security, ., rodin/security-patterns, SECURITY_REVIEW.md, SECURITY_REVIEW_TOKEN) (pull_request) Successful in 1m19s
CI / review (gpt-5, gpt, GPT_REVIEW_TOKEN) (pull_request) Successful in 1m59s
- Wrap ErrCannotDeleteSubmittedReview with operation context via fmt.Errorf so callers get both sentinel identity and context (MINOR fix) - Combine double iteration in PostReview into single loop (NIT) - Remove extra trailing blank line in review_test.go (NIT) - Clarify translateGitHubReviewState comment re: PENDING state (NIT) - Update requestOptions.bodyFn comment to mention DELETE-with-body (NIT)
This commit is contained in:
+2
-1
@@ -196,7 +196,8 @@ func (c *Client) SetRetryBackoff(d []time.Duration) error {
|
||||
// requestOptions holds per-request configuration for doRequestCore.
|
||||
type requestOptions struct {
|
||||
// bodyFn returns a fresh io.Reader for the request body on each attempt.
|
||||
// Must be non-nil for requests that carry a body (POST, PUT, PATCH).
|
||||
// Must be non-nil for any request that carries a body (POST, PUT, PATCH,
|
||||
// or DELETE when a body is required by the API).
|
||||
// Returning a fresh reader on each call allows retries to re-send the body.
|
||||
bodyFn func() io.Reader
|
||||
|
||||
|
||||
+5
-8
@@ -59,7 +59,8 @@ func translateGitHubReviewState(state string) string {
|
||||
return "COMMENT"
|
||||
default:
|
||||
// States like APPROVED, DISMISSED, and PENDING pass through unchanged
|
||||
// as they already match the canonical vcs representation.
|
||||
// as they already match the canonical vcs representation. PENDING appears
|
||||
// on draft reviews that have not yet been submitted via the GitHub UI or API.
|
||||
return state
|
||||
}
|
||||
}
|
||||
@@ -77,16 +78,12 @@ func (c *Client) PostReview(ctx context.Context, owner, repo string, number int,
|
||||
Event: string(req.Event),
|
||||
}
|
||||
|
||||
// Populate CommitID from the first comment if available.
|
||||
// Populate CommitID from the first comment and build the payload in one pass.
|
||||
// All comments in a single review share the same commit_id.
|
||||
for _, comment := range req.Comments {
|
||||
if comment.CommitID != "" {
|
||||
if payload.CommitID == "" && comment.CommitID != "" {
|
||||
payload.CommitID = comment.CommitID
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
for _, comment := range req.Comments {
|
||||
payload.Comments = append(payload.Comments, reviewCommentEntry{
|
||||
Path: comment.Path,
|
||||
Position: comment.Position,
|
||||
@@ -159,7 +156,7 @@ func (c *Client) DeleteReview(ctx context.Context, owner, repo string, number in
|
||||
if err != nil {
|
||||
var apiErr *APIError
|
||||
if errors.As(err, &apiErr) && apiErr.StatusCode == 422 {
|
||||
return ErrCannotDeleteSubmittedReview
|
||||
return fmt.Errorf("delete review: %w", ErrCannotDeleteSubmittedReview)
|
||||
}
|
||||
return fmt.Errorf("delete review: %w", err)
|
||||
}
|
||||
|
||||
@@ -379,5 +379,3 @@ func TestTranslateGitHubReviewState(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user