From 71d1b0507ea5bfd46ca0f99c1575de53ca049193 Mon Sep 17 00:00:00 2001 From: Aaron Lehmann Date: Tue, 4 Apr 2017 18:16:57 -0700 Subject: [PATCH] cli: Preserve order of environment variables Unless we are adding or removing environment variables, their order shouldn't be changed. This makes it look like the service's TaskSpec has changed relative to the old version of the service, and containers need to be redeployed. The existing code always rebuilds the list of environment variables by converting them to a map and back, but there's no reason to do this if no environment variables are being added. Signed-off-by: Aaron Lehmann --- command/service/update.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/command/service/update.go b/command/service/update.go index afa0f807e9..1933ff38eb 100644 --- a/command/service/update.go +++ b/command/service/update.go @@ -524,20 +524,21 @@ func updateLabels(flags *pflag.FlagSet, field *map[string]string) { } func updateEnvironment(flags *pflag.FlagSet, field *[]string) { - envSet := map[string]string{} - for _, v := range *field { - envSet[envKey(v)] = v - } if flags.Changed(flagEnvAdd) { + envSet := map[string]string{} + for _, v := range *field { + envSet[envKey(v)] = v + } + value := flags.Lookup(flagEnvAdd).Value.(*opts.ListOpts) for _, v := range value.GetAll() { envSet[envKey(v)] = v } - } - *field = []string{} - for _, v := range envSet { - *field = append(*field, v) + *field = []string{} + for _, v := range envSet { + *field = append(*field, v) + } } toRemove := buildToRemoveSet(flags, flagEnvRemove)