Remove support for Go 1.6 (#166)

* Move DoRequest* to godo package with stdlib context

* Use stdlib context package in place of godo context.

* Remove Go 1.6 from TravisCI configuration.

* Use stdlib context in util and tests instead of godo context.

* Add in Go 1.8, 1.9, and 1.10 to TravisCI configuration.

* Put 1.10 in quotes.
This commit is contained in:
Iheanyi Ekechukwu 2018-05-08 16:24:29 -04:00 committed by Wioletta Holownia
parent 7a32b5ce17
commit e6249e5059
29 changed files with 46 additions and 230 deletions

View File

@ -1,6 +1,8 @@
language: go
go:
- 1.6.3
- 1.7
- 1.8
- 1.9
- "1.10"
- tip

View File

@ -1,9 +1,8 @@
package godo
import (
"context"
"net/http"
"github.com/digitalocean/godo/context"
)
// AccountService is an interface for interfacing with the Account

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
const (

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"net/http"
"path"
"github.com/digitalocean/godo/context"
)
const certificatesBasePath = "/v2/certificates"

View File

@ -1,98 +0,0 @@
package context
import "time"
// A Context carries a deadline, a cancelation signal, and other values across
// API boundaries.
//
// Context's methods may be called by multiple goroutines simultaneously.
type Context interface {
// Deadline returns the time when work done on behalf of this context
// should be canceled. Deadline returns ok==false when no deadline is
// set. Successive calls to Deadline return the same results.
Deadline() (deadline time.Time, ok bool)
// Done returns a channel that's closed when work done on behalf of this
// context should be canceled. Done may return nil if this context can
// never be canceled. Successive calls to Done return the same value.
//
// WithCancel arranges for Done to be closed when cancel is called;
// WithDeadline arranges for Done to be closed when the deadline
// expires; WithTimeout arranges for Done to be closed when the timeout
// elapses.
//
// Done is provided for use in select statements:s
//
// // Stream generates values with DoSomething and sends them to out
// // until DoSomething returns an error or ctx.Done is closed.
// func Stream(ctx context.Context, out chan<- Value) error {
// for {
// v, err := DoSomething(ctx)
// if err != nil {
// return err
// }
// select {
// case <-ctx.Done():
// return ctx.Err()
// case out <- v:
// }
// }
// }
//
// See http://blog.golang.org/pipelines for more examples of how to use
// a Done channel for cancelation.
Done() <-chan struct{}
// Err returns a non-nil error value after Done is closed. Err returns
// Canceled if the context was canceled or DeadlineExceeded if the
// context's deadline passed. No other values for Err are defined.
// After Done is closed, successive calls to Err return the same value.
Err() error
// Value returns the value associated with this context for key, or nil
// if no value is associated with key. Successive calls to Value with
// the same key returns the same result.
//
// Use context values only for request-scoped data that transits
// processes and API boundaries, not for passing optional parameters to
// functions.
//
// A key identifies a specific value in a Context. Functions that wish
// to store values in Context typically allocate a key in a global
// variable then use that key as the argument to context.WithValue and
// Context.Value. A key can be any type that supports equality;
// packages should define keys as an unexported type to avoid
// collisions.
//
// Packages that define a Context key should provide type-safe accessors
// for the values stores using that key:
//
// // Package user defines a User type that's stored in Contexts.
// package user
//
// import "golang.org/x/net/context"
//
// // User is the type of value stored in the Contexts.
// type User struct {...}
//
// // key is an unexported type for keys defined in this package.
// // This prevents collisions with keys defined in other packages.
// type key int
//
// // userKey is the key for user.User values in Contexts. It is
// // unexported; clients use user.NewContext and user.FromContext
// // instead of using this key directly.
// var userKey key = 0
//
// // NewContext returns a new Context that carries value u.
// func NewContext(ctx context.Context, u *User) context.Context {
// return context.WithValue(ctx, userKey, u)
// }
//
// // FromContext returns the User value stored in ctx, if any.
// func FromContext(ctx context.Context) (*User, bool) {
// u, ok := ctx.Value(userKey).(*User)
// return u, ok
// }
Value(key interface{}) interface{}
}

View File

@ -1,39 +0,0 @@
// +build go1.7
package context
import (
"context"
"net/http"
)
// DoRequest submits an HTTP request.
func DoRequest(ctx Context, req *http.Request) (*http.Response, error) {
return DoRequestWithClient(ctx, http.DefaultClient, req)
}
// DoRequestWithClient submits an HTTP request using the specified client.
func DoRequestWithClient(
ctx Context,
client *http.Client,
req *http.Request) (*http.Response, error) {
req = req.WithContext(ctx)
return client.Do(req)
}
// TODO returns a non-nil, empty Context. Code should use context.TODO when
// it's unclear which Context to use or it is not yet available (because the
// surrounding function has not yet been extended to accept a Context
// parameter). TODO is recognized by static analysis tools that determine
// whether Contexts are propagated correctly in a program.
func TODO() Context {
return context.TODO()
}
// Background returns a non-nil, empty Context. It is never canceled, has no
// values, and has no deadline. It is typically used by the main function,
// initialization, and tests, and as the top-level Context for incoming
// requests.
func Background() Context {
return context.Background()
}

View File

@ -1,41 +0,0 @@
// +build !go1.7
package context
import (
"net/http"
"golang.org/x/net/context"
"golang.org/x/net/context/ctxhttp"
)
// DoRequest submits an HTTP request.
func DoRequest(ctx Context, req *http.Request) (*http.Response, error) {
return DoRequestWithClient(ctx, http.DefaultClient, req)
}
// DoRequestWithClient submits an HTTP request using the specified client.
func DoRequestWithClient(
ctx Context,
client *http.Client,
req *http.Request) (*http.Response, error) {
return ctxhttp.Do(ctx, client, req)
}
// TODO returns a non-nil, empty Context. Code should use context.TODO when
// it's unclear which Context to use or it is not yet available (because the
// surrounding function has not yet been extended to accept a Context
// parameter). TODO is recognized by static analysis tools that determine
// whether Contexts are propagated correctly in a program.
func TODO() Context {
return context.TODO()
}
// Background returns a non-nil, empty Context. It is never canceled, has no
// values, and has no deadline. It is typically used by the main function,
// initialization, and tests, and as the top-level Context for incoming
// requests.
func Background() Context {
return context.Background()
}

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
const domainsBasePath = "v2/domains"

View File

@ -1,11 +1,10 @@
package godo
import (
"context"
"fmt"
"net/http"
"net/url"
"github.com/digitalocean/godo/context"
)
// ActionRequest reprents DigitalOcean Action Request

View File

@ -1,12 +1,11 @@
package godo
import (
"context"
"encoding/json"
"errors"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
const dropletBasePath = "v2/droplets"

View File

@ -1,11 +1,10 @@
package godo
import (
"context"
"net/http"
"path"
"strconv"
"github.com/digitalocean/godo/context"
)
const firewallsBasePath = "/v2/firewalls"

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
const floatingBasePath = "v2/floating_ips"

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
// FloatingIPActionsService is an interface for interfacing with the

20
godo.go
View File

@ -2,6 +2,7 @@ package godo
import (
"bytes"
"context"
"encoding/json"
"fmt"
"io"
@ -14,8 +15,6 @@ import (
"github.com/google/go-querystring/query"
headerLink "github.com/tent/http-link-go"
"github.com/digitalocean/godo/context"
)
const (
@ -296,7 +295,7 @@ func (r *Response) populateRate() {
// pointed to by v, or returned as an error if an API error has occurred. If v implements the io.Writer interface,
// the raw response will be written to v, without attempting to decode it.
func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*Response, error) {
resp, err := context.DoRequestWithClient(ctx, c.client, req)
resp, err := DoRequestWithClient(ctx, c.client, req)
if err != nil {
return nil, err
}
@ -334,6 +333,21 @@ func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*Res
return response, err
}
// DoRequest submits an HTTP request.
func DoRequest(ctx context.Context, req *http.Request) (*http.Response, error) {
return DoRequestWithClient(ctx, http.DefaultClient, req)
}
// DoRequestWithClient submits an HTTP request using the specified client.
func DoRequestWithClient(
ctx context.Context,
client *http.Client,
req *http.Request) (*http.Response, error) {
req = req.WithContext(ctx)
return client.Do(req)
}
func (r *ErrorResponse) Error() string {
if r.RequestID != "" {
return fmt.Sprintf("%v %v: %d (request %q) %v",

View File

@ -1,6 +1,7 @@
package godo
import (
"context"
"fmt"
"io/ioutil"
"net/http"
@ -11,8 +12,6 @@ import (
"strings"
"testing"
"time"
"github.com/digitalocean/godo/context"
)
var (

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
// ImageActionsService is an interface for interfacing with the image actions

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
const imageBasePath = "v2/images"

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
const keysBasePath = "v2/account/keys"

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"net/url"
"strconv"
"github.com/digitalocean/godo/context"
)
// Links manages links that are returned along with a List

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
const loadBalancersBasePath = "/v2/load_balancers"

View File

@ -1,9 +1,8 @@
package godo
import (
"context"
"net/http"
"github.com/digitalocean/godo/context"
)
// RegionsService is an interface for interfacing with the regions

View File

@ -1,9 +1,8 @@
package godo
import (
"context"
"net/http"
"github.com/digitalocean/godo/context"
)
// SizesService is an interface for interfacing with the size

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
const snapshotBasePath = "v2/snapshots"

View File

@ -1,12 +1,11 @@
package godo
import (
"context"
"fmt"
"net/http"
"reflect"
"testing"
"github.com/digitalocean/godo/context"
)
func TestSnapshots_List(t *testing.T) {

View File

@ -1,12 +1,10 @@
package godo
import (
"context"
"fmt"
"time"
"net/http"
"github.com/digitalocean/godo/context"
"time"
)
const (

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
// StorageActionsService is an interface for interfacing with the

View File

@ -1,10 +1,9 @@
package godo
import (
"context"
"fmt"
"net/http"
"github.com/digitalocean/godo/context"
)
const tagsBasePath = "v2/tags"

View File

@ -1,11 +1,11 @@
package util
import (
"context"
"fmt"
"time"
"github.com/digitalocean/godo"
"github.com/digitalocean/godo/context"
)
const (

View File

@ -1,10 +1,11 @@
package util
import (
"context"
"golang.org/x/oauth2"
"github.com/digitalocean/godo"
"github.com/digitalocean/godo/context"
)
func ExampleWaitForActive() {