Set temporary env vars properly rather than setting/unsetting
diff --git a/gexec/build.go b/gexec/build.go index e798900..462f033 100644 --- a/gexec/build.go +++ b/gexec/build.go
@@ -24,25 +24,24 @@ Build uses the $GOPATH set in your environment. It passes the variadic args on to `go build`. */ func Build(packagePath string, args ...string) (compiledPath string, err error) { - return BuildIn(os.Getenv("GOPATH"), packagePath, args...) + return doBuild(os.Getenv("GOPATH"), packagePath, nil, args...) } /* BuildWithEnvironment is identical to Build but allows you to specify env vars to be set at build time. */ func BuildWithEnvironment(packagePath string, env map[string]string, args ...string) (compiledPath string, err error) { - for key, val := range env { - os.Setenv(key, val) - defer os.Unsetenv(key) - } - - return BuildIn(os.Getenv("GOPATH"), packagePath, args...) + return doBuild(os.Getenv("GOPATH"), packagePath, env, args...) } /* BuildIn is identical to Build but allows you to specify a custom $GOPATH (the first argument). */ func BuildIn(gopath string, packagePath string, args ...string) (compiledPath string, err error) { + return doBuild(gopath, packagePath, nil, args...) +} + +func doBuild(gopath, packagePath string, env map[string]string, args ...string) (compiledPath string, err error) { tmpDir, err := temporaryDirectory() if err != nil { return "", err @@ -63,6 +62,11 @@ build := exec.Command("go", cmdArgs...) build.Env = append([]string{"GOPATH=" + gopath}, os.Environ()...) + for k, v := range env { + envVar := k + "=" + v + build.Env = append(build.Env, envVar) + } + output, err := build.CombinedOutput() if err != nil { return "", fmt.Errorf("Failed to build %s:\n\nError:\n%s\n\nOutput:\n%s", packagePath, err, string(output))