diff --git a/api/client/cli.go b/api/client/cli.go index 6c673da42f..273174a250 100644 --- a/api/client/cli.go +++ b/api/client/cli.go @@ -142,7 +142,7 @@ func NewDockerCli(in io.ReadCloser, out, err io.Writer, clientFlags *cli.ClientF } customHeaders["User-Agent"] = clientUserAgent() - verStr := api.DefaultVersion.String() + verStr := api.DefaultVersion if tmpStr := os.Getenv("DOCKER_API_VERSION"); tmpStr != "" { verStr = tmpStr } diff --git a/api/client/cp.go b/api/client/cp.go index 6100560231..571cb748e7 100644 --- a/api/client/cp.go +++ b/api/client/cp.go @@ -288,11 +288,8 @@ func (cli *DockerCli) copyToContainer(srcPath, dstContainer, dstPath string, cpP } options := types.CopyToContainerOptions{ - ContainerID: dstContainer, - Path: resolvedDstPath, - Content: content, AllowOverwriteDirWithFile: false, } - return cli.client.CopyToContainer(context.Background(), options) + return cli.client.CopyToContainer(context.Background(), dstContainer, resolvedDstPath, content, options) } diff --git a/api/common.go b/api/common.go index 7f10bdf14c..f83097c087 100644 --- a/api/common.go +++ b/api/common.go @@ -10,7 +10,6 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/docker/pkg/system" - "github.com/docker/docker/pkg/version" "github.com/docker/engine-api/types" "github.com/docker/libtrust" ) @@ -18,10 +17,10 @@ import ( // Common constants for daemon and client. const ( // Version of Current REST API - DefaultVersion version.Version = "1.24" + DefaultVersion string = "1.24" // MinVersion represents Minimum REST API version supported - MinVersion version.Version = "1.12" + MinVersion string = "1.12" // NoBaseImageSpecifier is the symbol used by the FROM // command to specify that no base image is to be used. diff --git a/api/server/httputils/httputils.go b/api/server/httputils/httputils.go index 59ee0308b8..e86405f170 100644 --- a/api/server/httputils/httputils.go +++ b/api/server/httputils/httputils.go @@ -10,7 +10,6 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api" - "github.com/docker/docker/pkg/version" ) // APIVersionKey is the client's requested API version. @@ -95,7 +94,7 @@ func WriteJSON(w http.ResponseWriter, code int, v interface{}) error { // VersionFromContext returns an API version from the context using APIVersionKey. // It panics if the context value does not have version.Version type. -func VersionFromContext(ctx context.Context) (ver version.Version) { +func VersionFromContext(ctx context.Context) (ver string) { if ctx == nil { return } @@ -103,5 +102,5 @@ func VersionFromContext(ctx context.Context) (ver version.Version) { if val == nil { return } - return val.(version.Version) + return val.(string) } diff --git a/api/server/middleware/user_agent.go b/api/server/middleware/user_agent.go index 7093830fe3..87c8cb83e1 100644 --- a/api/server/middleware/user_agent.go +++ b/api/server/middleware/user_agent.go @@ -6,19 +6,19 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/docker/api/server/httputils" - "github.com/docker/docker/pkg/version" + "github.com/docker/engine-api/types/versions" "golang.org/x/net/context" ) // UserAgentMiddleware is a middleware that // validates the client user-agent. type UserAgentMiddleware struct { - serverVersion version.Version + serverVersion string } // NewUserAgentMiddleware creates a new UserAgentMiddleware // with the server version. -func NewUserAgentMiddleware(s version.Version) UserAgentMiddleware { +func NewUserAgentMiddleware(s string) UserAgentMiddleware { return UserAgentMiddleware{ serverVersion: s, } @@ -38,7 +38,7 @@ func (u UserAgentMiddleware) WrapHandler(handler func(ctx context.Context, w htt userAgent[1] = strings.Split(userAgent[1], " ")[0] } - if len(userAgent) == 2 && !u.serverVersion.Equal(version.Version(userAgent[1])) { + if len(userAgent) == 2 && !versions.Equal(u.serverVersion, userAgent[1]) { logrus.Debugf("Client and server don't have the same version (client: %s, server: %s)", userAgent[1], u.serverVersion) } } diff --git a/api/server/middleware/version.go b/api/server/middleware/version.go index d09c85a0fa..eb7bbf3a3e 100644 --- a/api/server/middleware/version.go +++ b/api/server/middleware/version.go @@ -5,7 +5,7 @@ import ( "net/http" "runtime" - "github.com/docker/docker/pkg/version" + "github.com/docker/engine-api/types/versions" "golang.org/x/net/context" ) @@ -20,14 +20,14 @@ func (badRequestError) HTTPErrorStatusCode() int { // VersionMiddleware is a middleware that // validates the client and server versions. type VersionMiddleware struct { - serverVersion version.Version - defaultVersion version.Version - minVersion version.Version + serverVersion string + defaultVersion string + minVersion string } // NewVersionMiddleware creates a new VersionMiddleware // with the default versions. -func NewVersionMiddleware(s, d, m version.Version) VersionMiddleware { +func NewVersionMiddleware(s, d, m string) VersionMiddleware { return VersionMiddleware{ serverVersion: s, defaultVersion: d, @@ -38,15 +38,15 @@ func NewVersionMiddleware(s, d, m version.Version) VersionMiddleware { // WrapHandler returns a new handler function wrapping the previous one in the request chain. func (v VersionMiddleware) WrapHandler(handler func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error) func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { return func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { - apiVersion := version.Version(vars["version"]) + apiVersion := vars["version"] if apiVersion == "" { apiVersion = v.defaultVersion } - if apiVersion.GreaterThan(v.defaultVersion) { + if versions.GreaterThan(apiVersion, v.defaultVersion) { return badRequestError{fmt.Errorf("client is newer than server (client API version: %s, server API version: %s)", apiVersion, v.defaultVersion)} } - if apiVersion.LessThan(v.minVersion) { + if versions.LessThan(apiVersion, v.minVersion) { return badRequestError{fmt.Errorf("client version %s is too old. Minimum supported API version is %s, please upgrade your client to a newer version", apiVersion, v.minVersion)} } diff --git a/api/server/middleware/version_test.go b/api/server/middleware/version_test.go index 89217b0387..90dee7138c 100644 --- a/api/server/middleware/version_test.go +++ b/api/server/middleware/version_test.go @@ -7,7 +7,6 @@ import ( "testing" "github.com/docker/docker/api/server/httputils" - "github.com/docker/docker/pkg/version" "golang.org/x/net/context" ) @@ -19,8 +18,8 @@ func TestVersionMiddleware(t *testing.T) { return nil } - defaultVersion := version.Version("1.10.0") - minVersion := version.Version("1.2.0") + defaultVersion := "1.10.0" + minVersion := "1.2.0" m := NewVersionMiddleware(defaultVersion, defaultVersion, minVersion) h := m.WrapHandler(handler) @@ -40,8 +39,8 @@ func TestVersionMiddlewareWithErrors(t *testing.T) { return nil } - defaultVersion := version.Version("1.10.0") - minVersion := version.Version("1.2.0") + defaultVersion := "1.10.0" + minVersion := "1.2.0" m := NewVersionMiddleware(defaultVersion, defaultVersion, minVersion) h := m.WrapHandler(handler) diff --git a/api/server/router/build/build_routes.go b/api/server/router/build/build_routes.go index 84610126ac..b5a7c28b69 100644 --- a/api/server/router/build/build_routes.go +++ b/api/server/router/build/build_routes.go @@ -19,6 +19,7 @@ import ( "github.com/docker/docker/pkg/streamformatter" "github.com/docker/engine-api/types" "github.com/docker/engine-api/types/container" + "github.com/docker/engine-api/types/versions" "github.com/docker/go-units" "golang.org/x/net/context" ) @@ -26,14 +27,14 @@ import ( func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBuildOptions, error) { version := httputils.VersionFromContext(ctx) options := &types.ImageBuildOptions{} - if httputils.BoolValue(r, "forcerm") && version.GreaterThanOrEqualTo("1.12") { + if httputils.BoolValue(r, "forcerm") && versions.GreaterThanOrEqualTo(version, "1.12") { options.Remove = true - } else if r.FormValue("rm") == "" && version.GreaterThanOrEqualTo("1.12") { + } else if r.FormValue("rm") == "" && versions.GreaterThanOrEqualTo(version, "1.12") { options.Remove = true } else { options.Remove = httputils.BoolValue(r, "rm") } - if httputils.BoolValue(r, "pull") && version.GreaterThanOrEqualTo("1.16") { + if httputils.BoolValue(r, "pull") && versions.GreaterThanOrEqualTo(version, "1.16") { options.PullParent = true } diff --git a/api/server/router/container/backend.go b/api/server/router/container/backend.go index 67d2cb2d47..c7eafa770f 100644 --- a/api/server/router/container/backend.go +++ b/api/server/router/container/backend.go @@ -8,7 +8,6 @@ import ( "github.com/docker/docker/api/types/backend" "github.com/docker/docker/pkg/archive" - "github.com/docker/docker/pkg/version" "github.com/docker/engine-api/types" "github.com/docker/engine-api/types/container" ) @@ -50,7 +49,7 @@ type stateBackend interface { // monitorBackend includes functions to implement to provide containers monitoring functionality. type monitorBackend interface { ContainerChanges(name string) ([]archive.Change, error) - ContainerInspect(name string, size bool, version version.Version) (interface{}, error) + ContainerInspect(name string, size bool, version string) (interface{}, error) ContainerLogs(ctx context.Context, name string, config *backend.ContainerLogsConfig, started chan struct{}) error ContainerStats(ctx context.Context, name string, config *backend.ContainerStatsConfig) error ContainerTop(name string, psArgs string) (*types.ContainerProcessList, error) diff --git a/api/server/router/container/container_routes.go b/api/server/router/container/container_routes.go index 114c71271e..a343d64c0b 100644 --- a/api/server/router/container/container_routes.go +++ b/api/server/router/container/container_routes.go @@ -18,6 +18,7 @@ import ( "github.com/docker/engine-api/types" "github.com/docker/engine-api/types/container" "github.com/docker/engine-api/types/filters" + "github.com/docker/engine-api/types/versions" "golang.org/x/net/context" "golang.org/x/net/websocket" ) @@ -195,7 +196,7 @@ func (s *containerRouter) postContainersKill(ctx context.Context, w http.Respons // Return error if the container is not running and the api is >= 1.20 // to keep backwards compatibility. version := httputils.VersionFromContext(ctx) - if version.GreaterThanOrEqualTo("1.20") || !isStopped { + if versions.GreaterThanOrEqualTo(version, "1.20") || !isStopped { return fmt.Errorf("Cannot kill container %s: %v", name, err) } } @@ -341,7 +342,7 @@ func (s *containerRouter) postContainersCreate(ctx context.Context, w http.Respo return err } version := httputils.VersionFromContext(ctx) - adjustCPUShares := version.LessThan("1.19") + adjustCPUShares := versions.LessThan(version, "1.19") ccr, err := s.backend.ContainerCreate(types.ContainerCreateConfig{ Name: name, diff --git a/api/server/router/container/exec.go b/api/server/router/container/exec.go index c077141ac5..c5702a9dc1 100644 --- a/api/server/router/container/exec.go +++ b/api/server/router/container/exec.go @@ -11,6 +11,7 @@ import ( "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/pkg/stdcopy" "github.com/docker/engine-api/types" + "github.com/docker/engine-api/types/versions" "golang.org/x/net/context" ) @@ -60,7 +61,7 @@ func (s *containerRouter) postContainerExecStart(ctx context.Context, w http.Res } version := httputils.VersionFromContext(ctx) - if version.GreaterThan("1.21") { + if versions.GreaterThan(version, "1.21") { if err := httputils.CheckForJSON(r); err != nil { return err } diff --git a/api/server/router/image/image_routes.go b/api/server/router/image/image_routes.go index 21e1440045..f21c22835b 100644 --- a/api/server/router/image/image_routes.go +++ b/api/server/router/image/image_routes.go @@ -16,6 +16,7 @@ import ( "github.com/docker/docker/pkg/streamformatter" "github.com/docker/engine-api/types" "github.com/docker/engine-api/types/container" + "github.com/docker/engine-api/types/versions" "golang.org/x/net/context" ) @@ -32,7 +33,7 @@ func (s *imageRouter) postCommit(ctx context.Context, w http.ResponseWriter, r * pause := httputils.BoolValue(r, "pause") version := httputils.VersionFromContext(ctx) - if r.FormValue("pause") == "" && version.GreaterThanOrEqualTo("1.13") { + if r.FormValue("pause") == "" && versions.GreaterThanOrEqualTo(version, "1.13") { pause = true } diff --git a/api/server/router/system/system_routes.go b/api/server/router/system/system_routes.go index 901d7f606e..f921de303b 100644 --- a/api/server/router/system/system_routes.go +++ b/api/server/router/system/system_routes.go @@ -39,7 +39,7 @@ func (s *systemRouter) getInfo(ctx context.Context, w http.ResponseWriter, r *ht func (s *systemRouter) getVersion(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { info := s.backend.SystemVersion() - info.APIVersion = api.DefaultVersion.String() + info.APIVersion = api.DefaultVersion return httputils.WriteJSON(w, http.StatusOK, info) } diff --git a/api/server/server_test.go b/api/server/server_test.go index 583283f569..13c28eab78 100644 --- a/api/server/server_test.go +++ b/api/server/server_test.go @@ -9,7 +9,6 @@ import ( "github.com/docker/docker/api" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/server/middleware" - "github.com/docker/docker/pkg/version" "golang.org/x/net/context" ) @@ -22,7 +21,7 @@ func TestMiddlewares(t *testing.T) { cfg: cfg, } - srv.UseMiddleware(middleware.NewVersionMiddleware(version.Version("0.1omega2"), api.DefaultVersion, api.MinVersion)) + srv.UseMiddleware(middleware.NewVersionMiddleware("0.1omega2", api.DefaultVersion, api.MinVersion)) req, _ := http.NewRequest("GET", "/containers/json", nil) resp := httptest.NewRecorder() diff --git a/daemon/inspect.go b/daemon/inspect.go index 7dc99dcad0..6952985e44 100644 --- a/daemon/inspect.go +++ b/daemon/inspect.go @@ -7,20 +7,20 @@ import ( "github.com/docker/docker/api/types/backend" "github.com/docker/docker/container" "github.com/docker/docker/daemon/network" - "github.com/docker/docker/pkg/version" "github.com/docker/engine-api/types" networktypes "github.com/docker/engine-api/types/network" + "github.com/docker/engine-api/types/versions" "github.com/docker/engine-api/types/versions/v1p20" ) // ContainerInspect returns low-level information about a // container. Returns an error if the container cannot be found, or if // there is an error getting the data. -func (daemon *Daemon) ContainerInspect(name string, size bool, version version.Version) (interface{}, error) { +func (daemon *Daemon) ContainerInspect(name string, size bool, version string) (interface{}, error) { switch { - case version.LessThan("1.20"): + case versions.LessThan(version, "1.20"): return daemon.containerInspectPre120(name) - case version.Equal("1.20"): + case versions.Equal(version, "1.20"): return daemon.containerInspect120(name) } return daemon.containerInspectCurrent(name, size) diff --git a/daemon/stats.go b/daemon/stats.go index 7ebae41dc7..5f25bf1d61 100644 --- a/daemon/stats.go +++ b/daemon/stats.go @@ -9,8 +9,8 @@ import ( "github.com/docker/docker/api/types/backend" "github.com/docker/docker/pkg/ioutils" - "github.com/docker/docker/pkg/version" "github.com/docker/engine-api/types" + "github.com/docker/engine-api/types/versions" "github.com/docker/engine-api/types/versions/v1p20" ) @@ -21,7 +21,7 @@ func (daemon *Daemon) ContainerStats(ctx context.Context, prefixOrName string, c return errors.New("Windows does not support stats") } // Remote API version (used for backwards compatibility) - apiVersion := version.Version(config.Version) + apiVersion := config.Version container, err := daemon.GetContainer(prefixOrName) if err != nil { @@ -65,7 +65,7 @@ func (daemon *Daemon) ContainerStats(ctx context.Context, prefixOrName string, c var statsJSON interface{} statsJSONPost120 := getStatJSON(v) - if apiVersion.LessThan("1.21") { + if versions.LessThan(apiVersion, "1.21") { var ( rxBytes uint64 rxPackets uint64 diff --git a/docker/daemon.go b/docker/daemon.go index 8a2aa1baa5..1606ca1b28 100644 --- a/docker/daemon.go +++ b/docker/daemon.go @@ -39,7 +39,6 @@ import ( "github.com/docker/docker/pkg/pidfile" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/pkg/system" - "github.com/docker/docker/pkg/version" "github.com/docker/docker/registry" "github.com/docker/docker/runconfig" "github.com/docker/docker/utils" @@ -440,7 +439,7 @@ func initRouter(s *apiserver.Server, d *daemon.Daemon) { } func (cli *DaemonCli) initMiddlewares(s *apiserver.Server, cfg *apiserver.Config) { - v := version.Version(cfg.Version) + v := cfg.Version vm := middleware.NewVersionMiddleware(v, api.DefaultVersion, api.MinVersion) s.UseMiddleware(vm) diff --git a/image/v1/imagev1.go b/image/v1/imagev1.go index 0e2e72bda5..b7a9529ed8 100644 --- a/image/v1/imagev1.go +++ b/image/v1/imagev1.go @@ -11,7 +11,7 @@ import ( "github.com/docker/distribution/digest" "github.com/docker/docker/image" "github.com/docker/docker/layer" - "github.com/docker/docker/pkg/version" + "github.com/docker/engine-api/types/versions" ) var validHex = regexp.MustCompile(`^([a-f0-9]{64})$`) @@ -19,7 +19,7 @@ var validHex = regexp.MustCompile(`^([a-f0-9]{64})$`) // noFallbackMinVersion is the minimum version for which v1compatibility // information will not be marshaled through the Image struct to remove // blank fields. -var noFallbackMinVersion = version.Version("1.8.3") +var noFallbackMinVersion = "1.8.3" // HistoryFromConfig creates a History struct from v1 configuration JSON func HistoryFromConfig(imageJSON []byte, emptyLayer bool) (image.History, error) { @@ -77,7 +77,7 @@ func MakeConfigFromV1Config(imageJSON []byte, rootfs *image.RootFS, history []im return nil, err } - useFallback := version.Version(dver.DockerVersion).LessThan(noFallbackMinVersion) + useFallback := versions.LessThan(dver.DockerVersion, noFallbackMinVersion) if useFallback { var v1Image image.V1Image diff --git a/integration-cli/docker_api_stats_test.go b/integration-cli/docker_api_stats_test.go index 7639d95048..0e2aa0083a 100644 --- a/integration-cli/docker_api_stats_test.go +++ b/integration-cli/docker_api_stats_test.go @@ -11,8 +11,8 @@ import ( "time" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/docker/pkg/version" "github.com/docker/engine-api/types" + "github.com/docker/engine-api/types/versions" "github.com/go-check/check" ) @@ -136,7 +136,7 @@ func (s *DockerSuite) TestApiStatsNetworkStatsVersioning(c *check.C) { for i := 17; i <= 21; i++ { apiVersion := fmt.Sprintf("v1.%d", i) statsJSONBlob := getVersionedStats(c, id, apiVersion) - if version.Version(apiVersion).LessThan("v1.21") { + if versions.LessThan(apiVersion, "v1.21") { c.Assert(jsonBlobHasLTv121NetworkStats(statsJSONBlob), checker.Equals, true, check.Commentf("Stats JSON blob from API %s %#v does not look like a