From 78ed9964a36af1f7c7d825b24efaa6820175f0a4 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Thu, 27 Mar 2025 19:30:20 -0400 Subject: [PATCH] providers/os: Add readDirDate function to match listFilesDate --- providers/os/os.go | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/providers/os/os.go b/providers/os/os.go index 7dfafa0..e648b59 100644 --- a/providers/os/os.go +++ b/providers/os/os.go @@ -33,6 +33,7 @@ func (this *Provider) FuncMapFor (document *step.Document) template.FuncMap { "statFile": stat.funcStatFile, "readFile": stat.funcReadFile, "readDir": stat.funcReadDir, + "readDirDate": stat.funcReadDirDate, "listFiles": stat.funcListFiles, "listFilesDate": stat.funcListFilesDate, "writeFile": stat.funcWriteFile, @@ -96,6 +97,15 @@ func (this *state) funcReadDir (name string) ([]fs.DirEntry, error) { return os.ReadDir(name) } +func (this *state) funcReadDirDate (name string) ([]fs.DirEntry, error) { + name, err := this.document.Rel(name) + if err != nil { return nil, err } + entries, err := os.ReadDir(name) + if err != nil { return nil, err } + sortDirEntriesByDate(entries) + return entries, nil +} + func (this *state) funcListFiles (name string) ([]string, error) { name, err := this.document.Rel(name) if err != nil { return nil, err } @@ -113,17 +123,7 @@ func (this *state) funcListFilesDate (name string) ([]string, error) { if err != nil { return nil, err } entries, err := os.ReadDir(name) if err != nil { return nil, err } - sort.Slice(entries, func(left, right int) bool{ - var leftTime time.Time - if leftInfo, err := entries[left].Info(); err == nil { - leftTime = leftInfo.ModTime() - } - var rightTime time.Time - if rightInfo, err := entries[right].Info(); err == nil { - rightTime = rightInfo.ModTime() - } - return leftTime.Before(rightTime) - }) + sortDirEntriesByDate(entries) strings := make([]string, len(entries)) for index, entry := range entries { strings[index] = entry.Name() @@ -160,3 +160,17 @@ func (this *state) funcRemoveFile (name string) error { if err != nil { return err } return os.Remove(name) } + +func sortDirEntriesByDate(entries []fs.DirEntry) { + sort.Slice(entries, func(left, right int) bool{ + var leftTime time.Time + if leftInfo, err := entries[left].Info(); err == nil { + leftTime = leftInfo.ModTime() + } + var rightTime time.Time + if rightInfo, err := entries[right].Info(); err == nil { + rightTime = rightInfo.ModTime() + } + return leftTime.Before(rightTime) + }) +}