"bytes"
"context"
"encoding/json"
- "errors"
"fmt"
"io"
"os"
"github.com/gohugoio/hugo/common/hugio"
+ "errors"
+
"github.com/spf13/afero"
)
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,
// Client contains most of the API provided by this package.
type Client struct {
- fs afero.Fs
- logger loggers.Logger
- throttle func(f func())
+ fs afero.Fs
+ logger loggers.Logger
noVendor glob.Glob
if err := c.rmVendorDir(vendorDir); err != nil {
return err
}
- if err := c.fs.MkdirAll(vendorDir, 0o755); err != nil {
+ if err := c.fs.MkdirAll(vendorDir, 0755); err != nil {
return err
}
} else {
targetDir := filepath.Dir(targetFilename)
- if err := c.fs.MkdirAll(targetDir, 0o755); err != nil {
+ if err := c.fs.MkdirAll(targetDir, 0755); err != nil {
return fmt.Errorf("failed to make target dir: %w", err)
}
}
if modulesContent.Len() > 0 {
- if err := afero.WriteFile(c.fs, filepath.Join(vendorDir, vendorModulesFilename), modulesContent.Bytes(), 0o666); err != nil {
+ if err := afero.WriteFile(c.fs, filepath.Join(vendorDir, vendorModulesFilename), modulesContent.Bytes(), 0666); err != nil {
return err
}
}
return err
}
if data != nil {
- if err := afero.WriteFile(c.fs, filepath.Join(c.ccfg.WorkingDir, name), data, 0o666); err != nil {
+ if err := afero.WriteFile(c.fs, filepath.Join(c.ccfg.WorkingDir, name), data, 0666); err != nil {
return err
}
}
func (c *Client) runGo(
ctx context.Context,
stdout io.Writer,
- args ...string,
-) error {
+ args ...string) error {
if c.goBinaryStatus != 0 {
return nil
}
import (
"bufio"
- "errors"
"fmt"
"os"
"path/filepath"
"strings"
"time"
+ "github.com/bep/debounce"
"github.com/gohugoio/hugo/common/herrors"
"github.com/gohugoio/hugo/common/loggers"
"github.com/rogpeppe/go-internal/module"
+ "errors"
+
"github.com/gohugoio/hugo/config"
"github.com/spf13/afero"
)
if len(mod.ConfigFilenames()) > 0 {
return true
}
+
}
return false
}
}
func (c *collector) add(owner *moduleAdapter, moduleImport Import) (*moduleAdapter, error) {
+
var (
mod *goModule
moduleDir string
func (c *collector) collect() {
defer c.logger.PrintTimerIfDelayed(time.Now(), "hugo: collected modules")
-
- c.throttle(func() {
+ d := debounce.New(2 * time.Second)
+ d(func() {
c.logger.Println("hugo: downloading modules …")
})
+ defer d(func() {})
if err := c.initModules(); err != nil {
c.err = err
} else {
continue
}
+
}
// Verify that target points to one of the predefined component dirs