]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
modules: Throttle the "downloading modules …" log entries
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 28 Oct 2023 15:15:34 +0000 (17:15 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 28 Oct 2023 15:15:34 +0000 (17:15 +0200)
modules/client.go
modules/collect.go

index b9a2a48d4d2d1d9d3096d7801dec80b85544ecc6..b3dad498b97c1f4abeb4d09a4314f12d42c7e417 100644 (file)
@@ -18,6 +18,7 @@ import (
        "bytes"
        "context"
        "encoding/json"
+       "errors"
        "fmt"
        "io"
        "os"
@@ -46,8 +47,6 @@ import (
 
        "github.com/gohugoio/hugo/common/hugio"
 
-       "errors"
-
        "github.com/spf13/afero"
 )
 
@@ -105,10 +104,25 @@ func NewClient(cfg ClientConfig) *Client {
                noVendor, _ = hglob.GetGlob(hglob.NormalizePath(cfg.ModuleConfig.NoVendor))
        }
 
+       var throttleSince time.Time
+       throttle := func(f func()) {
+               if throttleSince.IsZero() {
+                       throttleSince = time.Now()
+                       f()
+                       return
+               }
+               if time.Since(throttleSince) < 6*time.Second {
+                       return
+               }
+               throttleSince = time.Now()
+               f()
+       }
+
        return &Client{
                fs:                fs,
                ccfg:              cfg,
                logger:            logger,
+               throttle:          throttle,
                noVendor:          noVendor,
                moduleConfig:      mcfg,
                environ:           env,
@@ -118,8 +132,9 @@ func NewClient(cfg ClientConfig) *Client {
 
 // Client contains most of the API provided by this package.
 type Client struct {
-       fs     afero.Fs
-       logger loggers.Logger
+       fs       afero.Fs
+       logger   loggers.Logger
+       throttle func(f func())
 
        noVendor glob.Glob
 
@@ -199,7 +214,7 @@ func (c *Client) Vendor() error {
        if err := c.rmVendorDir(vendorDir); err != nil {
                return err
        }
-       if err := c.fs.MkdirAll(vendorDir, 0755); err != nil {
+       if err := c.fs.MkdirAll(vendorDir, 0o755); err != nil {
                return err
        }
 
@@ -260,7 +275,7 @@ func (c *Client) Vendor() error {
                        } else {
                                targetDir := filepath.Dir(targetFilename)
 
-                               if err := c.fs.MkdirAll(targetDir, 0755); err != nil {
+                               if err := c.fs.MkdirAll(targetDir, 0o755); err != nil {
                                        return fmt.Errorf("failed to make target dir: %w", err)
                                }
 
@@ -303,7 +318,7 @@ func (c *Client) Vendor() error {
        }
 
        if modulesContent.Len() > 0 {
-               if err := afero.WriteFile(c.fs, filepath.Join(vendorDir, vendorModulesFilename), modulesContent.Bytes(), 0666); err != nil {
+               if err := afero.WriteFile(c.fs, filepath.Join(vendorDir, vendorModulesFilename), modulesContent.Bytes(), 0o666); err != nil {
                        return err
                }
        }
@@ -558,7 +573,7 @@ func (c *Client) rewriteGoMod(name string, isGoMod map[string]bool) error {
                return err
        }
        if data != nil {
-               if err := afero.WriteFile(c.fs, filepath.Join(c.ccfg.WorkingDir, name), data, 0666); err != nil {
+               if err := afero.WriteFile(c.fs, filepath.Join(c.ccfg.WorkingDir, name), data, 0o666); err != nil {
                        return err
                }
        }
@@ -636,7 +651,8 @@ func (c *Client) rmVendorDir(vendorDir string) error {
 func (c *Client) runGo(
        ctx context.Context,
        stdout io.Writer,
-       args ...string) error {
+       args ...string,
+) error {
        if c.goBinaryStatus != 0 {
                return nil
        }
index 5b5418bcd0362b145655fdf62a9c7ac3b8bb47c9..148886607c9ddff7bc23926ffe84a7d12774f67b 100644 (file)
@@ -15,6 +15,7 @@ package modules
 
 import (
        "bufio"
+       "errors"
        "fmt"
        "os"
        "path/filepath"
@@ -22,7 +23,6 @@ import (
        "strings"
        "time"
 
-       "github.com/bep/debounce"
        "github.com/gohugoio/hugo/common/herrors"
        "github.com/gohugoio/hugo/common/loggers"
 
@@ -37,8 +37,6 @@ import (
 
        "github.com/rogpeppe/go-internal/module"
 
-       "errors"
-
        "github.com/gohugoio/hugo/config"
        "github.com/spf13/afero"
 )
@@ -124,7 +122,6 @@ func (m ModulesConfig) HasConfigFile() bool {
                if len(mod.ConfigFilenames()) > 0 {
                        return true
                }
-
        }
        return false
 }
@@ -220,7 +217,6 @@ func (c *collector) getVendoredDir(path string) (vendoredModule, bool) {
 }
 
 func (c *collector) add(owner *moduleAdapter, moduleImport Import) (*moduleAdapter, error) {
-
        var (
                mod       *goModule
                moduleDir string
@@ -509,11 +505,10 @@ LOOP:
 
 func (c *collector) collect() {
        defer c.logger.PrintTimerIfDelayed(time.Now(), "hugo: collected modules")
-       d := debounce.New(2 * time.Second)
-       d(func() {
+
+       c.throttle(func() {
                c.logger.Println("hugo: downloading modules …")
        })
-       defer d(func() {})
 
        if err := c.initModules(); err != nil {
                c.err = err
@@ -669,7 +664,6 @@ func (c *collector) normalizeMounts(owner *moduleAdapter, mounts []Mount) ([]Mou
                        } else {
                                continue
                        }
-
                }
 
                // Verify that target points to one of the predefined component dirs