Can load expressions from file #1120

This commit is contained in:
Mike Farah
2022-03-01 11:50:09 +11:00
parent edbdb16ab7
commit 33a29817d7
6 changed files with 34 additions and 5 deletions
+2
View File
@@ -30,3 +30,5 @@ var splitFileExp = ""
var completedSuccessfully = false
var forceExpression = ""
var expressionFile = ""
+4 -1
View File
@@ -126,7 +126,10 @@ func evaluateAll(cmd *cobra.Command, args []string) (cmdError error) {
allAtOnceEvaluator := yqlib.NewAllAtOnceEvaluator()
expression, args := processArgs(pipingStdIn, args)
expression, args, err := processArgs(pipingStdIn, args)
if err != nil {
return err
}
yqlib.GetLogger().Debugf("processed args: %v", args)
switch len(args) {
+4 -1
View File
@@ -143,7 +143,10 @@ func evaluateSequence(cmd *cobra.Command, args []string) (cmdError error) {
}
defer frontMatterHandler.CleanUp()
}
expression, args := processArgs(pipingStdIn, args)
expression, args, err := processArgs(pipingStdIn, args)
if err != nil {
return err
}
switch len(args) {
case 0:
+2
View File
@@ -86,6 +86,8 @@ yq -i '.stuff = "foo"' myfile.yml # update myfile.yml inplace
rootCmd.PersistentFlags().StringVarP(&splitFileExp, "split-exp", "s", "", "print each result (or doc) into a file named (exp). [exp] argument must return a string. You can use $index in the expression as the result counter.")
rootCmd.PersistentFlags().StringVarP(&expressionFile, "from-file", "", "", "Load expression from specified file.")
rootCmd.AddCommand(
createEvaluateSequenceCommand(),
createEvaluateAllCommand(),
+11 -3
View File
@@ -137,14 +137,22 @@ func processStdInArgs(pipingStdin bool, args []string) []string {
return append(args, "-")
}
func processArgs(pipingStdin bool, originalArgs []string) (string, []string) {
func processArgs(pipingStdin bool, originalArgs []string) (string, []string, error) {
expression := forceExpression
if expressionFile != "" {
expressionBytes, err := os.ReadFile(expressionFile)
if err != nil {
return "", nil, err
}
expression = string(expressionBytes)
}
args := processStdInArgs(pipingStdin, originalArgs)
yqlib.GetLogger().Debugf("processed args: %v", args)
expression := forceExpression
if expression == "" && len(args) > 0 && args[0] != "-" && !maybeFile(args[0]) {
yqlib.GetLogger().Debug("assuming expression is '%v'", args[0])
expression = args[0]
args = args[1:]
}
return expression, args
return expression, args, nil
}