github.com/jd-ly/tools@v0.5.7/go/vcs/env.go (about) 1 // Copyright 2013 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package vcs 6 7 import ( 8 "os" 9 "strings" 10 ) 11 12 // envForDir returns a copy of the environment 13 // suitable for running in the given directory. 14 // The environment is the current process's environment 15 // but with an updated $PWD, so that an os.Getwd in the 16 // child will be faster. 17 func envForDir(dir string) []string { 18 env := os.Environ() 19 // Internally we only use rooted paths, so dir is rooted. 20 // Even if dir is not rooted, no harm done. 21 return mergeEnvLists([]string{"PWD=" + dir}, env) 22 } 23 24 // mergeEnvLists merges the two environment lists such that 25 // variables with the same name in "in" replace those in "out". 26 func mergeEnvLists(in, out []string) []string { 27 NextVar: 28 for _, inkv := range in { 29 k := strings.SplitAfterN(inkv, "=", 2)[0] 30 for i, outkv := range out { 31 if strings.HasPrefix(outkv, k) { 32 out[i] = inkv 33 continue NextVar 34 } 35 } 36 out = append(out, inkv) 37 } 38 return out 39 }