| 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 | |
| } |