mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-29 00:12:11 -05:00
Use configured timeZone for the clock
And some other related adjustments. Updates #8787
This commit is contained in:
parent
e77ca3c105
commit
35c88a7f90
9 changed files with 54 additions and 34 deletions
|
@ -98,7 +98,6 @@ type commandeer struct {
|
||||||
|
|
||||||
serverPorts []serverPortListener
|
serverPorts []serverPortListener
|
||||||
|
|
||||||
languagesConfigured bool
|
|
||||||
languages langs.Languages
|
languages langs.Languages
|
||||||
doLiveReload bool
|
doLiveReload bool
|
||||||
renderStaticToDisk bool
|
renderStaticToDisk bool
|
||||||
|
@ -168,16 +167,17 @@ func (c *commandeer) initFs(fs *hugofs.Fs) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *commandeer) initClock() error {
|
func (c *commandeer) initClock(loc *time.Location) error {
|
||||||
bt := c.Cfg.GetString("clock")
|
bt := c.Cfg.GetString("clock")
|
||||||
if bt == "" {
|
if bt == "" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
t, err := cast.StringToDateInDefaultLocation(bt, nil)
|
t, err := cast.StringToDateInDefaultLocation(bt, loc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf(`failed to parse "clock" flag: %s`, err)
|
return fmt.Errorf(`failed to parse "clock" flag: %s`, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
htime.Clock = clock.Start(t)
|
htime.Clock = clock.Start(t)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -359,14 +359,15 @@ func (c *commandeer) loadConfig() error {
|
||||||
|
|
||||||
c.configFiles = configFiles
|
c.configFiles = configFiles
|
||||||
|
|
||||||
err = c.initClock()
|
var ok bool
|
||||||
if err != nil {
|
c.languages, ok = c.Cfg.Get("languagesSorted").(langs.Languages)
|
||||||
return err
|
if !ok {
|
||||||
|
panic("languages not configured")
|
||||||
}
|
}
|
||||||
|
|
||||||
if l, ok := c.Cfg.Get("languagesSorted").(langs.Languages); ok {
|
err = c.initClock(langs.GetLocation(c.languages[0]))
|
||||||
c.languagesConfigured = true
|
if err != nil {
|
||||||
c.languages = l
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set some commonly used flags
|
// Set some commonly used flags
|
||||||
|
|
|
@ -281,7 +281,7 @@ func (cc *hugoBuilderCommon) handleCommonBuilderFlags(cmd *cobra.Command) {
|
||||||
cmd.PersistentFlags().StringVarP(&cc.environment, "environment", "e", "", "build environment")
|
cmd.PersistentFlags().StringVarP(&cc.environment, "environment", "e", "", "build environment")
|
||||||
cmd.PersistentFlags().StringP("themesDir", "", "", "filesystem path to themes directory")
|
cmd.PersistentFlags().StringP("themesDir", "", "", "filesystem path to themes directory")
|
||||||
cmd.PersistentFlags().StringP("ignoreVendorPaths", "", "", "ignores any _vendor for module paths matching the given Glob pattern")
|
cmd.PersistentFlags().StringP("ignoreVendorPaths", "", "", "ignores any _vendor for module paths matching the given Glob pattern")
|
||||||
cmd.PersistentFlags().StringVar(&cc.clock, "clock", "", "set clock inside hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00")
|
cmd.PersistentFlags().StringVar(&cc.clock, "clock", "", "set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cc *hugoBuilderCommon) handleFlags(cmd *cobra.Command) {
|
func (cc *hugoBuilderCommon) handleFlags(cmd *cobra.Command) {
|
||||||
|
|
|
@ -21,7 +21,9 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/bep/clock"
|
||||||
qt "github.com/frankban/quicktest"
|
qt "github.com/frankban/quicktest"
|
||||||
|
"github.com/gohugoio/hugo/common/htime"
|
||||||
"github.com/gohugoio/hugo/hugofs"
|
"github.com/gohugoio/hugo/hugofs"
|
||||||
"github.com/spf13/afero"
|
"github.com/spf13/afero"
|
||||||
"golang.org/x/tools/txtar"
|
"golang.org/x/tools/txtar"
|
||||||
|
@ -29,6 +31,7 @@ import (
|
||||||
|
|
||||||
// Issue #5662
|
// Issue #5662
|
||||||
func TestHugoWithContentDirOverride(t *testing.T) {
|
func TestHugoWithContentDirOverride(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
c := qt.New(t)
|
c := qt.New(t)
|
||||||
|
|
||||||
files := `
|
files := `
|
||||||
|
@ -50,6 +53,7 @@ Page: {{ .Title }}|
|
||||||
|
|
||||||
// Issue #9794
|
// Issue #9794
|
||||||
func TestHugoStaticFilesMultipleStaticAndManyFolders(t *testing.T) {
|
func TestHugoStaticFilesMultipleStaticAndManyFolders(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
c := qt.New(t)
|
c := qt.New(t)
|
||||||
|
|
||||||
files := `
|
files := `
|
||||||
|
@ -95,12 +99,15 @@ Home.
|
||||||
|
|
||||||
// Issue #8787
|
// Issue #8787
|
||||||
func TestHugoListCommandsWithClockFlag(t *testing.T) {
|
func TestHugoListCommandsWithClockFlag(t *testing.T) {
|
||||||
|
t.Cleanup(func() { htime.Clock = clock.System() })
|
||||||
|
|
||||||
c := qt.New(t)
|
c := qt.New(t)
|
||||||
|
|
||||||
files := `
|
files := `
|
||||||
-- config.toml --
|
-- config.toml --
|
||||||
baseURL = "https://example.org"
|
baseURL = "https://example.org"
|
||||||
title = "Hugo Commands"
|
title = "Hugo Commands"
|
||||||
|
timeZone = "UTC"
|
||||||
-- content/past.md --
|
-- content/past.md --
|
||||||
---
|
---
|
||||||
title: "Past"
|
title: "Past"
|
||||||
|
@ -115,7 +122,9 @@ date: 2200-11-06
|
||||||
Page: {{ .Title }}|
|
Page: {{ .Title }}|
|
||||||
|
|
||||||
`
|
`
|
||||||
s := newTestHugoCmdBuilder(c, files, []string{"list", "future"}).Build()
|
s := newTestHugoCmdBuilder(c, files, []string{"list", "future"})
|
||||||
|
s.captureOut = true
|
||||||
|
s.Build()
|
||||||
p := filepath.Join("content", "future.md")
|
p := filepath.Join("content", "future.md")
|
||||||
s.AssertStdout(p + ",2200-11-06T00:00:00Z")
|
s.AssertStdout(p + ",2200-11-06T00:00:00Z")
|
||||||
|
|
||||||
|
@ -130,6 +139,8 @@ type testHugoCmdBuilder struct {
|
||||||
dir string
|
dir string
|
||||||
files string
|
files string
|
||||||
args []string
|
args []string
|
||||||
|
|
||||||
|
captureOut bool
|
||||||
out string
|
out string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,12 +167,17 @@ func (s *testHugoCmdBuilder) Build() *testHugoCmdBuilder {
|
||||||
args := append(s.args, "-s="+s.dir, "--quiet")
|
args := append(s.args, "-s="+s.dir, "--quiet")
|
||||||
cmd.SetArgs(args)
|
cmd.SetArgs(args)
|
||||||
|
|
||||||
|
if s.captureOut {
|
||||||
out, err := captureStdout(func() error {
|
out, err := captureStdout(func() error {
|
||||||
_, err := cmd.ExecuteC()
|
_, err := cmd.ExecuteC()
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
s.Assert(err, qt.IsNil)
|
s.Assert(err, qt.IsNil)
|
||||||
s.out = out
|
s.out = out
|
||||||
|
} else {
|
||||||
|
_, err := cmd.ExecuteC()
|
||||||
|
s.Assert(err, qt.IsNil)
|
||||||
|
}
|
||||||
|
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,11 +166,6 @@ func (sc *serverCmd) server(cmd *cobra.Command, args []string) error {
|
||||||
c.Set("watch", true)
|
c.Set("watch", true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(bep) yes, we should fix.
|
|
||||||
if !c.languagesConfigured {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// We can only do this once.
|
// We can only do this once.
|
||||||
serverCfgInit.Do(func() {
|
serverCfgInit.Do(func() {
|
||||||
c.serverPorts = make([]serverPortListener, 1)
|
c.serverPorts = make([]serverPortListener, 1)
|
||||||
|
|
|
@ -75,7 +75,8 @@ var (
|
||||||
"November",
|
"November",
|
||||||
"December",
|
"December",
|
||||||
}
|
}
|
||||||
Clock = clock.Start(time.Now())
|
|
||||||
|
Clock = clock.System()
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewTimeFormatter(ltr locales.Translator) TimeFormatter {
|
func NewTimeFormatter(ltr locales.Translator) TimeFormatter {
|
||||||
|
@ -151,12 +152,12 @@ func ToTimeInDefaultLocationE(i any, location *time.Location) (tim time.Time, er
|
||||||
return cast.ToTimeInDefaultLocationE(i, location)
|
return cast.ToTimeInDefaultLocationE(i, location)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now returns time.Now() or time value based on`clock` flag.
|
// Now returns time.Now() or time value based on the `clock` flag.
|
||||||
// Use this function to fake time inside hugo.
|
// Use this function to fake time inside hugo.
|
||||||
func Now() time.Time {
|
func Now() time.Time {
|
||||||
return Clock.Now()
|
return Clock.Now()
|
||||||
}
|
}
|
||||||
|
|
||||||
func Since(t time.Time) time.Duration {
|
func Since(t time.Time) time.Duration {
|
||||||
return Clock.Now().Sub(t)
|
return Clock.Since(t)
|
||||||
}
|
}
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -91,7 +91,7 @@ require (
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.4.0 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sso v1.4.0 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.7.0 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sts v1.7.0 // indirect
|
||||||
github.com/aws/smithy-go v1.8.0 // indirect
|
github.com/aws/smithy-go v1.8.0 // indirect
|
||||||
github.com/bep/clock v0.1.0 // indirect
|
github.com/bep/clock v0.3.0 // indirect
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect
|
||||||
github.com/dlclark/regexp2 v1.4.0 // indirect
|
github.com/dlclark/regexp2 v1.4.0 // indirect
|
||||||
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
||||||
|
|
8
go.sum
8
go.sum
|
@ -214,6 +214,14 @@ github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAm
|
||||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
||||||
github.com/bep/clock v0.1.0 h1:sdvJ08SsgwTY/ejA705YKBlktFfj2uVpmQSSQspZJ2c=
|
github.com/bep/clock v0.1.0 h1:sdvJ08SsgwTY/ejA705YKBlktFfj2uVpmQSSQspZJ2c=
|
||||||
github.com/bep/clock v0.1.0/go.mod h1:shVP9tZ3cXpbVj60SnlU1pMwKjFxECBRm9vZfpoA0Gs=
|
github.com/bep/clock v0.1.0/go.mod h1:shVP9tZ3cXpbVj60SnlU1pMwKjFxECBRm9vZfpoA0Gs=
|
||||||
|
github.com/bep/clock v0.2.0 h1:Uiv+P2wRVBy/g9Gybh645PgEOSC1BCXIQ7DOIc2bE64=
|
||||||
|
github.com/bep/clock v0.2.0/go.mod h1:6Gz2lapnJ9vxpvPxQ2u6FcXFRoj4kkiqQ6pm0ERZlwk=
|
||||||
|
github.com/bep/clock v0.2.1-0.20220507123307-c7e9c1bdae6f h1:dZlHVwWUCnS4P1Yk57qppK81fAUVV8DzDAo1lZA85hk=
|
||||||
|
github.com/bep/clock v0.2.1-0.20220507123307-c7e9c1bdae6f/go.mod h1:6Gz2lapnJ9vxpvPxQ2u6FcXFRoj4kkiqQ6pm0ERZlwk=
|
||||||
|
github.com/bep/clock v0.2.1-0.20220507124130-0a9d9c79927c h1:EPIuutNKs0tBieB1Z46GhNhiaYCs8bqSwwuo08xJHqs=
|
||||||
|
github.com/bep/clock v0.2.1-0.20220507124130-0a9d9c79927c/go.mod h1:6Gz2lapnJ9vxpvPxQ2u6FcXFRoj4kkiqQ6pm0ERZlwk=
|
||||||
|
github.com/bep/clock v0.3.0 h1:vfOA6+wVb6pPQEiXow9f/too92vNTLe9MuwO13PfI0M=
|
||||||
|
github.com/bep/clock v0.3.0/go.mod h1:6Gz2lapnJ9vxpvPxQ2u6FcXFRoj4kkiqQ6pm0ERZlwk=
|
||||||
github.com/bep/debounce v1.2.0 h1:wXds8Kq8qRfwAOpAxHrJDbCXgC5aHSzgQb/0gKsHQqo=
|
github.com/bep/debounce v1.2.0 h1:wXds8Kq8qRfwAOpAxHrJDbCXgC5aHSzgQb/0gKsHQqo=
|
||||||
github.com/bep/debounce v1.2.0/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0=
|
github.com/bep/debounce v1.2.0/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0=
|
||||||
github.com/bep/gitmap v1.1.2 h1:zk04w1qc1COTZPPYWDQHvns3y1afOsdRfraFQ3qI840=
|
github.com/bep/gitmap v1.1.2 h1:zk04w1qc1COTZPPYWDQHvns3y1afOsdRfraFQ3qI840=
|
||||||
|
|
|
@ -1585,7 +1585,7 @@ func TestShouldBuild(t *testing.T) {
|
||||||
|
|
||||||
func TestShouldBuildWithClock(t *testing.T) {
|
func TestShouldBuildWithClock(t *testing.T) {
|
||||||
htime.Clock = clock.Start(time.Date(2021, 11, 17, 20, 34, 58, 651387237, time.UTC))
|
htime.Clock = clock.Start(time.Date(2021, 11, 17, 20, 34, 58, 651387237, time.UTC))
|
||||||
t.Cleanup(func() { htime.Clock = clock.Start(time.Now()) })
|
t.Cleanup(func() { htime.Clock = clock.System() })
|
||||||
past := time.Date(2009, 11, 17, 20, 34, 58, 651387237, time.UTC)
|
past := time.Date(2009, 11, 17, 20, 34, 58, 651387237, time.UTC)
|
||||||
future := time.Date(2037, 11, 17, 20, 34, 58, 651387237, time.UTC)
|
future := time.Date(2037, 11, 17, 20, 34, 58, 651387237, time.UTC)
|
||||||
zero := time.Time{}
|
zero := time.Time{}
|
||||||
|
|
|
@ -28,7 +28,6 @@ func init() {
|
||||||
if d.Language == nil {
|
if d.Language == nil {
|
||||||
panic("Language must be set")
|
panic("Language must be set")
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := New(langs.GetTimeFormatter(d.Language), langs.GetLocation(d.Language))
|
ctx := New(langs.GetTimeFormatter(d.Language), langs.GetLocation(d.Language))
|
||||||
|
|
||||||
ns := &internal.TemplateFuncsNamespace{
|
ns := &internal.TemplateFuncsNamespace{
|
||||||
|
|
Loading…
Reference in a new issue