From 95e6fd819bbef09032bf680e0f7dadd7fbf44559 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Fri, 4 Apr 2014 11:29:56 -0700 Subject: [PATCH 1/3] Revert "engine: fix engine.Env.Encode() to stop auto-guessing types." This reverts commit 76057addb255e6f14dd03c276317abc759a15a80. Docker-DCO-1.1-Signed-off-by: Michael Crosby (github: crosbymichael) --- engine/env.go | 20 +++++++++++++++++++- engine/env_test.go | 18 ------------------ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/engine/env.go b/engine/env.go index 1da3ae52e0..c43a5ec971 100644 --- a/engine/env.go +++ b/engine/env.go @@ -194,7 +194,25 @@ func (env *Env) SetAuto(k string, v interface{}) { } func (env *Env) Encode(dst io.Writer) error { - return json.NewEncoder(dst).Encode(env.Map()) + m := make(map[string]interface{}) + for k, v := range env.Map() { + var val interface{} + if err := json.Unmarshal([]byte(v), &val); err == nil { + // FIXME: we fix-convert float values to int, because + // encoding/json decodes integers to float64, but cannot encode them back. + // (See http://golang.org/src/pkg/encoding/json/decode.go#L46) + if fval, isFloat := val.(float64); isFloat { + val = int(fval) + } + m[k] = val + } else { + m[k] = v + } + } + if err := json.NewEncoder(dst).Encode(&m); err != nil { + return err + } + return nil } func (env *Env) WriteTo(dst io.Writer) (n int64, err error) { diff --git a/engine/env_test.go b/engine/env_test.go index da7d919f03..c7079ff942 100644 --- a/engine/env_test.go +++ b/engine/env_test.go @@ -95,21 +95,3 @@ func TestEnviron(t *testing.T) { t.Fatalf("bar not found in the environ") } } - -func TestEnvWriteTo(t *testing.T) { - e := &Env{} - inputKey := "Version" - inputVal := "42.1" - e.Set(inputKey, inputVal) - out := NewOutput() - e2, err := out.AddEnv() - if err != nil { - t.Fatal(err) - } - e.WriteTo(out) - result := e2.Get(inputKey) - expected := inputVal - if expected != result { - t.Fatalf("%#v\n", result) - } -} From 4c6cf9e27fd0ee6c09e836f03722d1c679b6bd29 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Fri, 4 Apr 2014 11:35:07 -0700 Subject: [PATCH 2/3] Use setjson hack again for version Docker-DCO-1.1-Signed-off-by: Michael Crosby (github: crosbymichael) --- api/server/server_unit_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/server/server_unit_test.go b/api/server/server_unit_test.go index 3fc1cea064..3dbba640ff 100644 --- a/api/server/server_unit_test.go +++ b/api/server/server_unit_test.go @@ -70,7 +70,7 @@ func TestGetVersion(t *testing.T) { eng.Register("version", func(job *engine.Job) engine.Status { called = true v := &engine.Env{} - v.Set("Version", "42.1") + v.SetJson("Version", "42.1") v.Set("ApiVersion", "1.1.1.1.1") v.Set("GoVersion", "2.42") v.Set("Os", "Linux") From 07887f65de7f909e56bf965b3875a1dd46bd3619 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Fri, 4 Apr 2014 11:38:03 -0700 Subject: [PATCH 3/3] Revert "remove hack in version" This reverts commit b2b9334f27e1a773b77241efa214af2e87439d3b. Docker-DCO-1.1-Signed-off-by: Michael Crosby (github: crosbymichael) --- server/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/server.go b/server/server.go index 55ac10fd0d..9cabf17889 100644 --- a/server/server.go +++ b/server/server.go @@ -846,7 +846,7 @@ func (srv *Server) DockerInfo(job *engine.Job) engine.Status { func (srv *Server) DockerVersion(job *engine.Job) engine.Status { v := &engine.Env{} v.Set("Version", dockerversion.VERSION) - v.Set("ApiVersion", string(api.APIVERSION)) + v.SetJson("ApiVersion", api.APIVERSION) v.Set("GitCommit", dockerversion.GITCOMMIT) v.Set("GoVersion", goruntime.Version()) v.Set("Os", goruntime.GOOS)