diff --git a/cmd/commands_test.go b/cmd/commands_test.go index 78432460..27b4245c 100644 --- a/cmd/commands_test.go +++ b/cmd/commands_test.go @@ -91,7 +91,7 @@ func TestReadCmd(t *testing.T) { if result.Error != nil { t.Error(result.Error) } - test.AssertResult(t, "2", result.Output) + test.AssertResult(t, "2\n", result.Output) } func TestCompareCmd(t *testing.T) { @@ -157,7 +157,7 @@ func TestReadWithAdvancedFilterCmd(t *testing.T) { if result.Error != nil { t.Error(result.Error) } - test.AssertResult(t, "4", result.Output) + test.AssertResult(t, "4\n", result.Output) } func TestReadWithAdvancedFilterMapCmd(t *testing.T) { @@ -226,7 +226,7 @@ func TestReadWithKeyCmd(t *testing.T) { if result.Error != nil { t.Error(result.Error) } - test.AssertResult(t, "b.c", result.Output) + test.AssertResult(t, "b.c\n", result.Output) } func TestReadAnchorsCmd(t *testing.T) { @@ -235,7 +235,7 @@ func TestReadAnchorsCmd(t *testing.T) { if result.Error != nil { t.Error(result.Error) } - test.AssertResult(t, "1", result.Output) + test.AssertResult(t, "1\n", result.Output) } func TestReadAnchorsWithKeyAndValueCmd(t *testing.T) { @@ -279,7 +279,7 @@ func TestReadMergeAnchorsOriginalCmd(t *testing.T) { if result.Error != nil { t.Error(result.Error) } - test.AssertResult(t, "original", result.Output) + test.AssertResult(t, "original\n", result.Output) } func TestReadMergeAnchorsExplodeJsonCmd(t *testing.T) { @@ -318,7 +318,7 @@ pointer: *value-pointer` if result.Error != nil { t.Error(result.Error) } - expectedOutput := `the value` + expectedOutput := "the value\n" test.AssertResult(t, expectedOutput, result.Output) } @@ -378,7 +378,7 @@ pointer: *value-pointer` if result.Error != nil { t.Error(result.Error) } - expectedOutput := `the value` + expectedOutput := "the value\n" test.AssertResult(t, expectedOutput, result.Output) } @@ -433,7 +433,7 @@ func TestReadMergeAnchorsOverrideCmd(t *testing.T) { if result.Error != nil { t.Error(result.Error) } - test.AssertResult(t, "ice", result.Output) + test.AssertResult(t, "ice\n", result.Output) } func TestReadMergeAnchorsPrefixMatchCmd(t *testing.T) { @@ -455,7 +455,7 @@ func TestReadMergeAnchorsListOriginalCmd(t *testing.T) { if result.Error != nil { t.Error(result.Error) } - test.AssertResult(t, "original", result.Output) + test.AssertResult(t, "original\n", result.Output) } func TestReadMergeAnchorsListOverrideInListCmd(t *testing.T) { @@ -464,7 +464,7 @@ func TestReadMergeAnchorsListOverrideInListCmd(t *testing.T) { if result.Error != nil { t.Error(result.Error) } - test.AssertResult(t, "coconut", result.Output) + test.AssertResult(t, "coconut\n", result.Output) } func TestReadMergeAnchorsListOverrideCmd(t *testing.T) { @@ -473,7 +473,7 @@ func TestReadMergeAnchorsListOverrideCmd(t *testing.T) { if result.Error != nil { t.Error(result.Error) } - test.AssertResult(t, "newbar", result.Output) + test.AssertResult(t, "newbar\n", result.Output) } func TestReadInvalidDocumentIndexCmd(t *testing.T) { @@ -515,7 +515,7 @@ func TestReadMultiCmd(t *testing.T) { if result.Error != nil { t.Error(result.Error) } - test.AssertResult(t, "here", result.Output) + test.AssertResult(t, "here\n", result.Output) } func TestReadMultiWithKeyAndValueCmd(t *testing.T) { @@ -536,7 +536,8 @@ func TestReadMultiAllCmd(t *testing.T) { test.AssertResult(t, `first document second document -third document`, result.Output) +third document +`, result.Output) } func TestReadMultiAllWithKeyAndValueCmd(t *testing.T) { @@ -558,7 +559,7 @@ func TestReadCmd_ArrayYaml(t *testing.T) { if result.Error != nil { t.Error(result.Error) } - test.AssertResult(t, "false", result.Output) + test.AssertResult(t, "false\n", result.Output) } func TestReadEmptyContentCmd(t *testing.T) { @@ -740,7 +741,8 @@ func TestReadCmd_ArrayYaml_SplatWithKeyCmd(t *testing.T) { t.Error(result.Error) } expectedOutput := `[0] -[1]` +[1] +` test.AssertResult(t, expectedOutput, result.Output) } @@ -751,7 +753,8 @@ func TestReadCmd_ArrayYaml_SplatKey(t *testing.T) { t.Error(result.Error) } expectedOutput := `false -true` +true +` test.AssertResult(t, expectedOutput, result.Output) } @@ -950,7 +953,8 @@ b: } expectedOutput := `more things -more things also` +more things also +` test.AssertResult(t, expectedOutput, result.Output) } @@ -1005,7 +1009,8 @@ b: } expectedOutput := `b.there.c -b.there2.c` +b.there2.c +` test.AssertResult(t, expectedOutput, result.Output) } diff --git a/cmd/utils.go b/cmd/utils.go index 3f5c3959..cb753056 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -79,7 +79,7 @@ func appendDocument(originalMatchingNodes []*yqlib.NodeContext, dataBucket yaml. func printValue(node *yaml.Node, writer io.Writer) error { if node.Kind == yaml.ScalarNode { - _, errorWriting := writer.Write([]byte(node.Value)) + _, errorWriting := writer.Write([]byte(node.Value + "\n")) return errorWriting } return printNode(node, writer) @@ -160,19 +160,13 @@ func printResults(matchingNodes []*yqlib.NodeContext, writer io.Writer) error { return nil } var errorWriting error - for index, mappedDoc := range matchingNodes { + for _, mappedDoc := range matchingNodes { switch printMode { case "p": - errorWriting = writeString(bufferedWriter, lib.PathStackToString(mappedDoc.PathStack)) + errorWriting = writeString(bufferedWriter, lib.PathStackToString(mappedDoc.PathStack)+"\n") if errorWriting != nil { return errorWriting } - if index < len(matchingNodes)-1 { - errorWriting = writeString(bufferedWriter, "\n") - if errorWriting != nil { - return errorWriting - } - } case "pv", "vp": // put it into a node and print that. var parentNode = yaml.Node{Kind: yaml.MappingNode} @@ -186,14 +180,6 @@ func printResults(matchingNodes []*yqlib.NodeContext, writer io.Writer) error { if err := printValue(mappedDoc.Node, bufferedWriter); err != nil { return err } - // Printing our Scalars does not print a new line at the end - // we only want to do that if there are more values (so users can easily script extraction of values in the yaml) - if index < len(matchingNodes)-1 && mappedDoc.Node.Kind == yaml.ScalarNode { - errorWriting = writeString(bufferedWriter, "\n") - if errorWriting != nil { - return errorWriting - } - } } } diff --git a/cmd/version.go b/cmd/version.go index af686638..3d21313d 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -11,7 +11,7 @@ var ( GitDescribe string // Version is main version number that is being run at the moment. - Version = "3.1.1" + Version = "3.1.2" // VersionPrerelease is a pre-release marker for the version. If this is "" (empty string) // then it means that it is a final release. Otherwise, this is a pre-release diff --git a/go.mod b/go.mod index 36e4562a..9e300b08 100644 --- a/go.mod +++ b/go.mod @@ -20,8 +20,7 @@ require ( golang.org/x/tools v0.0.0-20191213221258-04c2e8eff935 // indirect gopkg.in/imdario/mergo.v0 v0.3.7 // indirect gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473 - gopkg.in/yaml.v2 v2.2.8 // indirect - gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2 + gopkg.in/yaml.v3 v3.0.0-20200121175148-a6ecf24a6d71 ) go 1.13 diff --git a/go.sum b/go.sum index b7d0ffb7..443661ea 100644 --- a/go.sum +++ b/go.sum @@ -145,4 +145,6 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2 h1:XZx7nhd5GMaZpmDaEHFVafUZC7ya0fuo7cSJ3UCKYmM= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200121175148-a6ecf24a6d71 h1:Xe2gvTZUJpsvOWUnvmL/tmhVBZUmHSvLbMjRj6NUUKo= +gopkg.in/yaml.v3 v3.0.0-20200121175148-a6ecf24a6d71/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 4bb35cd7..7dd67ecd 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -1,5 +1,5 @@ name: yq -version: '3.1.1' +version: '3.1.2' summary: A lightweight and portable command-line YAML processor description: | The aim of the project is to be the jq or sed of yaml files.