Skip to content

Commit 436b367

Browse files
committed
introduce _merge to merge serviceConfigs
Signed-off-by: Nicolas De Loof <[email protected]>
1 parent 0ade246 commit 436b367

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

loader/loader.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,13 @@ import (
3232
"github.com/compose-spec/compose-go/schema"
3333
"github.com/compose-spec/compose-go/template"
3434
"github.com/compose-spec/compose-go/types"
35-
units "github.com/docker/go-units"
36-
"github.com/imdario/mergo"
37-
shellwords "github.com/mattn/go-shellwords"
35+
"github.com/docker/go-units"
36+
"github.com/mattn/go-shellwords"
3837
"github.com/mitchellh/mapstructure"
3938
"github.com/pkg/errors"
4039
"github.com/sirupsen/logrus"
4140
"github.com/ulyssessouza/godotenv"
42-
yaml "gopkg.in/yaml.v2"
41+
"gopkg.in/yaml.v2"
4342
)
4443

4544
// Options supported by Load
@@ -504,10 +503,10 @@ func loadServiceWithExtends(filename, name string, servicesDict map[string]inter
504503
}
505504
}
506505

507-
if err := mergo.Merge(baseService, serviceConfig, mergo.WithAppendSlice, mergo.WithOverride, mergo.WithTransformers(serviceSpecials)); err != nil {
508-
return nil, errors.Wrapf(err, "cannot merge service %s", name)
506+
serviceConfig, err = _merge(baseService, serviceConfig)
507+
if err != nil {
508+
return nil, err
509509
}
510-
serviceConfig = baseService
511510
}
512511

513512
return serviceConfig, nil

loader/merge.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,11 @@ func mergeServices(base, override []types.ServiceConfig) ([]types.ServiceConfig,
8787
for name, overrideService := range overrideServices {
8888
overrideService := overrideService
8989
if baseService, ok := baseServices[name]; ok {
90-
if err := mergo.Merge(&baseService, &overrideService, mergo.WithAppendSlice, mergo.WithOverride, mergo.WithTransformers(serviceSpecials)); err != nil {
91-
return base, errors.Wrapf(err, "cannot merge service %s", name)
90+
merged, err := _merge(&baseService, &overrideService)
91+
if err != nil {
92+
return nil, errors.Wrapf(err, "cannot merge service %s", name)
9293
}
93-
if len(overrideService.Command) > 0 {
94-
baseService.Command = overrideService.Command
95-
}
96-
baseServices[name] = baseService
94+
baseServices[name] = *merged
9795
continue
9896
}
9997
baseServices[name] = overrideService
@@ -106,6 +104,19 @@ func mergeServices(base, override []types.ServiceConfig) ([]types.ServiceConfig,
106104
return services, nil
107105
}
108106

107+
func _merge(baseService *types.ServiceConfig, overrideService *types.ServiceConfig) (*types.ServiceConfig, error) {
108+
if err := mergo.Merge(baseService, overrideService, mergo.WithAppendSlice, mergo.WithOverride, mergo.WithTransformers(serviceSpecials)); err != nil {
109+
return nil, err
110+
}
111+
if len(overrideService.Command) > 0 {
112+
baseService.Command = overrideService.Command
113+
}
114+
if len(overrideService.Entrypoint) > 0 {
115+
baseService.Entrypoint = overrideService.Entrypoint
116+
}
117+
return baseService, nil
118+
}
119+
109120
func toServiceSecretConfigsMap(s interface{}) (map[interface{}]interface{}, error) {
110121
secrets, ok := s.([]types.ServiceSecretConfig)
111122
if !ok {

0 commit comments

Comments
 (0)