ref: d71120852a8e14d0ea4d24de269fce041ef7b666
parent: a6b1eb1e9150aa5c1c86fe7424cc4167d6f59a5a
author: satotake <doublequotation@gmail.com>
date: Sun Aug 5 08:37:20 EDT 2018
Add fileStat to tpl/os/os
--- a/tpl/os/init.go
+++ b/tpl/os/init.go
@@ -55,6 +55,13 @@
},
)
+ ns.AddMethodMapping(ctx.FileStat,
+ []string{"fileStat"},+ [][2]string{+ {`{{ (fileExists "files/README.txt").Size }}`, `11`},+ },
+ )
+
return ns
}
--- a/tpl/os/os.go
+++ b/tpl/os/os.go
@@ -130,3 +130,22 @@
return status, nil
}
+
+// FileStat Stat returns the os.FileInfo structure describing file.
+func (ns *Namespace) FileStat(i interface{}) (_os.FileInfo, error) {+ path, err := cast.ToStringE(i)
+ if err != nil {+ return nil, err
+ }
+
+ if path == "" {+ return nil, errors.New("fileStat needs a path to a file")+ }
+
+ r, err := ns.readFileFs.Stat(path)
+ if err != nil {+ return nil, err
+ }
+
+ return r, nil
+}
--- a/tpl/os/os_test.go
+++ b/tpl/os/os_test.go
@@ -99,3 +99,37 @@
assert.Equal(t, test.expect, result, errMsg)
}
}
+
+func TestFileStat(t *testing.T) {+ t.Parallel()
+
+ workingDir := "/home/hugo"
+
+ v := viper.New()
+ v.Set("workingDir", workingDir)+
+ ns := New(&deps.Deps{Fs: hugofs.NewMem(v)})+
+ afero.WriteFile(ns.deps.Fs.Source, filepath.Join(workingDir, "/f/f1.txt"), []byte("f1-content"), 0755)+
+ for i, test := range []struct {+ filename string
+ expect interface{}+ }{+ {filepath.FromSlash("/f/f1.txt"), int64(10)},+ {filepath.FromSlash("f/f1.txt"), int64(10)},+ {"b", nil},+ {"", nil},+ } {+ errMsg := fmt.Sprintf("[%d] %v", i, test)+ result, err := ns.FileStat(test.filename)
+
+ if test.expect == nil {+ require.Error(t, err, errMsg)
+ continue
+ }
+
+ require.NoError(t, err, errMsg)
+ assert.Equal(t, test.expect, result.Size(), errMsg)
+ }
+}
--
⑨