mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
modules: Throttle the "downloading modules …" log entries
This commit is contained in:
parent
e54139c85b
commit
66904097e0
2 changed files with 28 additions and 18 deletions
|
@ -18,6 +18,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
@ -46,8 +47,6 @@ import (
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/hugio"
|
"github.com/gohugoio/hugo/common/hugio"
|
||||||
|
|
||||||
"errors"
|
|
||||||
|
|
||||||
"github.com/spf13/afero"
|
"github.com/spf13/afero"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -105,10 +104,25 @@ func NewClient(cfg ClientConfig) *Client {
|
||||||
noVendor, _ = hglob.GetGlob(hglob.NormalizePath(cfg.ModuleConfig.NoVendor))
|
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{
|
return &Client{
|
||||||
fs: fs,
|
fs: fs,
|
||||||
ccfg: cfg,
|
ccfg: cfg,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
|
throttle: throttle,
|
||||||
noVendor: noVendor,
|
noVendor: noVendor,
|
||||||
moduleConfig: mcfg,
|
moduleConfig: mcfg,
|
||||||
environ: env,
|
environ: env,
|
||||||
|
@ -118,8 +132,9 @@ func NewClient(cfg ClientConfig) *Client {
|
||||||
|
|
||||||
// Client contains most of the API provided by this package.
|
// Client contains most of the API provided by this package.
|
||||||
type Client struct {
|
type Client struct {
|
||||||
fs afero.Fs
|
fs afero.Fs
|
||||||
logger loggers.Logger
|
logger loggers.Logger
|
||||||
|
throttle func(f func())
|
||||||
|
|
||||||
noVendor glob.Glob
|
noVendor glob.Glob
|
||||||
|
|
||||||
|
@ -199,7 +214,7 @@ func (c *Client) Vendor() error {
|
||||||
if err := c.rmVendorDir(vendorDir); err != nil {
|
if err := c.rmVendorDir(vendorDir); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.fs.MkdirAll(vendorDir, 0755); err != nil {
|
if err := c.fs.MkdirAll(vendorDir, 0o755); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,7 +275,7 @@ func (c *Client) Vendor() error {
|
||||||
} else {
|
} else {
|
||||||
targetDir := filepath.Dir(targetFilename)
|
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)
|
return fmt.Errorf("failed to make target dir: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,7 +318,7 @@ func (c *Client) Vendor() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if modulesContent.Len() > 0 {
|
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
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -558,7 +573,7 @@ func (c *Client) rewriteGoMod(name string, isGoMod map[string]bool) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if data != nil {
|
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
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -636,7 +651,8 @@ func (c *Client) rmVendorDir(vendorDir string) error {
|
||||||
func (c *Client) runGo(
|
func (c *Client) runGo(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
stdout io.Writer,
|
stdout io.Writer,
|
||||||
args ...string) error {
|
args ...string,
|
||||||
|
) error {
|
||||||
if c.goBinaryStatus != 0 {
|
if c.goBinaryStatus != 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ package modules
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -22,7 +23,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bep/debounce"
|
|
||||||
"github.com/gohugoio/hugo/common/herrors"
|
"github.com/gohugoio/hugo/common/herrors"
|
||||||
"github.com/gohugoio/hugo/common/loggers"
|
"github.com/gohugoio/hugo/common/loggers"
|
||||||
|
|
||||||
|
@ -37,8 +37,6 @@ import (
|
||||||
|
|
||||||
"github.com/rogpeppe/go-internal/module"
|
"github.com/rogpeppe/go-internal/module"
|
||||||
|
|
||||||
"errors"
|
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/config"
|
"github.com/gohugoio/hugo/config"
|
||||||
"github.com/spf13/afero"
|
"github.com/spf13/afero"
|
||||||
)
|
)
|
||||||
|
@ -124,7 +122,6 @@ func (m ModulesConfig) HasConfigFile() bool {
|
||||||
if len(mod.ConfigFilenames()) > 0 {
|
if len(mod.ConfigFilenames()) > 0 {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -220,7 +217,6 @@ func (c *collector) getVendoredDir(path string) (vendoredModule, bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *collector) add(owner *moduleAdapter, moduleImport Import) (*moduleAdapter, error) {
|
func (c *collector) add(owner *moduleAdapter, moduleImport Import) (*moduleAdapter, error) {
|
||||||
|
|
||||||
var (
|
var (
|
||||||
mod *goModule
|
mod *goModule
|
||||||
moduleDir string
|
moduleDir string
|
||||||
|
@ -509,11 +505,10 @@ LOOP:
|
||||||
|
|
||||||
func (c *collector) collect() {
|
func (c *collector) collect() {
|
||||||
defer c.logger.PrintTimerIfDelayed(time.Now(), "hugo: collected modules")
|
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 …")
|
c.logger.Println("hugo: downloading modules …")
|
||||||
})
|
})
|
||||||
defer d(func() {})
|
|
||||||
|
|
||||||
if err := c.initModules(); err != nil {
|
if err := c.initModules(); err != nil {
|
||||||
c.err = err
|
c.err = err
|
||||||
|
@ -669,7 +664,6 @@ func (c *collector) normalizeMounts(owner *moduleAdapter, mounts []Mount) ([]Mou
|
||||||
} else {
|
} else {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify that target points to one of the predefined component dirs
|
// Verify that target points to one of the predefined component dirs
|
||||||
|
|
Loading…
Reference in a new issue