1
0
mirror of https://github.com/taigrr/yq synced 2025-01-18 04:53:17 -08:00

wip - array length

This commit is contained in:
Mike Farah 2020-02-26 10:44:58 +11:00
parent da398765b8
commit 1a97b27041
3 changed files with 40 additions and 4 deletions

View File

@ -7,6 +7,8 @@ import (
var customTag = "" var customTag = ""
var printMode = "v" var printMode = "v"
var resultsAsArray = false
var printLength = false
var writeInplace = false var writeInplace = false
var writeScript = "" var writeScript = ""
var sourceYamlFile = "" var sourceYamlFile = ""

View File

@ -26,6 +26,8 @@ yq r -- things.yaml '--key-starting-with-dashes.blah'
cmdRead.PersistentFlags().StringVarP(&docIndex, "doc", "d", "0", "process document index number (0 based, * for all documents)") cmdRead.PersistentFlags().StringVarP(&docIndex, "doc", "d", "0", "process document index number (0 based, * for all documents)")
cmdRead.PersistentFlags().StringVarP(&printMode, "printMode", "p", "v", "print mode (v (values, default), p (paths), pv (path and value pairs)") cmdRead.PersistentFlags().StringVarP(&printMode, "printMode", "p", "v", "print mode (v (values, default), p (paths), pv (path and value pairs)")
cmdRead.PersistentFlags().StringVarP(&defaultValue, "defaultValue", "D", "", "default value printed when there are no results") cmdRead.PersistentFlags().StringVarP(&defaultValue, "defaultValue", "D", "", "default value printed when there are no results")
cmdRead.PersistentFlags().BoolVarP(&resultsAsArray, "asArray", "a", false, "print results as array")
cmdRead.PersistentFlags().BoolVarP(&printLength, "length", "l", false, "print length of results")
cmdRead.PersistentFlags().BoolVarP(&explodeAnchors, "explodeAnchors", "X", false, "explode anchors") cmdRead.PersistentFlags().BoolVarP(&explodeAnchors, "explodeAnchors", "X", false, "explode anchors")
return cmdRead return cmdRead
} }

View File

@ -77,7 +77,22 @@ func appendDocument(originalMatchingNodes []*yqlib.NodeContext, dataBucket yaml.
return append(originalMatchingNodes, matchingNodes...), nil return append(originalMatchingNodes, matchingNodes...), nil
} }
func printValue(node *yaml.Node, writer io.Writer) error { func lengthOf(node *yaml.Node) int {
switch node.Kind {
case yaml.ScalarNode:
return len(node.Value)
case yaml.MappingNode:
return len(node.Content) / 2
default:
return len(node.Content)
}
}
func printValue(node *yaml.Node, writer io.Writer, shouldPrintLength bool) error {
if shouldPrintLength {
return writeString(writer, fmt.Sprintf("%v\n", lengthOf(node)))
}
if node.Kind == yaml.ScalarNode { if node.Kind == yaml.ScalarNode {
_, errorWriting := writer.Write([]byte(node.Value + "\n")) _, errorWriting := writer.Write([]byte(node.Value + "\n"))
return errorWriting return errorWriting
@ -159,6 +174,9 @@ func printResults(matchingNodes []*yqlib.NodeContext, writer io.Writer) error {
} }
return nil return nil
} }
var arrayNode = yaml.Node{Kind: yaml.SequenceNode}
var errorWriting error var errorWriting error
for _, mappedDoc := range matchingNodes { for _, mappedDoc := range matchingNodes {
switch printMode { switch printMode {
@ -172,17 +190,31 @@ func printResults(matchingNodes []*yqlib.NodeContext, writer io.Writer) error {
var parentNode = yaml.Node{Kind: yaml.MappingNode} var parentNode = yaml.Node{Kind: yaml.MappingNode}
parentNode.Content = make([]*yaml.Node, 2) parentNode.Content = make([]*yaml.Node, 2)
parentNode.Content[0] = &yaml.Node{Kind: yaml.ScalarNode, Value: lib.PathStackToString(mappedDoc.PathStack)} parentNode.Content[0] = &yaml.Node{Kind: yaml.ScalarNode, Value: lib.PathStackToString(mappedDoc.PathStack)}
parentNode.Content[1] = mappedDoc.Node if printLength {
if err := printValue(&parentNode, bufferedWriter); err != nil { parentNode.Content[1] = &yaml.Node{Kind: yaml.ScalarNode, Value: fmt.Sprintf("%v", lengthOf(mappedDoc.Node))}
} else {
parentNode.Content[1] = mappedDoc.Node
}
if resultsAsArray {
arrayNode.Content = append(arrayNode.Content, &parentNode)
} else if err := printValue(&parentNode, bufferedWriter, false); err != nil {
return err return err
} }
default: default:
if err := printValue(mappedDoc.Node, bufferedWriter); err != nil { if resultsAsArray || printLength {
arrayNode.Content = append(arrayNode.Content, mappedDoc.Node)
} else if err := printValue(mappedDoc.Node, bufferedWriter, false); err != nil {
return err return err
} }
} }
} }
if resultsAsArray || (printMode == "v" && printLength) {
if err := printValue(&arrayNode, bufferedWriter, printLength); err != nil {
return err
}
}
return nil return nil
} }