mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package container // import "github.com/docker/docker/container"
 | 
						|
 | 
						|
import (
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
// ReplaceOrAppendEnvValues returns the defaults with the overrides either
 | 
						|
// replaced by env key or appended to the list
 | 
						|
func ReplaceOrAppendEnvValues(defaults, overrides []string) []string {
 | 
						|
	cache := make(map[string]int, len(defaults))
 | 
						|
	for i, e := range defaults {
 | 
						|
		parts := strings.SplitN(e, "=", 2)
 | 
						|
		cache[parts[0]] = i
 | 
						|
	}
 | 
						|
 | 
						|
	for _, value := range overrides {
 | 
						|
		// Values w/o = means they want this env to be removed/unset.
 | 
						|
		if !strings.Contains(value, "=") {
 | 
						|
			if i, exists := cache[value]; exists {
 | 
						|
				defaults[i] = "" // Used to indicate it should be removed
 | 
						|
			}
 | 
						|
			continue
 | 
						|
		}
 | 
						|
 | 
						|
		// Just do a normal set/update
 | 
						|
		parts := strings.SplitN(value, "=", 2)
 | 
						|
		if i, exists := cache[parts[0]]; exists {
 | 
						|
			defaults[i] = value
 | 
						|
		} else {
 | 
						|
			defaults = append(defaults, value)
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	// Now remove all entries that we want to "unset"
 | 
						|
	for i := 0; i < len(defaults); i++ {
 | 
						|
		if defaults[i] == "" {
 | 
						|
			defaults = append(defaults[:i], defaults[i+1:]...)
 | 
						|
			i--
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return defaults
 | 
						|
}
 |