Skip to content

Commit 6347345

Browse files
authored
Merge pull request #6809 from thaJeztah/compose_rm_utils
cli/compose/loader: remove some wrapper utilities and use errors.Join
2 parents 0eda6db + 13c993f commit 6347345

File tree

1 file changed

+18
-37
lines changed

1 file changed

+18
-37
lines changed

cli/compose/loader/merge.go

Lines changed: 18 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package loader
55

66
import (
77
"cmp"
8+
"errors"
89
"fmt"
910
"reflect"
1011
"slices"
@@ -28,26 +29,26 @@ func (s *specials) Transformer(t reflect.Type) func(dst, src reflect.Value) erro
2829
func merge(configs []*types.Config) (*types.Config, error) {
2930
base := configs[0]
3031
for _, override := range configs[1:] {
31-
var err error
32-
base.Services, err = mergeServices(base.Services, override.Services)
33-
if err != nil {
34-
return base, fmt.Errorf("cannot merge services from %s: %w", override.Filename, err)
32+
var errs []error
33+
if services, err := mergeServices(base.Services, override.Services); err != nil {
34+
errs = append(errs, fmt.Errorf("cannot merge services: %w", err))
35+
} else {
36+
base.Services = services
3537
}
36-
base.Volumes, err = mergeVolumes(base.Volumes, override.Volumes)
37-
if err != nil {
38-
return base, fmt.Errorf("cannot merge volumes from %s: %w", override.Filename, err)
38+
if err := mergo.Map(&base.Volumes, &override.Volumes, mergo.WithOverride); err != nil {
39+
errs = append(errs, fmt.Errorf("cannot merge volumes: %w", err))
3940
}
40-
base.Networks, err = mergeNetworks(base.Networks, override.Networks)
41-
if err != nil {
42-
return base, fmt.Errorf("cannot merge networks from %s: %w", override.Filename, err)
41+
if err := mergo.Map(&base.Networks, &override.Networks, mergo.WithOverride); err != nil {
42+
errs = append(errs, fmt.Errorf("cannot merge networks: %w", err))
4343
}
44-
base.Secrets, err = mergeSecrets(base.Secrets, override.Secrets)
45-
if err != nil {
46-
return base, fmt.Errorf("cannot merge secrets from %s: %w", override.Filename, err)
44+
if err := mergo.Map(&base.Secrets, &override.Secrets, mergo.WithOverride); err != nil {
45+
errs = append(errs, fmt.Errorf("cannot merge secrets: %w", err))
4746
}
48-
base.Configs, err = mergeConfigs(base.Configs, override.Configs)
49-
if err != nil {
50-
return base, fmt.Errorf("cannot merge configs from %s: %w", override.Filename, err)
47+
if err := mergo.Map(&base.Configs, &override.Configs, mergo.WithOverride); err != nil {
48+
errs = append(errs, fmt.Errorf("cannot merge configs: %w", err))
49+
}
50+
if err := errors.Join(errs...); err != nil {
51+
return nil, errors.Join(fmt.Errorf("failed to merge file %s", override.Filename), err)
5152
}
5253
}
5354
return base, nil
@@ -78,7 +79,7 @@ func mergeServices(base, override []types.ServiceConfig) ([]types.ServiceConfig,
7879
for _, overrideService := range override {
7980
if baseService, ok := baseServices[overrideService.Name]; ok {
8081
if err := mergo.Merge(&baseService, &overrideService, mergeOpts...); err != nil {
81-
return base, fmt.Errorf("cannot merge service %s: %w", overrideService.Name, err)
82+
return nil, fmt.Errorf("cannot merge service %s: %w", overrideService.Name, err)
8283
}
8384
baseServices[overrideService.Name] = baseService
8485
continue
@@ -284,23 +285,3 @@ func mergeUint64(dst, src reflect.Value) error {
284285
}
285286
return nil
286287
}
287-
288-
func mergeVolumes(base, override map[string]types.VolumeConfig) (map[string]types.VolumeConfig, error) {
289-
err := mergo.Map(&base, &override, mergo.WithOverride)
290-
return base, err
291-
}
292-
293-
func mergeNetworks(base, override map[string]types.NetworkConfig) (map[string]types.NetworkConfig, error) {
294-
err := mergo.Map(&base, &override, mergo.WithOverride)
295-
return base, err
296-
}
297-
298-
func mergeSecrets(base, override map[string]types.SecretConfig) (map[string]types.SecretConfig, error) {
299-
err := mergo.Map(&base, &override, mergo.WithOverride)
300-
return base, err
301-
}
302-
303-
func mergeConfigs(base, override map[string]types.ConfigObjConfig) (map[string]types.ConfigObjConfig, error) {
304-
err := mergo.Map(&base, &override, mergo.WithOverride)
305-
return base, err
306-
}

0 commit comments

Comments
 (0)