summaryrefslogtreecommitdiff
path: root/template.go
diff options
context:
space:
mode:
authorDave Henderson <dhenderson@gmail.com>2022-01-09 14:45:24 -0500
committerDave Henderson <dhenderson@gmail.com>2022-02-13 11:53:47 -0500
commit4510ec9c9e9b1cdce83ec893dfe2aebfdd5db8d7 (patch)
tree831048f23820fe9c3c8749bedbbf839a4a546621 /template.go
parent839e8973475f1f0bdc05657ea13cd23a16d85cd8 (diff)
Ensure output file paths exist
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'template.go')
-rw-r--r--template.go15
1 files changed, 10 insertions, 5 deletions
diff --git a/template.go b/template.go
index 6e5dfb5c..9d66dee0 100644
--- a/template.go
+++ b/template.go
@@ -145,7 +145,7 @@ func processTemplates(cfg *config.Config, templates []*tplate) ([]*tplate, error
}
if t.target == nil {
- out, err := openOutFile(cfg, t.targetPath, t.mode, t.modeOverride)
+ out, err := openOutFile(cfg, t.targetPath, 0755, t.mode, t.modeOverride)
if err != nil {
return nil, err
}
@@ -241,13 +241,13 @@ func fileToTemplates(inFile, outFile string, mode os.FileMode, modeOverride bool
return tmpl, nil
}
-func openOutFile(cfg *config.Config, filename string, mode os.FileMode, modeOverride bool) (out io.Writer, err error) {
+func openOutFile(cfg *config.Config, filename string, dirMode, mode os.FileMode, modeOverride bool) (out io.Writer, err error) {
if cfg.SuppressEmpty {
out = iohelpers.NewEmptySkipper(func() (io.Writer, error) {
if filename == "-" {
return cfg.Stdout, nil
}
- return createOutFile(filename, mode, modeOverride)
+ return createOutFile(filename, dirMode, mode, modeOverride)
})
return out, nil
}
@@ -255,10 +255,10 @@ func openOutFile(cfg *config.Config, filename string, mode os.FileMode, modeOver
if filename == "-" {
return cfg.Stdout, nil
}
- return createOutFile(filename, mode, modeOverride)
+ return createOutFile(filename, dirMode, mode, modeOverride)
}
-func createOutFile(filename string, mode os.FileMode, modeOverride bool) (out io.WriteCloser, err error) {
+func createOutFile(filename string, dirMode, mode os.FileMode, modeOverride bool) (out io.WriteCloser, err error) {
mode = iohelpers.NormalizeFileMode(mode.Perm())
if modeOverride {
err = fs.Chmod(filename, mode)
@@ -268,6 +268,11 @@ func createOutFile(filename string, mode os.FileMode, modeOverride bool) (out io
}
open := func() (out io.WriteCloser, err error) {
+ // Ensure file parent dirs
+ if err = fs.MkdirAll(filepath.Dir(filename), dirMode); err != nil {
+ return nil, err
+ }
+
out, err = fs.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, mode)
if err != nil {
return out, fmt.Errorf("failed to open output file '%s' for writing: %w", filename, err)