@@ -39,6 +39,8 @@ type merger func(any, any, tree.Path) (any, error)
39
39
var mergeSpecials = map [tree.Path ]merger {}
40
40
41
41
func init () {
42
+ mergeSpecials ["services.*.build" ] = mergeBuild
43
+ mergeSpecials ["services.*.depends_on" ] = mergeDependsOn
42
44
mergeSpecials ["services.*.logging" ] = mergeLogging
43
45
mergeSpecials ["services.*.networks" ] = mergeNetworks
44
46
mergeSpecials ["services.*.command" ] = override
@@ -107,9 +109,36 @@ func mergeLogging(c any, o any, p tree.Path) (any, error) {
107
109
return other , nil
108
110
}
109
111
112
+ func mergeBuild (c any , o any , path tree.Path ) (any , error ) {
113
+ toBuild := func (c any ) map [string ]any {
114
+ switch v := c .(type ) {
115
+ case string :
116
+ return map [string ]any {
117
+ "context" : v ,
118
+ }
119
+ case map [string ]any :
120
+ return v
121
+ }
122
+ return nil
123
+ }
124
+ return mergeMappings (toBuild (c ), toBuild (o ), path )
125
+ }
126
+
127
+ func mergeDependsOn (c any , o any , path tree.Path ) (any , error ) {
128
+ right := convertIntoMapping (c , map [string ]any {
129
+ "condition" : "service_started" ,
130
+ "required" : true ,
131
+ })
132
+ left := convertIntoMapping (o , map [string ]any {
133
+ "condition" : "service_started" ,
134
+ "required" : true ,
135
+ })
136
+ return mergeMappings (right , left , path )
137
+ }
138
+
110
139
func mergeNetworks (c any , o any , path tree.Path ) (any , error ) {
111
- right := convertIntoMapping (c )
112
- left := convertIntoMapping (o )
140
+ right := convertIntoMapping (c , nil )
141
+ left := convertIntoMapping (o , nil )
113
142
return mergeMappings (right , left , path )
114
143
}
115
144
@@ -151,14 +180,14 @@ func mergeUlimit(_ any, o any, p tree.Path) (any, error) {
151
180
return o , nil
152
181
}
153
182
154
- func convertIntoMapping (a any ) map [string ]any {
183
+ func convertIntoMapping (a any , defaultValue any ) map [string ]any {
155
184
switch v := a .(type ) {
156
185
case map [string ]any :
157
186
return v
158
187
case []any :
159
188
converted := map [string ]any {}
160
189
for _ , s := range v {
161
- converted [s .(string )] = nil
190
+ converted [s .(string )] = defaultValue
162
191
}
163
192
return converted
164
193
}
0 commit comments