mirror of
https://github.com/mikefarah/yq.git
synced 2024-12-19 20:19:04 +00:00
Refactored command logic
This commit is contained in:
parent
0b2688c0f1
commit
2b3d0552a6
51
acceptance_tests/bad_args.sh
Executable file
51
acceptance_tests/bad_args.sh
Executable file
@ -0,0 +1,51 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
tearDown() {
|
||||||
|
set -e
|
||||||
|
}
|
||||||
|
|
||||||
|
testWriteInPlacePipeIn() {
|
||||||
|
set +e
|
||||||
|
result=$(./yq e -i -n '.a' 2>&1)
|
||||||
|
assertEquals 1 $?
|
||||||
|
assertEquals "Error: write inplace flag only applicable when giving an expression and at least one file" "$result"
|
||||||
|
}
|
||||||
|
|
||||||
|
testWriteInPlacePipeInEvalall() {
|
||||||
|
set +e
|
||||||
|
result=$(./yq ea -i -n '.a' 2>&1)
|
||||||
|
assertEquals 1 $?
|
||||||
|
assertEquals "Error: write inplace flag only applicable when giving an expression and at least one file" "$result"
|
||||||
|
}
|
||||||
|
|
||||||
|
testWriteInPlaceWithSplit() {
|
||||||
|
set +e
|
||||||
|
result=$(./yq e -s "cat" -i '.a = "thing"' test.yml 2>&1)
|
||||||
|
assertEquals 1 $?
|
||||||
|
assertEquals "Error: write inplace cannot be used with split file" "$result"
|
||||||
|
}
|
||||||
|
|
||||||
|
testWriteInPlaceWithSplitEvalAll() {
|
||||||
|
set +e
|
||||||
|
result=$(./yq ea -s "cat" -i '.a = "thing"' test.yml 2>&1)
|
||||||
|
assertEquals 1 $?
|
||||||
|
assertEquals "Error: write inplace cannot be used with split file" "$result"
|
||||||
|
}
|
||||||
|
|
||||||
|
testNullWithFiles() {
|
||||||
|
set +e
|
||||||
|
result=$(./yq e -n '.a = "thing"' test.yml 2>&1)
|
||||||
|
assertEquals 1 $?
|
||||||
|
assertEquals "Error: cannot pass files in when using null-input flag" "$result"
|
||||||
|
}
|
||||||
|
|
||||||
|
testNullWithFilesEvalAll() {
|
||||||
|
set +e
|
||||||
|
result=$(./yq ea -n '.a = "thing"' test.yml 2>&1)
|
||||||
|
assertEquals 1 $?
|
||||||
|
assertEquals "Error: cannot pass files in when using null-input flag" "$result"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
source ./scripts/shunit2
|
@ -2,7 +2,6 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/mikefarah/yq/v4/pkg/yqlib"
|
"github.com/mikefarah/yq/v4/pkg/yqlib"
|
||||||
@ -41,39 +40,23 @@ Note that it consumes more memory than eval.
|
|||||||
return cmdEvalAll
|
return cmdEvalAll
|
||||||
}
|
}
|
||||||
func evaluateAll(cmd *cobra.Command, args []string) error {
|
func evaluateAll(cmd *cobra.Command, args []string) error {
|
||||||
cmd.SilenceUsage = true
|
|
||||||
// 0 args, read std in
|
// 0 args, read std in
|
||||||
// 1 arg, null input, process expression
|
// 1 arg, null input, process expression
|
||||||
// 1 arg, read file in sequence
|
// 1 arg, read file in sequence
|
||||||
// 2+ args, [0] = expression, file the rest
|
// 2+ args, [0] = expression, file the rest
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
firstFileIndex, err := initCommand(cmd, args)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
stat, _ := os.Stdin.Stat()
|
stat, _ := os.Stdin.Stat()
|
||||||
pipingStdIn := (stat.Mode() & os.ModeCharDevice) == 0
|
pipingStdIn := (stat.Mode() & os.ModeCharDevice) == 0
|
||||||
|
|
||||||
out := cmd.OutOrStdout()
|
out := cmd.OutOrStdout()
|
||||||
|
|
||||||
fileInfo, _ := os.Stdout.Stat()
|
|
||||||
|
|
||||||
if forceColor || (!forceNoColor && (fileInfo.Mode()&os.ModeCharDevice) != 0) {
|
|
||||||
colorsEnabled = true
|
|
||||||
}
|
|
||||||
|
|
||||||
firstFileIndex := -1
|
|
||||||
if !nullInput && len(args) == 1 {
|
|
||||||
firstFileIndex = 0
|
|
||||||
} else if len(args) > 1 {
|
|
||||||
firstFileIndex = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
if writeInplace && (firstFileIndex == -1) {
|
|
||||||
return fmt.Errorf("Write inplace flag only applicable when giving an expression and at least one file")
|
|
||||||
}
|
|
||||||
|
|
||||||
if writeInplace && splitFileExp != "" {
|
|
||||||
return fmt.Errorf("Write inplace cannot be used with split file")
|
|
||||||
}
|
|
||||||
|
|
||||||
if writeInplace {
|
if writeInplace {
|
||||||
// only use colors if its forced
|
// only use colors if its forced
|
||||||
colorsEnabled = forceColor
|
colorsEnabled = forceColor
|
||||||
@ -87,14 +70,6 @@ func evaluateAll(cmd *cobra.Command, args []string) error {
|
|||||||
defer func() { writeInPlaceHandler.FinishWriteInPlace(completedSuccessfully) }()
|
defer func() { writeInPlaceHandler.FinishWriteInPlace(completedSuccessfully) }()
|
||||||
}
|
}
|
||||||
|
|
||||||
if nullInput && len(args) > 1 {
|
|
||||||
return errors.New("Cannot pass files in when using null-input flag")
|
|
||||||
}
|
|
||||||
// backwards compatibilty
|
|
||||||
if outputToJSON {
|
|
||||||
outputFormat = "json"
|
|
||||||
}
|
|
||||||
|
|
||||||
format, err := yqlib.OutputFormatFromString(outputFormat)
|
format, err := yqlib.OutputFormatFromString(outputFormat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -54,39 +54,22 @@ func processExpression(expression string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func evaluateSequence(cmd *cobra.Command, args []string) error {
|
func evaluateSequence(cmd *cobra.Command, args []string) error {
|
||||||
cmd.SilenceUsage = true
|
|
||||||
// 0 args, read std in
|
// 0 args, read std in
|
||||||
// 1 arg, null input, process expression
|
// 1 arg, null input, process expression
|
||||||
// 1 arg, read file in sequence
|
// 1 arg, read file in sequence
|
||||||
// 2+ args, [0] = expression, file the rest
|
// 2+ args, [0] = expression, file the rest
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
firstFileIndex, err := initCommand(cmd, args)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
stat, _ := os.Stdin.Stat()
|
stat, _ := os.Stdin.Stat()
|
||||||
pipingStdIn := (stat.Mode() & os.ModeCharDevice) == 0
|
pipingStdIn := (stat.Mode() & os.ModeCharDevice) == 0
|
||||||
|
|
||||||
out := cmd.OutOrStdout()
|
out := cmd.OutOrStdout()
|
||||||
|
|
||||||
fileInfo, _ := os.Stdout.Stat()
|
|
||||||
|
|
||||||
if forceColor || (!forceNoColor && (fileInfo.Mode()&os.ModeCharDevice) != 0) {
|
|
||||||
colorsEnabled = true
|
|
||||||
}
|
|
||||||
|
|
||||||
firstFileIndex := -1
|
|
||||||
if !nullInput && len(args) == 1 {
|
|
||||||
firstFileIndex = 0
|
|
||||||
} else if len(args) > 1 {
|
|
||||||
firstFileIndex = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
if writeInplace && (firstFileIndex == -1) {
|
|
||||||
return fmt.Errorf("Write inplace flag only applicable when giving an expression and at least one file")
|
|
||||||
}
|
|
||||||
|
|
||||||
if writeInplace && splitFileExp != "" {
|
|
||||||
return fmt.Errorf("Write inplace cannot be used with split file")
|
|
||||||
}
|
|
||||||
|
|
||||||
if writeInplace {
|
if writeInplace {
|
||||||
// only use colors if its forced
|
// only use colors if its forced
|
||||||
colorsEnabled = forceColor
|
colorsEnabled = forceColor
|
||||||
@ -100,11 +83,6 @@ func evaluateSequence(cmd *cobra.Command, args []string) error {
|
|||||||
defer func() { writeInPlaceHandler.FinishWriteInPlace(completedSuccessfully) }()
|
defer func() { writeInPlaceHandler.FinishWriteInPlace(completedSuccessfully) }()
|
||||||
}
|
}
|
||||||
|
|
||||||
// backwards compatibilty
|
|
||||||
if outputToJSON {
|
|
||||||
outputFormat = "json"
|
|
||||||
}
|
|
||||||
|
|
||||||
format, err := yqlib.OutputFormatFromString(outputFormat)
|
format, err := yqlib.OutputFormatFromString(outputFormat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -116,10 +94,6 @@ func evaluateSequence(cmd *cobra.Command, args []string) error {
|
|||||||
|
|
||||||
streamEvaluator := yqlib.NewStreamEvaluator()
|
streamEvaluator := yqlib.NewStreamEvaluator()
|
||||||
|
|
||||||
if nullInput && len(args) > 1 {
|
|
||||||
return errors.New("Cannot pass files in when using null-input flag")
|
|
||||||
}
|
|
||||||
|
|
||||||
if frontMatter != "" {
|
if frontMatter != "" {
|
||||||
frontMatterHandler := yqlib.NewFrontMatterHandler(args[firstFileIndex])
|
frontMatterHandler := yqlib.NewFrontMatterHandler(args[firstFileIndex])
|
||||||
err = frontMatterHandler.Split()
|
err = frontMatterHandler.Split()
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
package cmd
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/mikefarah/yq/v4/pkg/yqlib"
|
|
||||||
)
|
|
||||||
|
|
||||||
func configurePrinterWriter(format yqlib.PrinterOutputFormat, out io.Writer) yqlib.PrinterWriter {
|
|
||||||
|
|
||||||
var printerWriter yqlib.PrinterWriter
|
|
||||||
|
|
||||||
if splitFileExp != "" {
|
|
||||||
colorsEnabled = forceColor
|
|
||||||
splitExp, err := yqlib.NewExpressionParser().ParseExpression(splitFileExp)
|
|
||||||
if err != nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
printerWriter = yqlib.NewMultiPrinterWriter(splitExp, format)
|
|
||||||
} else {
|
|
||||||
printerWriter = yqlib.NewSinglePrinterWriter(out)
|
|
||||||
}
|
|
||||||
return printerWriter
|
|
||||||
}
|
|
63
cmd/utils.go
Normal file
63
cmd/utils.go
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/mikefarah/yq/v4/pkg/yqlib"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
func initCommand(cmd *cobra.Command, args []string) (firstFileIndex int, err error) {
|
||||||
|
cmd.SilenceUsage = true
|
||||||
|
|
||||||
|
fileInfo, _ := os.Stdout.Stat()
|
||||||
|
|
||||||
|
if forceColor || (!forceNoColor && (fileInfo.Mode()&os.ModeCharDevice) != 0) {
|
||||||
|
colorsEnabled = true
|
||||||
|
}
|
||||||
|
|
||||||
|
firstFileIndex = -1
|
||||||
|
if !nullInput && len(args) == 1 {
|
||||||
|
firstFileIndex = 0
|
||||||
|
} else if len(args) > 1 {
|
||||||
|
firstFileIndex = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// backwards compatibilty
|
||||||
|
if outputToJSON {
|
||||||
|
outputFormat = "json"
|
||||||
|
}
|
||||||
|
|
||||||
|
if writeInplace && (firstFileIndex == -1) {
|
||||||
|
return 0, fmt.Errorf("write inplace flag only applicable when giving an expression and at least one file")
|
||||||
|
}
|
||||||
|
|
||||||
|
if writeInplace && splitFileExp != "" {
|
||||||
|
return 0, fmt.Errorf("write inplace cannot be used with split file")
|
||||||
|
}
|
||||||
|
|
||||||
|
if nullInput && len(args) > 1 {
|
||||||
|
return 0, fmt.Errorf("cannot pass files in when using null-input flag")
|
||||||
|
}
|
||||||
|
|
||||||
|
return firstFileIndex, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func configurePrinterWriter(format yqlib.PrinterOutputFormat, out io.Writer) yqlib.PrinterWriter {
|
||||||
|
|
||||||
|
var printerWriter yqlib.PrinterWriter
|
||||||
|
|
||||||
|
if splitFileExp != "" {
|
||||||
|
colorsEnabled = forceColor
|
||||||
|
splitExp, err := yqlib.NewExpressionParser().ParseExpression(splitFileExp)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
printerWriter = yqlib.NewMultiPrinterWriter(splitExp, format)
|
||||||
|
} else {
|
||||||
|
printerWriter = yqlib.NewSinglePrinterWriter(out)
|
||||||
|
}
|
||||||
|
return printerWriter
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user