Skip to content

Commit

Permalink
Improve the context
Browse files Browse the repository at this point in the history
  • Loading branch information
suhaibmujahid committed Apr 19, 2020
1 parent 7fb5492 commit 9f3b7e1
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 33 deletions.
15 changes: 6 additions & 9 deletions bitbucket/bitbucket.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ type service struct {
// the URL will be relative root of the base URL (ignoring the API suffix i.e., `/rest/api/1.0/`).
// If specified, the value pointed to by body is JSON encoded and included as the
// request body.
func (c *Client) NewRequest(method, urlStr string, body interface{}) (*http.Request, error) {
func (c *Client) NewRequest(ctx context.Context, method, urlStr string, body interface{}) (*http.Request, error) {
u, err := c.baseURL.Parse(urlStr)
if err != nil {
return nil, err
Expand All @@ -130,7 +130,7 @@ func (c *Client) NewRequest(method, urlStr string, body interface{}) (*http.Requ
}
}

req, err := http.NewRequest(method, u.String(), buf)
req, err := http.NewRequestWithContext(ctx, method, u.String(), buf)
if err != nil {
return nil, err
}
Expand All @@ -151,18 +151,15 @@ func (c *Client) NewRequest(method, urlStr string, body interface{}) (*http.Requ
// interface, the raw response body will be written to v, without attempting to
// first decode it.
//
// The provided ctx must be non-nil. If it is canceled or times out,
// ctx.Err() will be returned.
func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*Response, error) {
req = req.WithContext(ctx)

// If the context is canceled or times out, ctx.Err() will be returned.
func (c *Client) Do(req *http.Request, v interface{}) (*Response, error) {
resp, err := c.client.Do(req)
if err != nil {
// If we got an error, and the context has been canceled,
// the context's error is probably more useful.
select {
case <-ctx.Done():
return nil, ctx.Err()
case <-req.Context().Done():
return nil, req.Context().Err()
default:
}

Expand Down
8 changes: 4 additions & 4 deletions bitbucket/pulls.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ func (s *PullRequestsService) List(ctx context.Context, projectKey, repo string,
return nil, nil, err
}

req, err := s.client.NewRequest("GET", u, nil)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
Expand All @@ -94,7 +94,7 @@ func (s *PullRequestsService) List(ctx context.Context, projectKey, repo string,
page := &pagedResponse{
Values: &pulls,
}
resp, err := s.client.Do(ctx, req, page)
resp, err := s.client.Do(req, page)
if err != nil {
return nil, resp, err
}
Expand All @@ -108,13 +108,13 @@ func (s *PullRequestsService) List(ctx context.Context, projectKey, repo string,
func (s *PullRequestsService) Get(ctx context.Context, projectKey, repo string, id int) (*PullRequest, *Response, error) {
u := fmt.Sprintf("projects/%s/repos/%s/pull-requests/%v", projectKey, repo, id)

req, err := s.client.NewRequest("GET", u, nil)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}

pull := new(PullRequest)
resp, err := s.client.Do(ctx, req, pull)
resp, err := s.client.Do(req, pull)
if err != nil {
return nil, resp, err
}
Expand Down
20 changes: 10 additions & 10 deletions bitbucket/repos.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ func (s *RepositoriesService) List(ctx context.Context, opts *ListRepositoriesOp
return nil, nil, err
}

req, err := s.client.NewRequest("GET", u, nil)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
Expand All @@ -105,7 +105,7 @@ func (s *RepositoriesService) List(ctx context.Context, opts *ListRepositoriesOp
page := &pagedResponse{
Values: &repos,
}
resp, err := s.client.Do(ctx, req, page)
resp, err := s.client.Do(req, page)
if err != nil {
return nil, resp, err
}
Expand All @@ -124,7 +124,7 @@ func (s *RepositoriesService) ListByProject(ctx context.Context, projectKey stri
return nil, nil, err
}

req, err := s.client.NewRequest("GET", u, nil)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
Expand All @@ -133,7 +133,7 @@ func (s *RepositoriesService) ListByProject(ctx context.Context, projectKey stri
page := &pagedResponse{
Values: &repos,
}
resp, err := s.client.Do(ctx, req, page)
resp, err := s.client.Do(req, page)
if err != nil {
return nil, resp, err
}
Expand All @@ -147,13 +147,13 @@ func (s *RepositoriesService) ListByProject(ctx context.Context, projectKey stri
func (s *RepositoriesService) Get(ctx context.Context, projectKey, repositorySlug string) (*Repository, *Response, error) {
u := fmt.Sprintf("projects/%s/repos/%s", projectKey, repositorySlug)

req, err := s.client.NewRequest("GET", u, nil)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}

repo := new(Repository)
resp, err := s.client.Do(ctx, req, repo)
resp, err := s.client.Do(req, repo)
if err != nil {
return nil, resp, err
}
Expand All @@ -180,7 +180,7 @@ func (s *RepositoriesService) ListRecent(ctx context.Context, opts *RecentReposO
return nil, nil, err
}

req, err := s.client.NewRequest("GET", u, nil)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
Expand All @@ -189,7 +189,7 @@ func (s *RepositoriesService) ListRecent(ctx context.Context, opts *RecentReposO
page := &pagedResponse{
Values: &repos,
}
resp, err := s.client.Do(ctx, req, page)
resp, err := s.client.Do(req, page)
if err != nil {
return nil, resp, err
}
Expand All @@ -203,13 +203,13 @@ func (s *RepositoriesService) ListRecent(ctx context.Context, opts *RecentReposO
func (s *RepositoriesService) GetDefaultBranch(ctx context.Context, projectKey, repositorySlug string) (*Branch, *Response, error) {
u := fmt.Sprintf("projects/%s/repos/%s/branches/default", projectKey, repositorySlug)

req, err := s.client.NewRequest("GET", u, nil)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}

b := new(Branch)
resp, err := s.client.Do(ctx, req, b)
resp, err := s.client.Do(req, b)
if err != nil {
return nil, resp, err
}
Expand Down
8 changes: 4 additions & 4 deletions bitbucket/repos_hooks.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ type WebHookListOptions struct {
func (s *RepositoriesService) CreateWebHooks(ctx context.Context, projectKey, repositorySlug string, hook *WebHook) (*WebHook, *Response, error) {
u := fmt.Sprintf("projects/%s/repos/%s/webhooks", projectKey, repositorySlug)

req, err := s.client.NewRequest("POST", u, hook)
req, err := s.client.NewRequest(ctx, "POST", u, hook)
if err != nil {
return nil, nil, err
}

v := new(WebHook)
resp, err := s.client.Do(ctx, req, v)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
Expand All @@ -52,7 +52,7 @@ func (s *RepositoriesService) ListWebHooks(ctx context.Context, projectKey, repo
return nil, nil, err
}

req, err := s.client.NewRequest("GET", u, nil)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
Expand All @@ -61,7 +61,7 @@ func (s *RepositoriesService) ListWebHooks(ctx context.Context, projectKey, repo
page := &pagedResponse{
Values: &hooks,
}
resp, err := s.client.Do(ctx, req, page)
resp, err := s.client.Do(req, page)
if err != nil {
return nil, resp, err
}
Expand Down
12 changes: 6 additions & 6 deletions bitbucket/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ type User struct {
// authenticated user slug as string.
func (s *UsersService) WhoAmI(ctx context.Context) (string, *Response, error) {
// we use slash at the beginning in this case to avoid having the URL relative to the suffix `rest/api/1.0/`
req, err := s.client.NewRequest("GET", "/plugins/servlet/applinks/whoami", nil)
req, err := s.client.NewRequest(ctx, "GET", "/plugins/servlet/applinks/whoami", nil)
if err != nil {
return "", nil, err
}

buf := new(bytes.Buffer)
resp, err := s.client.Do(ctx, req, buf)
resp, err := s.client.Do(req, buf)
if err != nil {
return "", resp, err
}
Expand All @@ -60,13 +60,13 @@ func (s *UsersService) Myself(ctx context.Context) (*User, *Response, error) {
func (s *UsersService) Get(ctx context.Context, slug string) (*User, *Response, error) {
u := fmt.Sprintf("users/%s", slug)

req, err := s.client.NewRequest("GET", u, nil)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}

user := new(User)
resp, err := s.client.Do(ctx, req, user)
resp, err := s.client.Do(req, user)
if err != nil {
return nil, resp, err
}
Expand Down Expand Up @@ -138,7 +138,7 @@ func (s *UsersService) List(ctx context.Context, opts *ListUsersOptions) ([]*Use
return nil, nil, err
}

req, err := s.client.NewRequest("GET", u, nil)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
Expand All @@ -147,7 +147,7 @@ func (s *UsersService) List(ctx context.Context, opts *ListUsersOptions) ([]*Use
page := &pagedResponse{
Values: &users,
}
resp, err := s.client.Do(ctx, req, page)
resp, err := s.client.Do(req, page)
if err != nil {
return nil, resp, err
}
Expand Down

0 comments on commit 9f3b7e1

Please sign in to comment.