diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 300c0abe86e..22613e0b448 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -103,7 +103,7 @@ }, { "ImportPath": "github.com/ghodss/yaml", - "Rev": "3bc1590d16074751993dd3b1a76e7a8d1a916a11" + "Rev": "588cb435e59ee8b6c2795482887755841ad67207" }, { "ImportPath": "github.com/golang/glog", diff --git a/Godeps/_workspace/src/github.com/ghodss/yaml/yaml.go b/Godeps/_workspace/src/github.com/ghodss/yaml/yaml.go index 2afda472e67..2f42d4dc6f0 100644 --- a/Godeps/_workspace/src/github.com/ghodss/yaml/yaml.go +++ b/Godeps/_workspace/src/github.com/ghodss/yaml/yaml.go @@ -46,7 +46,12 @@ func Unmarshal(y []byte, o interface{}) error { func JSONToYAML(j []byte) ([]byte, error) { // Convert the JSON to an object. var jsonObj interface{} - err := json.Unmarshal(j, &jsonObj) + // We are using yaml.Unmarshal here (instead of json.Unmarshal) because the + // Go JSON library doesn't try to pick the right number type (int, float, + // etc.) when unmarshling to interface{}, it just picks float64 + // universally. go-yaml does go through the effort of picking the right + // number type, so we can preserve number type throughout this process. + err := yaml.Unmarshal(j, &jsonObj) if err != nil { return nil, err } diff --git a/Godeps/_workspace/src/github.com/ghodss/yaml/yaml_test.go b/Godeps/_workspace/src/github.com/ghodss/yaml/yaml_test.go index c569ebd3d42..cfbe0b54881 100644 --- a/Godeps/_workspace/src/github.com/ghodss/yaml/yaml_test.go +++ b/Godeps/_workspace/src/github.com/ghodss/yaml/yaml_test.go @@ -1,17 +1,25 @@ package yaml import ( + "fmt" + "math" "reflect" + "strconv" "testing" ) type MarshalTest struct { A string + B int64 + // Would like to test float64, but it's not supported in go-yaml. + // (See https://github.com/go-yaml/yaml/issues/83.) + C float32 } func TestMarshal(t *testing.T) { - s := MarshalTest{"a"} - e := []byte("A: a\n") + f32String := strconv.FormatFloat(math.MaxFloat32, 'g', -1, 32) + s := MarshalTest{"a", math.MaxInt64, math.MaxFloat32} + e := []byte(fmt.Sprintf("A: a\nB: %d\nC: %s\n", math.MaxInt64, f32String)) y, err := Marshal(s) if err != nil {