From 95e6fd819bbef09032bf680e0f7dadd7fbf44559 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Fri, 4 Apr 2014 11:29:56 -0700 Subject: [PATCH] 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) - } -}