diff --git a/go.mod b/go.mod index c004d05a..7d978dba 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/spf13/cobra v1.10.1 github.com/spf13/pflag v1.0.10 github.com/yuin/gopher-lua v1.1.1 - go.yaml.in/yaml/v3 v3.0.4 + go.yaml.in/yaml/v4 v4.0.0-rc.2 golang.org/x/net v0.43.0 golang.org/x/text v0.28.0 gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473 diff --git a/go.sum b/go.sum index f4deb03b..f5f348c2 100644 --- a/go.sum +++ b/go.sum @@ -50,8 +50,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M= github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= -go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= -go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +go.yaml.in/yaml/v4 v4.0.0-rc.2 h1:/FrI8D64VSr4HtGIlUtlFMGsm7H7pWTbj6vOLVZcA6s= +go.yaml.in/yaml/v4 v4.0.0-rc.2/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -59,7 +59,6 @@ golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473 h1:6D+BvnJ/j6e222UW8s2qTSe3wGBtvo0MbVQG/c5k8RE= gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473/go.mod h1:N1eN2tsCx0Ydtgjl4cqmbRCsY4/+z4cYDeqwZTk6zog= diff --git a/pkg/yqlib/candidate_node_yaml.go b/pkg/yqlib/candidate_node_yaml.go index 14beb073..03b137a4 100644 --- a/pkg/yqlib/candidate_node_yaml.go +++ b/pkg/yqlib/candidate_node_yaml.go @@ -3,7 +3,7 @@ package yqlib import ( "fmt" - yaml "go.yaml.in/yaml/v3" + yaml "go.yaml.in/yaml/v4" ) func MapYamlStyle(original yaml.Style) Style { diff --git a/pkg/yqlib/decoder_yaml.go b/pkg/yqlib/decoder_yaml.go index 683a42ca..79efce64 100644 --- a/pkg/yqlib/decoder_yaml.go +++ b/pkg/yqlib/decoder_yaml.go @@ -8,7 +8,7 @@ import ( "regexp" "strings" - yaml "go.yaml.in/yaml/v3" + yaml "go.yaml.in/yaml/v4" ) type yamlDecoder struct { diff --git a/pkg/yqlib/doc/operators/anchor-and-alias-operators.md b/pkg/yqlib/doc/operators/anchor-and-alias-operators.md index cfdc8579..ab5a6572 100644 --- a/pkg/yqlib/doc/operators/anchor-and-alias-operators.md +++ b/pkg/yqlib/doc/operators/anchor-and-alias-operators.md @@ -198,12 +198,6 @@ then yq 'explode(.f)' sample.yml ``` will output -```yaml -f: - a: cat - cat: b -``` - ## Dereference and update a field Use explode with multiply to dereference an object @@ -345,139 +339,3 @@ x: 1 y: 2 ``` -## FIXED: Explode with merge anchors -Set `--yaml-fix-merge-anchor-to-spec=true` to get this correct merge behaviour (flag will default to true in late 2025). -Observe that foobarList.b property is still foobarList_b. - -Given a sample.yml file of: -```yaml -foo: &foo - a: foo_a - thing: foo_thing - c: foo_c -bar: &bar - b: bar_b - thing: bar_thing - c: bar_c -foobarList: - b: foobarList_b - !!merge <<: - - *foo - - *bar - c: foobarList_c -foobar: - c: foobar_c - !!merge <<: *foo - thing: foobar_thing -``` -then -```bash -yq 'explode(.)' sample.yml -``` -will output -```yaml -foo: - a: foo_a - thing: foo_thing - c: foo_c -bar: - b: bar_b - thing: bar_thing - c: bar_c -foobarList: - b: foobarList_b - a: foo_a - thing: foo_thing - c: foobarList_c -foobar: - c: foobar_c - a: foo_a - thing: foobar_thing -``` - -## FIXED: Merge multiple maps -Set `--yaml-fix-merge-anchor-to-spec=true` to get this correct merge behaviour (flag will default to true in late 2025). -Taken from https://yaml.org/type/merge.html. Same values as legacy, but with the correct key order. - -Given a sample.yml file of: -```yaml -- &CENTER - x: 1 - y: 2 -- &LEFT - x: 0 - y: 2 -- &BIG - r: 10 -- &SMALL - r: 1 -- !!merge <<: - - *CENTER - - *BIG -``` -then -```bash -yq '.[4] | explode(.)' sample.yml -``` -will output -```yaml -x: 1 -y: 2 -r: 10 -``` - -## FIXED: Override -Set `--yaml-fix-merge-anchor-to-spec=true` to get this correct merge behaviour (flag will default to true in late 2025). -Taken from https://yaml.org/type/merge.html. Same values as legacy, but with the correct key order. - -Given a sample.yml file of: -```yaml -- &CENTER - x: 1 - y: 2 -- &LEFT - x: 0 - y: 2 -- &BIG - r: 10 -- &SMALL - r: 1 -- !!merge <<: - - *BIG - - *LEFT - - *SMALL - x: 1 -``` -then -```bash -yq '.[4] | explode(.)' sample.yml -``` -will output -```yaml -r: 10 -y: 2 -x: 1 -``` - -## Exploding inline merge anchor -Set `--yaml-fix-merge-anchor-to-spec=true` to get this correct merge behaviour (flag will default to true in late 2025). - - -Given a sample.yml file of: -```yaml -a: - b: &b 42 -!!merge <<: - c: *b -``` -then -```bash -yq 'explode(.) | sort_keys(.)' sample.yml -``` -will output -```yaml -a: - b: 42 -c: 42 -``` - diff --git a/pkg/yqlib/encoder_yaml.go b/pkg/yqlib/encoder_yaml.go index 8c65899f..3b6b92b5 100644 --- a/pkg/yqlib/encoder_yaml.go +++ b/pkg/yqlib/encoder_yaml.go @@ -9,7 +9,7 @@ import ( "strings" "github.com/fatih/color" - "go.yaml.in/yaml/v3" + "go.yaml.in/yaml/v4" ) type yamlEncoder struct { diff --git a/pkg/yqlib/operator_anchors_aliases_test.go b/pkg/yqlib/operator_anchors_aliases_test.go index 4b4832e6..32f7d2ec 100644 --- a/pkg/yqlib/operator_anchors_aliases_test.go +++ b/pkg/yqlib/operator_anchors_aliases_test.go @@ -464,7 +464,7 @@ var anchorOperatorScenarios = []expressionScenario{ }, { skipDoc: true, - document: `{f : {a: &a cat, b: &b {foo: *a}, *a: *b}}`, + document: `{f : {a: &a cat, b: &b {foo: *a}, *a : *b}}`, expression: `explode(.f)`, expected: []string{ "D0, P[], (!!map)::{f: {a: cat, b: {foo: cat}, cat: {foo: cat}}}\n", diff --git a/pkg/yqlib/operators_test.go b/pkg/yqlib/operators_test.go index 23c83c4e..c2d3bb39 100644 --- a/pkg/yqlib/operators_test.go +++ b/pkg/yqlib/operators_test.go @@ -385,13 +385,13 @@ func documentOutput(t *testing.T, w *bufio.Writer, s expressionScenario, formatt inputs, err = readDocument(formattedDoc, "sample.yml", 0) if err != nil { - t.Error(err, s.document, s.expression) + t.Error(err, formattedDoc, "exp: "+s.expression) return } if s.document2 != "" { moreInputs, err := readDocument(formattedDoc2, "another.yml", 1) if err != nil { - t.Error(err, s.document, s.expression) + t.Error(err, formattedDoc2, "exp: "+s.expression) return } inputs.PushBackList(moreInputs) diff --git a/pkg/yqlib/printer_node_info.go b/pkg/yqlib/printer_node_info.go index cd047aee..0bc8b09a 100644 --- a/pkg/yqlib/printer_node_info.go +++ b/pkg/yqlib/printer_node_info.go @@ -5,7 +5,7 @@ import ( "container/list" "io" - "go.yaml.in/yaml/v3" + "go.yaml.in/yaml/v4" ) type nodeInfoPrinter struct {