mirror of
https://github.com/mikefarah/yq.git
synced 2025-01-23 22:25:42 +00:00
feat: Create parent directories if --split-exp is used.
Problem: When --split-exp is used and produces filenames with slashes in them, the target directories must already exist otherwise yq fails. Fix/feature: Create the necessary directories with os.MkdirAll(). The permissions 0750 were chosen to satisfy the vulnerability checker.
This commit is contained in:
parent
294a1709ad
commit
f73c862cc5
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
setUp() {
|
setUp() {
|
||||||
rm test*.yml || true
|
rm test*.yml || true
|
||||||
|
rm -rf test_dir* || true
|
||||||
}
|
}
|
||||||
|
|
||||||
testBasicSplitWithName() {
|
testBasicSplitWithName() {
|
||||||
@ -204,4 +205,23 @@ EOM
|
|||||||
assertEquals "$expectedDoc3" "$doc3"
|
assertEquals "$expectedDoc3" "$doc3"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testSplitWithDirectories() {
|
||||||
|
cat >test.yml <<EOL
|
||||||
|
f: test_dir1/file1
|
||||||
|
---
|
||||||
|
f: test_dir2/dir22/file2
|
||||||
|
---
|
||||||
|
f: file3
|
||||||
|
EOL
|
||||||
|
|
||||||
|
./yq e --no-doc -s ".f" test.yml
|
||||||
|
|
||||||
|
doc1=$(cat test_dir1/file1.yml)
|
||||||
|
assertEquals "f: test_dir1/file1" "$doc1"
|
||||||
|
doc2=$(cat test_dir2/dir22/file2.yml)
|
||||||
|
assertEquals "f: test_dir2/dir22/file2" "$doc2"
|
||||||
|
doc3=$(cat file3.yml)
|
||||||
|
assertEquals "f: file3" "$doc3"
|
||||||
|
}
|
||||||
|
|
||||||
source ./scripts/shunit2
|
source ./scripts/shunit2
|
@ -197,7 +197,7 @@ yq -P -oy sample.json
|
|||||||
}
|
}
|
||||||
rootCmd.PersistentFlags().BoolVarP(&yqlib.ConfiguredYamlPreferences.LeadingContentPreProcessing, "header-preprocess", "", true, "Slurp any header comments and separators before processing expression.")
|
rootCmd.PersistentFlags().BoolVarP(&yqlib.ConfiguredYamlPreferences.LeadingContentPreProcessing, "header-preprocess", "", true, "Slurp any header comments and separators before processing expression.")
|
||||||
|
|
||||||
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(&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. The necessary directories will be created.")
|
||||||
if err = rootCmd.RegisterFlagCompletionFunc("split-exp", cobra.NoFileCompletions); err != nil {
|
if err = rootCmd.RegisterFlagCompletionFunc("split-exp", cobra.NoFileCompletions); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -70,6 +71,10 @@ func (sp *multiPrintWriter) GetWriter(node *CandidateNode) (*bufio.Writer, error
|
|||||||
name = fmt.Sprintf("%v.%v", name, sp.extension)
|
name = fmt.Sprintf("%v.%v", name, sp.extension)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = os.MkdirAll(filepath.Dir(name), 0750)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
f, err := os.Create(name)
|
f, err := os.Create(name)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user