Skip to content

Commit 5008ad1

Browse files
authored
Merge pull request #324 from ndeloof/9943
2 parents afd9c33 + 9670eb3 commit 5008ad1

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

loader/merge.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ var serviceSpecials = &specials{
4343
}
4444

4545
func (s *specials) Transformer(t reflect.Type) func(dst, src reflect.Value) error {
46+
// TODO this is a workaround waiting for imdario/mergo#131
47+
if t.Kind() == reflect.Pointer && t.Elem().Kind() == reflect.Bool {
48+
return func(dst, src reflect.Value) error {
49+
if dst.CanSet() && !src.IsNil() {
50+
dst.Set(src)
51+
}
52+
return nil
53+
}
54+
}
4655
if fn, ok := s.m[t]; ok {
4756
return fn
4857
}
@@ -113,7 +122,10 @@ func mergeServices(base, override []types.ServiceConfig) ([]types.ServiceConfig,
113122
}
114123

115124
func _merge(baseService *types.ServiceConfig, overrideService *types.ServiceConfig) (*types.ServiceConfig, error) {
116-
if err := mergo.Merge(baseService, overrideService, mergo.WithAppendSlice, mergo.WithOverride, mergo.WithTransformers(serviceSpecials)); err != nil {
125+
if err := mergo.Merge(baseService, overrideService,
126+
mergo.WithAppendSlice,
127+
mergo.WithOverride,
128+
mergo.WithTransformers(serviceSpecials)); err != nil {
117129
return nil, err
118130
}
119131
if overrideService.Command != nil {

loader/merge_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,6 +1110,45 @@ func TestMergeUlimitsConfig(t *testing.T) {
11101110
)
11111111
}
11121112

1113+
func TestInitOverride(t *testing.T) {
1114+
var (
1115+
bt = true
1116+
bf = false
1117+
)
1118+
cases := []struct {
1119+
base *bool
1120+
override *bool
1121+
expect bool
1122+
}{
1123+
{
1124+
base: &bt,
1125+
override: &bf,
1126+
expect: false,
1127+
},
1128+
{
1129+
base: nil,
1130+
override: &bt,
1131+
expect: true,
1132+
},
1133+
{
1134+
base: &bt,
1135+
override: nil,
1136+
expect: true,
1137+
},
1138+
}
1139+
for _, test := range cases {
1140+
base := types.ServiceConfig{
1141+
Init: test.base,
1142+
}
1143+
override := types.ServiceConfig{
1144+
Init: test.override,
1145+
}
1146+
config, err := _merge(&base, &override)
1147+
assert.NilError(t, err)
1148+
assert.Check(t, *config.Init == test.expect)
1149+
}
1150+
}
1151+
11131152
func TestMergeServiceNetworkConfig(t *testing.T) {
11141153
specials := &specials{
11151154
m: map[reflect.Type]func(dst, src reflect.Value) error{

0 commit comments

Comments
 (0)