From ffb0eb894ad8a06857a2cc9959ccdbd94b3350f2 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Thu, 5 Dec 2024 13:22:38 -0500 Subject: [PATCH] providers/os: Add file statting --- providers/os/os.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/providers/os/os.go b/providers/os/os.go index ff0c41d..2a2293b 100644 --- a/providers/os/os.go +++ b/providers/os/os.go @@ -2,11 +2,23 @@ package os import "os" import "io" +import "time" +import "io/fs" import "html/template" import "git.tebibyte.media/sashakoshka/step" var _ step.FuncProvider = new(Provider) +// FileInfo is like the fs.FileInfo interface, but it directly contains the +// values instead of having getters for them. +type FileInfo struct { + Name string + Size int64 + Mode fs.FileMode + ModTime time.Time + IsDir bool +} + // Provider provides OS functions. type Provider struct { @@ -16,6 +28,7 @@ type Provider struct { func (this *Provider) FuncMap () template.FuncMap { return template.FuncMap { "fileExists": funcFileExists, + "statFile": funcStatFile, "readFile": funcReadFile, "readDir": funcReadDir, "writeFile": funcWriteFile, @@ -29,6 +42,18 @@ func funcFileExists (name string) (bool) { return err == nil } +func funcStatFile (name string) (FileInfo, error) { + info, err := os.Stat(name) + if err != nil { return FileInfo { }, err } + return FileInfo { + Name: info.Name(), + Size: info.Size(), + Mode: info.Mode(), + ModTime: info.ModTime(), + IsDir: info.IsDir(), + }, nil +} + func funcReadFile (name string) (string, error) { file, err := os.Open(name) if err != nil { return "", err }