From 66904097e02fc3e846ec87a9db023df92cf613ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sat, 28 Oct 2023 17:15:34 +0200 Subject: =?UTF-8?q?modules:=20Throttle=20the=20"downloading=20modules=20?= =?UTF-8?q?=E2=80=A6"=20log=20entries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/client.go | 34 +++++++++++++++++++++++++--------- modules/collect.go | 12 +++--------- 2 files changed, 28 insertions(+), 18 deletions(-) (limited to 'modules') diff --git a/modules/client.go b/modules/client.go index b9a2a48d4..b3dad498b 100644 --- a/modules/client.go +++ b/modules/client.go @@ -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 } diff --git a/modules/collect.go b/modules/collect.go index 5b5418bcd..148886607 100644 --- a/modules/collect.go +++ b/modules/collect.go @@ -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 -- cgit v1.2.3