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 { index := strings.Index(e, "=") cache[e[:index]] = i } for _, value := range overrides { // Values w/o = means they want this env to be removed/unset. index := strings.Index(value, "=") if index < 0 { // no "=" in value if i, exists := cache[value]; exists { defaults[i] = "" // Used to indicate it should be removed } continue } if i, exists := cache[value[:index]]; 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 }