From 48eeb2a9df30df08a7d42ae2462f6c47d16cece2 Mon Sep 17 00:00:00 2001 From: Mike Farah Date: Sat, 22 May 2021 08:22:45 +1000 Subject: [PATCH] Fixes update-assign with collect object issue #830 --- pkg/yqlib/operator_collect_object.go | 5 ++++- pkg/yqlib/operator_collect_object_test.go | 24 +++++++++++++++++++++++ pkg/yqlib/operator_collect_test.go | 8 ++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/pkg/yqlib/operator_collect_object.go b/pkg/yqlib/operator_collect_object.go index 4aa5f63..75c4782 100644 --- a/pkg/yqlib/operator_collect_object.go +++ b/pkg/yqlib/operator_collect_object.go @@ -17,9 +17,12 @@ import ( ... */ -func collectObjectOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { +func collectObjectOperator(d *dataTreeNavigator, originalContext Context, expressionNode *ExpressionNode) (Context, error) { log.Debugf("-- collectObjectOperation") + context := originalContext.Clone() + context.DontAutoCreate = false + if context.MatchingNodes.Len() == 0 { node := &yaml.Node{Kind: yaml.MappingNode, Tag: "!!map", Value: "{}"} candidate := &CandidateNode{Node: node} diff --git a/pkg/yqlib/operator_collect_object_test.go b/pkg/yqlib/operator_collect_object_test.go index d546e9c..6489121 100644 --- a/pkg/yqlib/operator_collect_object_test.go +++ b/pkg/yqlib/operator_collect_object_test.go @@ -5,6 +5,30 @@ import ( ) var collectObjectOperatorScenarios = []expressionScenario{ + { + skipDoc: true, + document: "a: []", + expression: `.a += [{"key": "att2", "value": "val2"}]`, + expected: []string{ + "D0, P[], (doc)::a: [{key: att2, value: val2}]\n", + }, + }, + { + skipDoc: true, + document: "", + expression: `.a += {"key": "att2", "value": "val2"}`, + expected: []string{ + "D0, P[], ()::a:\n key: att2\n value: val2\n", + }, + }, + { + skipDoc: true, + document: "", + expression: `.a += [0]`, + expected: []string{ + "D0, P[], ()::a:\n - 0\n", + }, + }, { description: `Collect empty object`, document: ``, diff --git a/pkg/yqlib/operator_collect_test.go b/pkg/yqlib/operator_collect_test.go index f4a18e6..b5c2c54 100644 --- a/pkg/yqlib/operator_collect_test.go +++ b/pkg/yqlib/operator_collect_test.go @@ -5,6 +5,14 @@ import ( ) var collectOperatorScenarios = []expressionScenario{ + { + skipDoc: true, + document: ``, + expression: `.a += [0]`, + expected: []string{ + "D0, P[], ()::a:\n - 0\n", + }, + }, { description: "Collect empty", document: ``,