diff options
Diffstat (limited to 'modules/client.go')
-rw-r--r-- | modules/client.go | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/modules/client.go b/modules/client.go index fcb5957c3..1924cd5b4 100644 --- a/modules/client.go +++ b/modules/client.go @@ -28,6 +28,7 @@ import ( "strings" "time" + "github.com/gohugoio/hugo/common/collections" "github.com/gohugoio/hugo/common/hexec" hglob "github.com/gohugoio/hugo/hugofs/glob" @@ -79,7 +80,7 @@ func NewClient(cfg ClientConfig) *Client { goModFilename = n } - env := os.Environ() + var env []string mcfg := cfg.ModuleConfig config.SetEnvVars(&env, @@ -87,12 +88,9 @@ func NewClient(cfg ClientConfig) *Client { "GO111MODULE", "on", "GOPROXY", mcfg.Proxy, "GOPRIVATE", mcfg.Private, - "GONOPROXY", mcfg.NoProxy) - - if cfg.CacheDir != "" { - // Module cache stored below $GOPATH/pkg - config.SetEnvVars(&env, "GOPATH", cfg.CacheDir) - } + "GONOPROXY", mcfg.NoProxy, + "GOPATH", cfg.CacheDir, + ) logger := cfg.Logger if logger == nil { @@ -609,16 +607,19 @@ func (c *Client) runGo( } stderr := new(bytes.Buffer) - cmd, err := hexec.SafeCommandContext(ctx, "go", args...) + + argsv := collections.StringSliceToInterfaceSlice(args) + argsv = append(argsv, hexec.WithEnviron(c.environ)) + argsv = append(argsv, hexec.WithStderr(io.MultiWriter(stderr, os.Stderr))) + argsv = append(argsv, hexec.WithStdout(stdout)) + argsv = append(argsv, hexec.WithDir(c.ccfg.WorkingDir)) + argsv = append(argsv, hexec.WithContext(ctx)) + + cmd, err := c.ccfg.Exec.New("go", argsv...) if err != nil { return err } - cmd.Env = c.environ - cmd.Dir = c.ccfg.WorkingDir - cmd.Stdout = stdout - cmd.Stderr = io.MultiWriter(stderr, os.Stderr) - if err := cmd.Run(); err != nil { if ee, ok := err.(*exec.Error); ok && ee.Err == exec.ErrNotFound { c.goBinaryStatus = goBinaryStatusNotFound @@ -727,6 +728,8 @@ type ClientConfig struct { // Eg. "production" Environment string + Exec *hexec.Exec + CacheDir string // Module cache ModuleConfig Config } |