hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit b5de37ee793c01f2acccdea7119be05c4182723f
parent bf301daf158e5e9673ad5f457ea3a264315942b5
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Wed, 28 Jul 2021 18:02:42 +0200

Handle toml.LocalDate and toml.LocalDateTime in front matter

See #8801

Diffstat:
Mcommon/htime/time.go | 14++++++++++++++
Mhugolib/dates_test.go | 6+++---
Mresources/page/pagemeta/page_frontmatter.go | 5+++--
Mtpl/time/time.go | 2+-
4 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/common/htime/time.go b/common/htime/time.go
@@ -17,6 +17,10 @@ import (
 	"strings"
 	"time"
 
+	"github.com/spf13/cast"
+
+	toml "github.com/pelletier/go-toml/v2"
+
 	"github.com/go-playground/locales"
 )
 
@@ -125,3 +129,13 @@ func (f TimeFormatter) Format(t time.Time, layout string) string {
 
 	return s
 }
+
+func ToTimeInDefaultLocationE(i interface{}, location *time.Location) (tim time.Time, err error) {
+	switch vv := i.(type) {
+	case toml.LocalDate:
+		return vv.AsTime(location), nil
+	case toml.LocalDateTime:
+		return vv.AsTime(location), nil
+	}
+	return cast.ToTimeInDefaultLocationE(i, location)
+}
diff --git a/hugolib/dates_test.go b/hugolib/dates_test.go
@@ -104,6 +104,7 @@ expiryDate=%s
 			if quoted {
 				return fmt.Sprintf("%q", d)
 			}
+
 			return d
 		}
 
@@ -124,7 +125,6 @@ expiryDate=%s
 		"short-date-yaml-qouted.nn.md", createPageContent(pageTemplYaml, shortDateTempl, true),
 		"long-date-yaml-unqouted.en.md", createPageContent(pageTemplYaml, longDateTempl, false),
 		"long-date-yaml-unqouted.nn.md", createPageContent(pageTemplYaml, longDateTempl, false),
-
 		// TOML
 		"short-date-toml-unqouted.en.md", createPageContent(pageTemplTOML, shortDateTempl, false),
 		"short-date-toml-unqouted.nn.md", createPageContent(pageTemplTOML, shortDateTempl, false),
@@ -180,8 +180,8 @@ ExpiryDate: 2099-07-13 15:28:01 +0000 UTC`
 	// TOML
 	// These fails: TOML (Burnt Sushi) defaults to local timezone.
 	// TODO(bep) check go-toml
-	//	b.AssertFileContent("public/en/short-date-toml-unqouted/index.html", expectShortDateEn)
-	//  b.AssertFileContent("public/nn/short-date-toml-unqouted/index.html", expectShortDateNn)
+	b.AssertFileContent("public/en/short-date-toml-unqouted/index.html", expectShortDateEn)
+	b.AssertFileContent("public/nn/short-date-toml-unqouted/index.html", expectShortDateNn)
 	b.AssertFileContent("public/en/short-date-toml-qouted/index.html", expectShortDateEn)
 	b.AssertFileContent("public/nn/short-date-toml-qouted/index.html", expectShortDateNn)
 
diff --git a/resources/page/pagemeta/page_frontmatter.go b/resources/page/pagemeta/page_frontmatter.go
@@ -17,6 +17,7 @@ import (
 	"strings"
 	"time"
 
+	"github.com/gohugoio/hugo/common/htime"
 	"github.com/gohugoio/hugo/common/paths"
 
 	"github.com/gohugoio/hugo/common/loggers"
@@ -130,7 +131,7 @@ func dateAndSlugFromBaseFilename(location *time.Location, name string) (time.Tim
 		return time.Time{}, ""
 	}
 
-	d, err := cast.ToTimeInDefaultLocationE(withoutExt[:10], location)
+	d, err := htime.ToTimeInDefaultLocationE(withoutExt[:10], location)
 	if err != nil {
 		return time.Time{}, ""
 	}
@@ -371,7 +372,7 @@ func (f *frontmatterFieldHandlers) newDateFieldHandler(key string, setter func(d
 			return false, nil
 		}
 
-		date, err := cast.ToTimeInDefaultLocationE(v, d.Location)
+		date, err := htime.ToTimeInDefaultLocationE(v, d.Location)
 		if err != nil {
 			return false, nil
 		}
diff --git a/tpl/time/time.go b/tpl/time/time.go
@@ -55,7 +55,7 @@ func (ns *Namespace) AsTime(v interface{}, args ...interface{}) (interface{}, er
 		}
 	}
 
-	return cast.ToTimeInDefaultLocationE(v, loc)
+	return htime.ToTimeInDefaultLocationE(v, loc)
 
 }