feat(files): support creating directories

This commit is contained in:
Julien Dessaux 2024-08-27 08:40:51 +02:00
parent ccec94a4dd
commit e7572a1382
Signed by: adyxax
GPG key ID: F92E51B86E07177E

View file

@ -4,6 +4,7 @@ import (
"bytes"
"crypto/sha256"
"errors"
"fmt"
"io"
"io/fs"
"log/slog"
@ -17,16 +18,37 @@ func init() {
files = make([]*FilePromise, 0)
}
type FileType int
const (
FILE = iota
DIRECTORY
)
type FilePromise struct {
chain []Promise
contents Value
dirPermissions *Permissions
err error
filename Value
fileType FileType
permissions *Permissions
status Status
}
func Directory(filename any) *FilePromise {
return &FilePromise{
chain: nil,
contents: nil,
dirPermissions: nil,
err: nil,
filename: interfaceToTemplateValue(filename),
fileType: DIRECTORY,
permissions: nil,
status: PROMISED,
}
}
func File(filename any) *FilePromise {
return &FilePromise{
chain: nil,
@ -34,6 +56,7 @@ func File(filename any) *FilePromise {
dirPermissions: nil,
err: nil,
filename: interfaceToTemplateValue(filename),
fileType: FILE,
permissions: nil,
status: PROMISED,
}
@ -71,11 +94,15 @@ 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
}
switch f.fileType {
case DIRECTORY:
if f.status, f.err = makeDirectoriesHierarchy(filepath.Clean(filename), f.dirPermissions); f.err != nil {
return
}
case FILE:
if f.contents != nil {
var sumFile []byte
sumFile, f.err = sha256sumOfFile(filename)
@ -97,6 +124,9 @@ func (f *FilePromise) Resolve() {
f.status = REPAIRED
}
}
default:
panic(fmt.Errorf("unknown File type enum value %d", f.fileType))
}
if f.permissions != nil {
var status Status
status, f.err = f.permissions.resolve(filename)