40 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
// Copyright 2013 The Go Authors.  All rights reserved.
 | 
						|
// Use of this source code is governed by a BSD-style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package vcs
 | 
						|
 | 
						|
import (
 | 
						|
	"os"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
// envForDir returns a copy of the environment
 | 
						|
// suitable for running in the given directory.
 | 
						|
// The environment is the current process's environment
 | 
						|
// but with an updated $PWD, so that an os.Getwd in the
 | 
						|
// child will be faster.
 | 
						|
func envForDir(dir string) []string {
 | 
						|
	env := os.Environ()
 | 
						|
	// Internally we only use rooted paths, so dir is rooted.
 | 
						|
	// Even if dir is not rooted, no harm done.
 | 
						|
	return mergeEnvLists([]string{"PWD=" + dir}, env)
 | 
						|
}
 | 
						|
 | 
						|
// mergeEnvLists merges the two environment lists such that
 | 
						|
// variables with the same name in "in" replace those in "out".
 | 
						|
func mergeEnvLists(in, out []string) []string {
 | 
						|
NextVar:
 | 
						|
	for _, inkv := range in {
 | 
						|
		k := strings.SplitAfterN(inkv, "=", 2)[0]
 | 
						|
		for i, outkv := range out {
 | 
						|
			if strings.HasPrefix(outkv, k) {
 | 
						|
				out[i] = inkv
 | 
						|
				continue NextVar
 | 
						|
			}
 | 
						|
		}
 | 
						|
		out = append(out, inkv)
 | 
						|
	}
 | 
						|
	return out
 | 
						|
}
 |