Skip to content

Commit

Permalink
Can load expressions from file #1120
Browse files Browse the repository at this point in the history
  • Loading branch information
mikefarah committed Mar 1, 2022
1 parent edbdb16 commit 33a2981
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 5 deletions.
11 changes: 11 additions & 0 deletions acceptance_tests/basic.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
setUp() {
rm test*.yml 2>/dev/null || true
rm .xyz 2>/dev/null || true
rm instructions.txt 2>/dev/null || true
}

testBasicEvalRoundTrip() {
Expand All @@ -26,7 +27,17 @@ testBasicExpressionMatchesFileName() {

X=$(./yq ea --expression '.xyz' test.yml)
assertEquals "123" "$X"
}

testBasicExpressionFromFile() {
./yq -n ".xyz = 123" > test.yml
echo '.xyz = "meow" | .cool = "frog"' > instructions.txt

X=$(./yq --from-file instructions.txt test.yml -o=j -I=0)
assertEquals '{"xyz":"meow","cool":"frog"}' "$X"

X=$(./yq ea --from-file instructions.txt test.yml -o=j -I=0)
assertEquals '{"xyz":"meow","cool":"frog"}' "$X"
}

testBasicGitHubAction() {
Expand Down
2 changes: 2 additions & 0 deletions cmd/constant.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,5 @@ var splitFileExp = ""
var completedSuccessfully = false

var forceExpression = ""

var expressionFile = ""
5 changes: 4 additions & 1 deletion cmd/evaluate_all_command.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
5 changes: 4 additions & 1 deletion cmd/evalute_sequence_command.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 2 additions & 0 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
Expand Down
14 changes: 11 additions & 3 deletions cmd/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

0 comments on commit 33a2981

Please sign in to comment.