feat(files): support creating intermediate directories

This commit is contained in:
Julien Dessaux 2024-03-12 23:23:10 +01:00
parent b40723b0b8
commit 93b22a886a
Signed by: adyxax
GPG key ID: F92E51B86E07177E
3 changed files with 62 additions and 14 deletions

View file

@ -8,6 +8,7 @@ import (
"io/fs"
"log/slog"
"os"
"path/filepath"
)
// ----- Globals ---------------------------------------------------------------
@ -20,22 +21,24 @@ func init() {
// ----- Public ----------------------------------------------------------------
type FilePromise struct {
chain []Promise
contents Value
err error
filename Value
permissions *Permissions
status Status
chain []Promise
contents Value
dirPermissions *Permissions
err error
filename Value
permissions *Permissions
status Status
}
func File(filename any) *FilePromise {
return &FilePromise{
chain: nil,
contents: nil,
err: nil,
filename: interfaceToTemplateValue(filename),
permissions: nil,
status: PROMISED,
chain: nil,
contents: nil,
dirPermissions: nil,
err: nil,
filename: interfaceToTemplateValue(filename),
permissions: nil,
status: PROMISED,
}
}
@ -44,6 +47,11 @@ func (f *FilePromise) Contents(contents any) *FilePromise {
return f
}
func (f *FilePromise) DirectoriesPermissions(p *Permissions) *FilePromise {
f.dirPermissions = p
return f
}
func (f *FilePromise) Permissions(p *Permissions) *FilePromise {
f.permissions = p
return f
@ -67,6 +75,11 @@ func (f *FilePromise) Promise() Promise {
func (f *FilePromise) Resolve() {
filename := f.filename.String()
if f.dirPermissions != nil {
if f.status, f.err = makeDirectoriesHierarchy(filepath.Dir(filename), f.dirPermissions); f.err != nil {
return
}
}
if f.contents != nil {
var sumFile []byte
sumFile, f.err = sha256sumOfFile(filename)