Fixed explode for simple anchors

This commit is contained in:
Mike Farah 2020-02-07 09:08:52 +11:00
parent b116f40348
commit 108b5cb093
3 changed files with 18 additions and 4 deletions

View File

@ -293,6 +293,20 @@ func TestReadMergeAnchorsExplodeJsonCmd(t *testing.T) {
test.AssertResult(t, expectedOutput, result.Output) test.AssertResult(t, expectedOutput, result.Output)
} }
func TestReadMergeAnchorsExplodeSimpleCmd(t *testing.T) {
cmd := getRootCommand()
result := test.RunCmd(cmd, "read -X ../examples/simple-anchor.yaml")
if result.Error != nil {
t.Error(result.Error)
}
expectedOutput := `foo:
a: 1
foobar:
a: 1
`
test.AssertResult(t, expectedOutput, result.Output)
}
func TestReadMergeAnchorsExplodeCmd(t *testing.T) { func TestReadMergeAnchorsExplodeCmd(t *testing.T) {
cmd := getRootCommand() cmd := getRootCommand()
result := test.RunCmd(cmd, "read -X ../examples/merge-anchor.yaml") result := test.RunCmd(cmd, "read -X ../examples/merge-anchor.yaml")

View File

@ -1,4 +1,5 @@
foo: &foo foo: &foo
a: 1 a: 1
foobar: *foo foobar:
<<: *foo

View File

@ -98,7 +98,6 @@ func (n *navigator) recurseMap(value *yaml.Node, head string, tail []string, pat
log.Debug("recurseMap: visitMatchingEntries for %v", contents[indexInMap].Value) log.Debug("recurseMap: visitMatchingEntries for %v", contents[indexInMap].Value)
n.navigationStrategy.DebugVisitedNodes() n.navigationStrategy.DebugVisitedNodes()
newPathStack := append(pathStack, contents[indexInMap].Value) newPathStack := append(pathStack, contents[indexInMap].Value)
n.navigationStrategy.DebugVisitedNodes()
log.Debug("should I traverse? head: %v, path: %v", head, pathStackToString(newPathStack)) log.Debug("should I traverse? head: %v, path: %v", head, pathStackToString(newPathStack))
DebugNode(value) DebugNode(value)
if n.navigationStrategy.ShouldTraverse(NewNodeContext(contents[indexInMap+1], head, tail, newPathStack), contents[indexInMap].Value) { if n.navigationStrategy.ShouldTraverse(NewNodeContext(contents[indexInMap+1], head, tail, newPathStack), contents[indexInMap].Value) {
@ -172,10 +171,10 @@ func (n *navigator) visitAliases(contents []*yaml.Node, head string, tail []stri
// a node can either be // a node can either be
// an alias to one other node (e.g. <<: *blah) // an alias to one other node (e.g. <<: *blah)
// or a sequence of aliases (e.g. <<: [*blah, *foo]) // or a sequence of aliases (e.g. <<: [*blah, *foo])
log.Debug("checking for aliases") log.Debug("checking for aliases, head: %v, pathstack: %v", head, pathStackToString(pathStack))
for index := len(contents) - 2; index >= 0; index = index - 2 { for index := len(contents) - 2; index >= 0; index = index - 2 {
if contents[index+1].Kind == yaml.AliasNode { if contents[index+1].Kind == yaml.AliasNode && contents[index].Value == "<<" {
valueNode := contents[index+1] valueNode := contents[index+1]
log.Debug("found an alias") log.Debug("found an alias")
DebugNode(contents[index]) DebugNode(contents[index])