aboutsummaryrefslogtreecommitdiffhomepage
path: root/tpl/debug
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2024-03-26 10:43:08 +0100
committerBjørn Erik Pedersen <[email protected]>2024-03-26 20:41:30 +0100
commit38e05bd3c7afdd676ac924222c66579978846b84 (patch)
tree581de7ea19c43a32115082054189b795802ed4a7 /tpl/debug
parentebfca61ac4d4b62b3e4a50477826a85c06b44552 (diff)
downloadhugo-38e05bd3c7afdd676ac924222c66579978846b84.tar.gz
hugo-38e05bd3c7afdd676ac924222c66579978846b84.zip
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
Diffstat (limited to 'tpl/debug')
-rw-r--r--tpl/debug/debug.go8
-rw-r--r--tpl/debug/debug_integration_test.go30
-rw-r--r--tpl/debug/init.go2
3 files changed, 37 insertions, 3 deletions
diff --git a/tpl/debug/debug.go b/tpl/debug/debug.go
index f603dd94d..027454b53 100644
--- a/tpl/debug/debug.go
+++ b/tpl/debug/debug.go
@@ -15,12 +15,12 @@
package debug
import (
+ "encoding/json"
"sort"
"sync"
"time"
"github.com/bep/logg"
- "github.com/sanity-io/litter"
"github.com/spf13/cast"
"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,
// so don't depend on a specific output.
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.
diff --git a/tpl/debug/debug_integration_test.go b/tpl/debug/debug_integration_test.go
index 9a36e2d12..52f0a427c 100644
--- a/tpl/debug/debug_integration_test.go
+++ b/tpl/debug/debug_integration_test.go
@@ -43,3 +43,33 @@ disableKinds = ["taxonomy", "term"]
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\"")
+}
diff --git a/tpl/debug/init.go b/tpl/debug/init.go
index 796a34bfc..1232a4166 100644
--- a/tpl/debug/init.go
+++ b/tpl/debug/init.go
@@ -36,7 +36,7 @@ func init() {
[][2]string{
{`{{ $m := newScratch }}
{{ $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}"},
},
)