Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tpl
diff options
context:
space:
mode:
authorBrad <brad.cypert@gmail.com>2021-10-05 17:15:10 +0300
committerGitHub <noreply@github.com>2021-10-05 17:15:10 +0300
commite55466ce70363418309d465a0f2aa6c7ada1e51d (patch)
tree40e8b35d3d9463c0eb1b11cc7c2a7b706864217f /tpl
parentecf025f006f22061728e78f2cf50257dde2225ee (diff)
tpl/path: Add path.Clean
Fixes #8885
Diffstat (limited to 'tpl')
-rw-r--r--tpl/path/path.go12
-rw-r--r--tpl/path/path_test.go29
2 files changed, 41 insertions, 0 deletions
diff --git a/tpl/path/path.go b/tpl/path/path.go
index 641055224..ec50cff79 100644
--- a/tpl/path/path.go
+++ b/tpl/path/path.go
@@ -144,3 +144,15 @@ func (ns *Namespace) Join(elements ...interface{}) (string, error) {
}
return _path.Join(pathElements...), nil
}
+
+// Clean replaces the separators used with standard slashes and then
+// extraneous slashes are removed.
+func (ns *Namespace) Clean(path interface{}) (string, error) {
+ spath, err := cast.ToStringE(path)
+
+ if err != nil {
+ return "", err
+ }
+ spath = filepath.ToSlash(spath)
+ return _path.Clean(spath), nil
+}
diff --git a/tpl/path/path_test.go b/tpl/path/path_test.go
index dc0761f2f..d4a438b5c 100644
--- a/tpl/path/path_test.go
+++ b/tpl/path/path_test.go
@@ -175,3 +175,32 @@ func TestSplit(t *testing.T) {
c.Assert(result, qt.Equals, test.expect)
}
}
+
+func TestClean(t *testing.T) {
+ t.Parallel()
+ c := qt.New(t)
+
+ for _, test := range []struct {
+ path interface{}
+ expect interface{}
+ }{
+ {filepath.FromSlash(`foo/bar.txt`), `foo/bar.txt`},
+ {filepath.FromSlash(`foo/bar/txt`), `foo/bar/txt`},
+ {filepath.FromSlash(`foo/bar`), `foo/bar`},
+ {filepath.FromSlash(`foo/bar.t`), `foo/bar.t`},
+ {``, `.`},
+ // errors
+ {tstNoStringer{}, false},
+ } {
+
+ result, err := ns.Clean(test.path)
+
+ if b, ok := test.expect.(bool); ok && !b {
+ c.Assert(err, qt.Not(qt.IsNil))
+ continue
+ }
+
+ c.Assert(err, qt.IsNil)
+ c.Assert(result, qt.Equals, test.expect)
+ }
+}