diff options
| author | Dave Henderson <dhenderson@gmail.com> | 2022-01-09 14:45:24 -0500 |
|---|---|---|
| committer | Dave Henderson <dhenderson@gmail.com> | 2022-02-13 11:53:47 -0500 |
| commit | 4510ec9c9e9b1cdce83ec893dfe2aebfdd5db8d7 (patch) | |
| tree | 831048f23820fe9c3c8749bedbbf839a4a546621 /template.go | |
| parent | 839e8973475f1f0bdc05657ea13cd23a16d85cd8 (diff) | |
Ensure output file paths exist
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'template.go')
| -rw-r--r-- | template.go | 15 |
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) |
