aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2024-10-20 11:25:16 +0200
committerBjørn Erik Pedersen <[email protected]>2024-10-20 13:04:58 +0200
commit352be5ba8702017997587b3b99c42e66857b0627 (patch)
treecdb44bb7166606f3587627dfb989d0cd2fe8d83a
parentd37606d2c2174e20cfba5150812da83378078f09 (diff)
downloadhugo-352be5ba8702017997587b3b99c42e66857b0627.tar.gz
hugo-352be5ba8702017997587b3b99c42e66857b0627.zip
Make sure that HugoSites is always closed when done
Including all the integration tests.
-rw-r--r--commands/commandeer.go19
-rw-r--r--commands/server.go4
-rw-r--r--deps/deps.go7
-rw-r--r--hugolib/integrationtest_builder.go6
4 files changed, 32 insertions, 4 deletions
diff --git a/commands/commandeer.go b/commands/commandeer.go
index 06565d45d..ad2adf3a2 100644
--- a/commands/commandeer.go
+++ b/commands/commandeer.go
@@ -42,6 +42,7 @@ import (
"github.com/gohugoio/hugo/common/hugo"
"github.com/gohugoio/hugo/common/loggers"
"github.com/gohugoio/hugo/common/paths"
+ "github.com/gohugoio/hugo/common/types"
"github.com/gohugoio/hugo/config"
"github.com/gohugoio/hugo/config/allconfig"
"github.com/gohugoio/hugo/deps"
@@ -66,6 +67,12 @@ func Execute(args []string) error {
}
args = mapLegacyArgs(args)
cd, err := x.Execute(context.Background(), args)
+ if cd != nil {
+ if closer, ok := cd.Root.Command.(types.Closer); ok {
+ closer.Close()
+ }
+ }
+
if err != nil {
if err == errHelp {
cd.CobraCommand.Help()
@@ -149,6 +156,18 @@ func (r *rootCommand) isVerbose() bool {
return r.logger.Level() <= logg.LevelInfo
}
+func (r *rootCommand) Close() error {
+ if r.hugoSites != nil {
+ r.hugoSites.DeleteFunc(func(key configKey, value *hugolib.HugoSites) bool {
+ if value != nil {
+ value.Close()
+ }
+ return false
+ })
+ }
+ return nil
+}
+
func (r *rootCommand) Build(cd *simplecobra.Commandeer, bcfg hugolib.BuildCfg, cfg config.Provider) (*hugolib.HugoSites, error) {
h, err := r.Hugo(cfg)
if err != nil {
diff --git a/commands/server.go b/commands/server.go
index b16bf3148..84d4165f0 100644
--- a/commands/server.go
+++ b/commands/server.go
@@ -1012,10 +1012,6 @@ func (c *serverCommand) serve() error {
c.r.Println("Error:", err)
}
- if h := c.hugoTry(); h != nil {
- h.Close()
- }
-
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
wg2, ctx := errgroup.WithContext(ctx)
diff --git a/deps/deps.go b/deps/deps.go
index e137aed7b..4389036cb 100644
--- a/deps/deps.go
+++ b/deps/deps.go
@@ -98,6 +98,8 @@ type Deps struct {
// TODO(bep) rethink this re. a plugin setup, but this will have to do for now.
WasmDispatchers *warpc.Dispatchers
+ isClosed bool
+
*globalErrHandler
}
@@ -345,6 +347,11 @@ func (d *Deps) TextTmpl() tpl.TemplateParseFinder {
}
func (d *Deps) Close() error {
+ if d.isClosed {
+ return nil
+ }
+ d.isClosed = true
+
if d.MemCache != nil {
d.MemCache.Stop()
}
diff --git a/hugolib/integrationtest_builder.go b/hugolib/integrationtest_builder.go
index 551b807db..b45defb42 100644
--- a/hugolib/integrationtest_builder.go
+++ b/hugolib/integrationtest_builder.go
@@ -421,6 +421,12 @@ func (s *IntegrationTestBuilder) Build() *IntegrationTestBuilder {
s.Assert(err, qt.IsNil)
}
+ s.Cleanup(func() {
+ if h := s.H; h != nil {
+ s.Assert(h.Close(), qt.IsNil)
+ }
+ })
+
return s
}