-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Add support for new pull request review API #497
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
354caf4
36c6f8c
a8392c4
1ce3518
5182678
178c4ed
a8df51b
cd49c5c
167e217
99df209
c60f5b3
cd5b665
109ded2
2bd08d4
87729c2
a176b03
e3b5e69
a1bf055
91cc8ae
bfda8ba
36dbd69
0c0faa4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -5,15 +5,243 @@ | |
|
|
||
| package github | ||
|
|
||
| import "time" | ||
| import ( | ||
| "fmt" | ||
| "time" | ||
| ) | ||
|
|
||
| // PullRequestReview represents a review of a pull request. | ||
| type PullRequestReview struct { | ||
| ID *int `json:"id,omitempty"` | ||
| User *User `json:"user,omitempty"` | ||
| Body *string `json:"body,omitempty"` | ||
| SubmittedAt *time.Time `json:"submitted_at,omitempty"` | ||
| ID *int `json:"id,omitempty"` | ||
| User *User `json:"user,omitempty"` | ||
| Body *string `json:"body,omitempty"` | ||
| SubmittedAt *time.Time `json:"submitted_at,omitempty"` | ||
| CommitID *string `json:"commit_id,omitempty"` | ||
| HTMLURL *string `json:"html_url,omitempty"` | ||
| PullRequestURL *string `json:"pull_request_url,omitempty"` | ||
| State *string `json:"state,omitempty"` | ||
| } | ||
|
|
||
| func (p PullRequestReview) String() string { | ||
| return Stringify(p) | ||
| } | ||
|
|
||
| // DraftReviewComment represents a comment part of the review. | ||
| type DraftReviewComment struct { | ||
| Path *string `json:"path,omitempty"` | ||
| Position *int `json:"position,omitempty"` | ||
| Body *string `json:"body,omitempty"` | ||
| } | ||
|
|
||
| func (c DraftReviewComment) String() string { | ||
| return Stringify(c) | ||
| } | ||
|
|
||
| // PullRequestReviewRequest represents a request to create a review. | ||
| type PullRequestReviewRequest struct { | ||
| Body *string `json:"body,omitempty"` | ||
| Event *string `json:"event,omitempty"` | ||
| Comments []*DraftReviewComment `json:"comments,omitempty"` | ||
| } | ||
|
|
||
| func (r PullRequestReviewRequest) String() string { | ||
| return Stringify(r) | ||
| } | ||
|
|
||
| // PullRequestReviewDismissalRequest represents a request to dismiss a review. | ||
| type PullRequestReviewDismissalRequest struct { | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I wish we could reduce the stutter on this type... it reminds me too much of Java. 😃
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. One thing I can think of is to use
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Agreed. I couldn't think of a better alternative. I was just lamenting. 😄 |
||
| Message *string `json:"message,omitempty"` | ||
| } | ||
|
|
||
| func (r PullRequestReviewDismissalRequest) String() string { | ||
| return Stringify(r) | ||
| } | ||
|
|
||
| // ListReviews lists all reviews on the specified pull request. | ||
| // | ||
| // TODO: Follow up with GitHub support about an issue with this method's | ||
| // returned error format and remove this comment once it's fixed. | ||
| // Read more about it here - https://github.com/google/go-github/issues/540 | ||
| // | ||
| // GitHub API docs: https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request | ||
| func (s *PullRequestsService) ListReviews(owner, repo string, number int) ([]*PullRequestReview, *Response, error) { | ||
| u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews", owner, repo, number) | ||
|
|
||
| req, err := s.client.NewRequest("GET", u, nil) | ||
| if err != nil { | ||
| return nil, nil, err | ||
| } | ||
|
|
||
| // TODO: remove custom Accept header when this API fully launches | ||
| req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) | ||
|
|
||
| var reviews []*PullRequestReview | ||
| resp, err := s.client.Do(req, &reviews) | ||
| if err != nil { | ||
| return nil, resp, err | ||
| } | ||
|
|
||
| return reviews, resp, nil | ||
| } | ||
|
|
||
| // GetReview fetches the specified pull request review. | ||
| // | ||
| // TODO: Follow up with GitHub support about an issue with this method's | ||
| // returned error format and remove this comment once it's fixed. | ||
| // Read more about it here - https://github.com/google/go-github/issues/540 | ||
| // | ||
| // GitHub API docs: https://developer.github.com/v3/pulls/reviews/#get-a-single-review | ||
| func (s *PullRequestsService) GetReview(owner, repo string, number, reviewID int) (*PullRequestReview, *Response, error) { | ||
| u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID) | ||
|
|
||
| req, err := s.client.NewRequest("GET", u, nil) | ||
| if err != nil { | ||
| return nil, nil, err | ||
| } | ||
|
|
||
| // TODO: remove custom Accept header when this API fully launches | ||
| req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) | ||
|
|
||
| review := new(PullRequestReview) | ||
| resp, err := s.client.Do(req, review) | ||
| if err != nil { | ||
| return nil, resp, err | ||
| } | ||
|
|
||
| return review, resp, nil | ||
| } | ||
|
|
||
| // DeletePendingReview deletes the specified pull request pending review. | ||
| // | ||
| // TODO: Follow up with GitHub support about an issue with this method's | ||
| // returned error format and remove this comment once it's fixed. | ||
| // Read more about it here - https://github.com/google/go-github/issues/540 | ||
| // | ||
| // GitHub API docs: https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review | ||
| func (s *PullRequestsService) DeletePendingReview(owner, repo string, number, reviewID int) (*PullRequestReview, *Response, error) { | ||
| u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID) | ||
|
|
||
| req, err := s.client.NewRequest("DELETE", u, nil) | ||
| if err != nil { | ||
| return nil, nil, err | ||
| } | ||
|
|
||
| // TODO: remove custom Accept header when this API fully launches | ||
| req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) | ||
|
|
||
| review := new(PullRequestReview) | ||
| resp, err := s.client.Do(req, review) | ||
| if err != nil { | ||
| return nil, resp, err | ||
| } | ||
|
|
||
| return review, resp, nil | ||
| } | ||
|
|
||
| // ListReviewComments lists all the comments for the specified review. | ||
| // | ||
| // TODO: Follow up with GitHub support about an issue with this method's | ||
| // returned error format and remove this comment once it's fixed. | ||
| // Read more about it here - https://github.com/google/go-github/issues/540 | ||
| // | ||
| // GitHub API docs: https://developer.github.com/v3/pulls/reviews/#get-a-single-reviews-comments | ||
| func (s *PullRequestsService) ListReviewComments(owner, repo string, number, reviewID int) ([]*PullRequestComment, *Response, error) { | ||
| u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/comments", owner, repo, number, reviewID) | ||
|
|
||
| req, err := s.client.NewRequest("GET", u, nil) | ||
| if err != nil { | ||
| return nil, nil, err | ||
| } | ||
|
|
||
| // TODO: remove custom Accept header when this API fully launches | ||
| req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) | ||
|
|
||
| var comments []*PullRequestComment | ||
| resp, err := s.client.Do(req, &comments) | ||
| if err != nil { | ||
| return nil, resp, err | ||
| } | ||
|
|
||
| return comments, resp, nil | ||
| } | ||
|
|
||
| // CreateReview creates a new review on the specified pull request. | ||
| // | ||
| // TODO: Follow up with GitHub support about an issue with this method's | ||
| // returned error format and remove this comment once it's fixed. | ||
| // Read more about it here - https://github.com/google/go-github/issues/540 | ||
| // | ||
| // GitHub API docs: https://developer.github.com/v3/pulls/reviews/#create-a-pull-request-review | ||
| func (s *PullRequestsService) CreateReview(owner, repo string, number int, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) { | ||
| u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews", owner, repo, number) | ||
|
|
||
| req, err := s.client.NewRequest("POST", u, review) | ||
| if err != nil { | ||
| return nil, nil, err | ||
| } | ||
|
|
||
| // TODO: remove custom Accept header when this API fully launches | ||
| req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) | ||
|
|
||
| r := new(PullRequestReview) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let's keep variable name consistent. In
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sorry, "review" is used as argument. Please ignore this. |
||
| resp, err := s.client.Do(req, r) | ||
| if err != nil { | ||
| return nil, resp, err | ||
| } | ||
|
|
||
| return r, resp, nil | ||
| } | ||
|
|
||
| // SubmitReview submits a specified review on the specified pull request. | ||
| // | ||
| // TODO: Follow up with GitHub support about an issue with this method's | ||
| // returned error format and remove this comment once it's fixed. | ||
| // Read more about it here - https://github.com/google/go-github/issues/540 | ||
| // | ||
| // GitHub API docs: https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review | ||
| func (s *PullRequestsService) SubmitReview(owner, repo string, number, reviewID int, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) { | ||
| u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/events", owner, repo, number, reviewID) | ||
|
|
||
| req, err := s.client.NewRequest("POST", u, review) | ||
| if err != nil { | ||
| return nil, nil, err | ||
| } | ||
|
|
||
| // TODO: remove custom Accept header when this API fully launches | ||
| req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) | ||
|
|
||
| r := new(PullRequestReview) | ||
| resp, err := s.client.Do(req, r) | ||
| if err != nil { | ||
| return nil, resp, err | ||
| } | ||
|
|
||
| return r, resp, nil | ||
| } | ||
|
|
||
| // DismissReview dismisses a specified review on the specified pull request. | ||
| // | ||
| // TODO: Follow up with GitHub support about an issue with this method's | ||
| // returned error format and remove this comment once it's fixed. | ||
| // Read more about it here - https://github.com/google/go-github/issues/540 | ||
| // | ||
| // GitHub API docs: https://developer.github.com/v3/pulls/reviews/#dismiss-a-pull-request-review | ||
| func (s *PullRequestsService) DismissReview(owner, repo string, number, reviewID int, review *PullRequestReviewDismissalRequest) (*PullRequestReview, *Response, error) { | ||
| u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/dismissals", owner, repo, number, reviewID) | ||
|
|
||
| req, err := s.client.NewRequest("PUT", u, review) | ||
| if err != nil { | ||
| return nil, nil, err | ||
| } | ||
|
|
||
| // TODO: remove custom Accept header when this API fully launches | ||
| req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) | ||
|
|
||
| r := new(PullRequestReview) | ||
| resp, err := s.client.Do(req, r) | ||
| if err != nil { | ||
| return nil, resp, err | ||
| } | ||
|
|
||
| // State can be "approved", "rejected", or "commented". | ||
| State *string `json:"state,omitempty"` | ||
| return r, resp, nil | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request
Some fields of list review API response are missing.
You can see similar fields in PullRequestComment
go-github/github/pulls_comments.go
Line 14 in 7b47f69
And "state" seems UPPRECASE and can be "APPROVED", "DISMISSED", "COMMENTED".
PullRequestReview is also used in PullRequestReviewEvent https://developer.github.com/v3/activity/events/types/#pullrequestreviewevent , so maybe we should check consistencies and give feed backs to GitHub support perhaps if the differences are not reasonable.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"state" also can be "CHANGES_REQUESTED"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, I mean, "state" can be "ACCEPTED", "DISMISSED", "CHANGES_REQUESTED" or "COMMENTED" for Rest API we are working with now, but "state" also can be "approved", "rejected", or "commented" for pull-request event API. https://developer.github.com/v3/activity/events/types/#pullrequestreviewevent
PullRequestReview is used here as a field of event API.
go-github/github/event_types.go
Line 338 in 7b47f69
So, it's not a good idea to remove existed comment, i guess.
Or, we can remove this comment completely and leave users to check GitHub API document, but i'm not sure.
And, there is a typo.
s/ACCEPTED/APPROVED/There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I will prefer removing this comment totally. @haya14busa
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agree. I think it's ok to remove it.