1
// Copyright 2012-2014 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
10
// mergeEnvironment takes in a string array representing the desired environment
11
// and merges it with the current environment. On Windows, clearing the environment,
12
// or having missing environment variables, may lead to standard go packages not working
13
// (os.TempDir relies on $env:TEMP), and powershell erroring out
14
// TODO(fwereade, gsamfira): this is copy/pasted from utils/exec.
15
// This is only used on windows, so it is safe to do in a case insensitive way.
16
func mergeWindowsEnvironment(newEnv, env []string) []string {
21
// this whole rigamarole is so that we retain the case of existing
22
// environment variables, while being case insensitive about overwriting
25
orig := make(map[string]string, len(env))
26
uppers := make(map[string]string, len(env))
27
news := map[string]string{}
29
tmpEnv := make([]string, 0, len(env))
30
for _, val := range env {
31
varSplit := strings.SplitN(val, "=", 2)
33
uppers[strings.ToUpper(k)] = varSplit[1]
37
for _, val := range newEnv {
38
varSplit := strings.SplitN(val, "=", 2)
40
if _, ok := uppers[strings.ToUpper(k)]; ok {
41
uppers[strings.ToUpper(k)] = varSplit[1]
47
for k, _ := range orig {
48
tmpEnv = append(tmpEnv, k+"="+uppers[strings.ToUpper(k)])
51
for k, v := range news {
52
tmpEnv = append(tmpEnv, k+"="+v)