]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Use configured timeZone for the clock
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 7 May 2022 12:10:32 +0000 (14:10 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 8 May 2022 14:56:26 +0000 (16:56 +0200)
And some other related adjustments.

Updates #8787

commands/commandeer.go
commands/commands.go
commands/hugo_test.go
commands/server.go
common/htime/time.go
go.mod
go.sum
hugolib/page_test.go
tpl/time/init.go

index 20090cccdae32ba5857649ca00bf2f6f507d1dfc..b302cbfe0a39745c99085f32bb24fda2713e4f61 100644 (file)
@@ -98,13 +98,12 @@ type commandeer struct {
 
        serverPorts []serverPortListener
 
-       languagesConfigured bool
-       languages           langs.Languages
-       doLiveReload        bool
-       renderStaticToDisk  bool
-       fastRenderMode      bool
-       showErrorInBrowser  bool
-       wasError            bool
+       languages          langs.Languages
+       doLiveReload       bool
+       renderStaticToDisk bool
+       fastRenderMode     bool
+       showErrorInBrowser bool
+       wasError           bool
 
        configured bool
        paused     bool
@@ -168,16 +167,17 @@ func (c *commandeer) initFs(fs *hugofs.Fs) error {
        return nil
 }
 
-func (c *commandeer) initClock() error {
+func (c *commandeer) initClock(loc *time.Location) error {
        bt := c.Cfg.GetString("clock")
        if bt == "" {
                return nil
        }
 
-       t, err := cast.StringToDateInDefaultLocation(bt, nil)
+       t, err := cast.StringToDateInDefaultLocation(bt, loc)
        if err != nil {
                return fmt.Errorf(`failed to parse "clock" flag: %s`, err)
        }
+
        htime.Clock = clock.Start(t)
        return nil
 }
@@ -359,14 +359,15 @@ func (c *commandeer) loadConfig() error {
 
        c.configFiles = configFiles
 
-       err = c.initClock()
-       if err != nil {
-               return err
+       var ok bool
+       c.languages, ok = c.Cfg.Get("languagesSorted").(langs.Languages)
+       if !ok {
+               panic("languages not configured")
        }
 
-       if l, ok := c.Cfg.Get("languagesSorted").(langs.Languages); ok {
-               c.languagesConfigured = true
-               c.languages = l
+       err = c.initClock(langs.GetLocation(c.languages[0]))
+       if err != nil {
+               return err
        }
 
        // Set some commonly used flags
index 97e6d21134d154a9ec98363db4d0e028c9080fa5..d55a4e9aab30a4a8209426a8f2262c7ee55cc273 100644 (file)
@@ -281,7 +281,7 @@ func (cc *hugoBuilderCommon) handleCommonBuilderFlags(cmd *cobra.Command) {
        cmd.PersistentFlags().StringVarP(&cc.environment, "environment", "e", "", "build environment")
        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().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) {
index 61160b7dd067e212fc8775d42af5dcba62a26425..1e132664275b824532c32391fe2b995f91c23e64 100644 (file)
@@ -21,7 +21,9 @@ import (
        "strings"
        "testing"
 
+       "github.com/bep/clock"
        qt "github.com/frankban/quicktest"
+       "github.com/gohugoio/hugo/common/htime"
        "github.com/gohugoio/hugo/hugofs"
        "github.com/spf13/afero"
        "golang.org/x/tools/txtar"
@@ -29,6 +31,7 @@ import (
 
 // Issue #5662
 func TestHugoWithContentDirOverride(t *testing.T) {
+       t.Parallel()
        c := qt.New(t)
 
        files := `
@@ -50,6 +53,7 @@ Page: {{ .Title }}|
 
 // Issue #9794
 func TestHugoStaticFilesMultipleStaticAndManyFolders(t *testing.T) {
+       t.Parallel()
        c := qt.New(t)
 
        files := `
@@ -95,12 +99,15 @@ Home.
 
 // Issue #8787
 func TestHugoListCommandsWithClockFlag(t *testing.T) {
+       t.Cleanup(func() { htime.Clock = clock.System() })
+
        c := qt.New(t)
 
        files := `
 -- config.toml --
 baseURL = "https://example.org"
 title = "Hugo Commands"
+timeZone = "UTC"
 -- content/past.md --
 ---
 title: "Past"
@@ -115,7 +122,9 @@ date: 2200-11-06
 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")
        s.AssertStdout(p + ",2200-11-06T00:00:00Z")
 
@@ -130,7 +139,9 @@ type testHugoCmdBuilder struct {
        dir   string
        files string
        args  []string
-       out   string
+
+       captureOut bool
+       out        string
 }
 
 func newTestHugoCmdBuilder(c *qt.C, files string, args []string) *testHugoCmdBuilder {
@@ -156,12 +167,17 @@ func (s *testHugoCmdBuilder) Build() *testHugoCmdBuilder {
        args := append(s.args, "-s="+s.dir, "--quiet")
        cmd.SetArgs(args)
 
-       out, err := captureStdout(func() error {
+       if s.captureOut {
+               out, err := captureStdout(func() error {
+                       _, err := cmd.ExecuteC()
+                       return err
+               })
+               s.Assert(err, qt.IsNil)
+               s.out = out
+       } else {
                _, err := cmd.ExecuteC()
-               return err
-       })
-       s.Assert(err, qt.IsNil)
-       s.out = out
+               s.Assert(err, qt.IsNil)
+       }
 
        return s
 }
index 73e5cf073f5aa64ac978b561dbf863ebea739d85..5fdde21c588219489b5fdd22ac9c119ab8374d2c 100644 (file)
@@ -166,11 +166,6 @@ func (sc *serverCmd) server(cmd *cobra.Command, args []string) error {
                        c.Set("watch", true)
                }
 
-               // TODO(bep) yes, we should fix.
-               if !c.languagesConfigured {
-                       return nil
-               }
-
                // We can only do this once.
                serverCfgInit.Do(func() {
                        c.serverPorts = make([]serverPortListener, 1)
index d854e9312d82ded6288ff95bbd162697795b95c4..052a45ed1dde257cbf02188d6767dca8830f947b 100644 (file)
@@ -75,7 +75,8 @@ var (
                "November",
                "December",
        }
-       Clock = clock.Start(time.Now())
+
+       Clock = clock.System()
 )
 
 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)
 }
 
-// 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.
 func Now() time.Time {
        return Clock.Now()
 }
 
 func Since(t time.Time) time.Duration {
-       return Clock.Now().Sub(t)
+       return Clock.Since(t)
 }
diff --git a/go.mod b/go.mod
index 2637fcc0a73732a2f0a89c94930b50ed1a451462..428b92d3a00ec271e85e3763dc1a820fb5afb0d7 100644 (file)
--- a/go.mod
+++ b/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/sts v1.7.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/dlclark/regexp2 v1.4.0 // indirect
        github.com/go-openapi/jsonpointer v0.19.5 // indirect
diff --git a/go.sum b/go.sum
index 9d0e2b812b91ebc8fa78adc8160a1b0d37ed5328..0cf04e7f492b14ee8ebb30a37f49f025af691dd3 100644 (file)
--- a/go.sum
+++ b/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/bep/clock v0.1.0 h1:sdvJ08SsgwTY/ejA705YKBlktFfj2uVpmQSSQspZJ2c=
 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/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0=
 github.com/bep/gitmap v1.1.2 h1:zk04w1qc1COTZPPYWDQHvns3y1afOsdRfraFQ3qI840=
index 05a1c3d776f10af81b68466927d747b3e54403d0..b931731313c202e034953a68b45c2680272663c3 100644 (file)
@@ -1585,7 +1585,7 @@ func TestShouldBuild(t *testing.T) {
 
 func TestShouldBuildWithClock(t *testing.T) {
        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)
        future := time.Date(2037, 11, 17, 20, 34, 58, 651387237, time.UTC)
        zero := time.Time{}
index 7dd71f2105d7e90d339f9fb35a0def0511366e4e..4bb2ddf67bfb444d38c365faa4250bec2142ade9 100644 (file)
@@ -28,7 +28,6 @@ func init() {
                if d.Language == nil {
                        panic("Language must be set")
                }
-
                ctx := New(langs.GetTimeFormatter(d.Language), langs.GetLocation(d.Language))
 
                ns := &internal.TemplateFuncsNamespace{