mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
Fix panic with debug.Dump with Page when running the server
This replaces the current implementation with `json.MarshalIndent` which doesn't produce the same output, but at least it doesn't crash. There's a bug in the upstream `litter` library. This can probably be fixed, but that needs to wait. I have tested `go-spew` which does not crash, but it is very data racy in this context. FIxes #12309
This commit is contained in:
parent
ebfca61ac4
commit
38e05bd3c7
3 changed files with 37 additions and 3 deletions
|
@ -15,12 +15,12 @@
|
||||||
package debug
|
package debug
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"sort"
|
"sort"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bep/logg"
|
"github.com/bep/logg"
|
||||||
"github.com/sanity-io/litter"
|
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
"github.com/yuin/goldmark/util"
|
"github.com/yuin/goldmark/util"
|
||||||
|
|
||||||
|
@ -108,7 +108,11 @@ type Namespace struct {
|
||||||
// Also note that the output from Dump may change from Hugo version to the next,
|
// Also note that the output from Dump may change from Hugo version to the next,
|
||||||
// so don't depend on a specific output.
|
// so don't depend on a specific output.
|
||||||
func (ns *Namespace) Dump(val any) string {
|
func (ns *Namespace) Dump(val any) string {
|
||||||
return litter.Sdump(val)
|
b, err := json.MarshalIndent(val, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return string(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
// VisualizeSpaces returns a string with spaces replaced by a visible string.
|
// VisualizeSpaces returns a string with spaces replaced by a visible string.
|
||||||
|
|
|
@ -43,3 +43,33 @@ disableKinds = ["taxonomy", "term"]
|
||||||
|
|
||||||
b.AssertLogContains("timer: name foo count 5 duration")
|
b.AssertLogContains("timer: name foo count 5 duration")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDebugDumpPage(t *testing.T) {
|
||||||
|
files := `
|
||||||
|
-- hugo.toml --
|
||||||
|
baseURL = "https://example.org/"
|
||||||
|
disableLiveReload = true
|
||||||
|
[taxonomies]
|
||||||
|
tag = "tags"
|
||||||
|
-- content/_index.md --
|
||||||
|
---
|
||||||
|
title: "The Index"
|
||||||
|
date: 2012-03-15
|
||||||
|
---
|
||||||
|
-- content/p1.md --
|
||||||
|
---
|
||||||
|
title: "The First"
|
||||||
|
tags: ["a", "b"]
|
||||||
|
---
|
||||||
|
-- layouts/_default/list.html --
|
||||||
|
Dump: {{ debug.Dump . | safeHTML }}
|
||||||
|
Dump Site: {{ debug.Dump site }}
|
||||||
|
Dum site.Taxonomies: {{ debug.Dump site.Taxonomies | safeHTML }}
|
||||||
|
-- layouts/_default/single.html --
|
||||||
|
Dump: {{ debug.Dump . | safeHTML }}
|
||||||
|
|
||||||
|
|
||||||
|
`
|
||||||
|
b := hugolib.TestRunning(t, files)
|
||||||
|
b.AssertFileContent("public/index.html", "Dump: {\n \"Date\": \"2012-03-15T00:00:00Z\"")
|
||||||
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ func init() {
|
||||||
[][2]string{
|
[][2]string{
|
||||||
{`{{ $m := newScratch }}
|
{`{{ $m := newScratch }}
|
||||||
{{ $m.Set "Hugo" "Rocks!" }}
|
{{ $m.Set "Hugo" "Rocks!" }}
|
||||||
{{ $m.Values | debug.Dump | safeHTML }}`, "map[string]interface {}{\n \"Hugo\": \"Rocks!\",\n}"},
|
{{ $m.Values | debug.Dump | safeHTML }}`, "{\n \"Hugo\": \"Rocks!\"\n}"},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue