mirror of
https://github.com/mikefarah/yq.git
synced 2025-01-13 11:55:38 +00:00
Added negative index capability
This commit is contained in:
parent
a06320f13c
commit
1f9a3f5f6c
@ -201,6 +201,49 @@ func TestReadArrayCmd(t *testing.T) {
|
|||||||
test.AssertResult(t, "b.e.[1].name: sam\n", result.Output)
|
test.AssertResult(t, "b.e.[1].name: sam\n", result.Output)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReadArrayBackwardsCmd(t *testing.T) {
|
||||||
|
content := `- one
|
||||||
|
- two
|
||||||
|
- three`
|
||||||
|
filename := test.WriteTempYamlFile(content)
|
||||||
|
defer test.RemoveTempYamlFile(filename)
|
||||||
|
|
||||||
|
cmd := getRootCommand()
|
||||||
|
result := test.RunCmd(cmd, fmt.Sprintf("read -p pv %s [-1]", filename))
|
||||||
|
if result.Error != nil {
|
||||||
|
t.Error(result.Error)
|
||||||
|
}
|
||||||
|
test.AssertResult(t, "'[-1]': three\n", result.Output)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestReadArrayBackwardsNegative0Cmd(t *testing.T) {
|
||||||
|
content := `- one
|
||||||
|
- two
|
||||||
|
- three`
|
||||||
|
filename := test.WriteTempYamlFile(content)
|
||||||
|
defer test.RemoveTempYamlFile(filename)
|
||||||
|
|
||||||
|
cmd := getRootCommand()
|
||||||
|
result := test.RunCmd(cmd, fmt.Sprintf("read -p pv %s [-0]", filename))
|
||||||
|
if result.Error != nil {
|
||||||
|
t.Error(result.Error)
|
||||||
|
}
|
||||||
|
test.AssertResult(t, "'[0]': one\n", result.Output)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestReadArrayBackwardsPastLimitCmd(t *testing.T) {
|
||||||
|
content := `- one
|
||||||
|
- two
|
||||||
|
- three`
|
||||||
|
filename := test.WriteTempYamlFile(content)
|
||||||
|
defer test.RemoveTempYamlFile(filename)
|
||||||
|
|
||||||
|
cmd := getRootCommand()
|
||||||
|
result := test.RunCmd(cmd, fmt.Sprintf("read -p pv %s [-4]", filename))
|
||||||
|
expectedOutput := "Error reading path in document index 0: Index [-4] out of range, array size is 3"
|
||||||
|
test.AssertResult(t, expectedOutput, result.Error.Error())
|
||||||
|
}
|
||||||
|
|
||||||
func TestReadArrayLengthCmd(t *testing.T) {
|
func TestReadArrayLengthCmd(t *testing.T) {
|
||||||
content := `- things
|
content := `- things
|
||||||
- whatever
|
- whatever
|
||||||
|
@ -260,11 +260,21 @@ func (n *navigator) appendArray(value *yaml.Node, head interface{}, tail []inter
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (n *navigator) recurseArray(value *yaml.Node, index int64, head interface{}, tail []interface{}, pathStack []interface{}) error {
|
func (n *navigator) recurseArray(value *yaml.Node, index int64, head interface{}, tail []interface{}, pathStack []interface{}) error {
|
||||||
for int64(len(value.Content)) <= index {
|
var contentLength = int64(len(value.Content))
|
||||||
|
for contentLength <= index {
|
||||||
value.Content = append(value.Content, &yaml.Node{Kind: guessKind(head, tail, 0)})
|
value.Content = append(value.Content, &yaml.Node{Kind: guessKind(head, tail, 0)})
|
||||||
}
|
}
|
||||||
|
var indexToUse = index
|
||||||
|
|
||||||
value.Content[index] = n.getOrReplace(value.Content[index], guessKind(head, tail, value.Content[index].Kind))
|
if indexToUse < 0 {
|
||||||
|
indexToUse = contentLength + indexToUse
|
||||||
|
}
|
||||||
|
|
||||||
return n.doTraverse(value.Content[index], head, tail, append(pathStack, index))
|
if indexToUse < 0 {
|
||||||
|
return fmt.Errorf("Index [%v] out of range, array size is %v", index, contentLength)
|
||||||
|
}
|
||||||
|
|
||||||
|
value.Content[indexToUse] = n.getOrReplace(value.Content[indexToUse], guessKind(head, tail, value.Content[indexToUse].Kind))
|
||||||
|
|
||||||
|
return n.doTraverse(value.Content[indexToUse], head, tail, append(pathStack, index))
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -e
|
set -e
|
||||||
wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.23.1
|
wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.24.0
|
||||||
go get golang.org/x/tools/cmd/goimports
|
go get golang.org/x/tools/cmd/goimports
|
Loading…
Reference in New Issue
Block a user