diff --git a/cli/compose/loader/loader.go b/cli/compose/loader/loader.go index dda62f862eaa..b8f725cb1a9e 100644 --- a/cli/compose/loader/loader.go +++ b/cli/compose/loader/loader.go @@ -322,26 +322,26 @@ type Transformer struct { func createTransformHook(additionalTransformers ...Transformer) mapstructure.DecodeHookFuncType { transforms := map[reflect.Type]func(any) (any, error){ - reflect.TypeOf(types.External{}): transformExternal, - reflect.TypeOf(types.HealthCheckTest{}): transformHealthCheckTest, - reflect.TypeOf(types.ShellCommand{}): transformShellCommand, - reflect.TypeOf(types.StringList{}): transformStringList, - reflect.TypeOf(map[string]string{}): transformMapStringString, - reflect.TypeOf(types.UlimitsConfig{}): transformUlimits, - reflect.TypeOf(types.UnitBytes(0)): transformSize, - reflect.TypeOf([]types.ServicePortConfig{}): transformServicePort, - reflect.TypeOf(types.ServiceSecretConfig{}): transformStringSourceMap, - reflect.TypeOf(types.ServiceConfigObjConfig{}): transformStringSourceMap, - reflect.TypeOf(types.StringOrNumberList{}): transformStringOrNumberList, - reflect.TypeOf(map[string]*types.ServiceNetworkConfig{}): transformServiceNetworkMap, - reflect.TypeOf(types.Mapping{}): transformMappingOrListFunc("=", false), - reflect.TypeOf(types.MappingWithEquals{}): transformMappingOrListFunc("=", true), - reflect.TypeOf(types.Labels{}): transformMappingOrListFunc("=", false), - reflect.TypeOf(types.MappingWithColon{}): transformMappingOrListFunc(":", false), - reflect.TypeOf(types.HostsList{}): transformHostsList, - reflect.TypeOf(types.ServiceVolumeConfig{}): transformServiceVolumeConfig, - reflect.TypeOf(types.BuildConfig{}): transformBuildConfig, - reflect.TypeOf(types.Duration(0)): transformStringToDuration, + reflect.TypeFor[types.External](): transformExternal, + reflect.TypeFor[types.HealthCheckTest](): transformHealthCheckTest, + reflect.TypeFor[types.ShellCommand](): transformShellCommand, + reflect.TypeFor[types.StringList](): transformStringList, + reflect.TypeFor[map[string]string](): transformMapStringString, + reflect.TypeFor[types.UlimitsConfig](): transformUlimits, + reflect.TypeFor[types.UnitBytes](): transformSize, + reflect.TypeFor[[]types.ServicePortConfig](): transformServicePort, + reflect.TypeFor[types.ServiceSecretConfig](): transformStringSourceMap, + reflect.TypeFor[types.ServiceConfigObjConfig](): transformStringSourceMap, + reflect.TypeFor[types.StringOrNumberList](): transformStringOrNumberList, + reflect.TypeFor[map[string]*types.ServiceNetworkConfig](): transformServiceNetworkMap, + reflect.TypeFor[types.Mapping](): transformMappingOrListFunc("=", false), + reflect.TypeFor[types.MappingWithEquals](): transformMappingOrListFunc("=", true), + reflect.TypeFor[types.Labels](): transformMappingOrListFunc("=", false), + reflect.TypeFor[types.MappingWithColon](): transformMappingOrListFunc(":", false), + reflect.TypeFor[types.HostsList](): transformHostsList, + reflect.TypeFor[types.ServiceVolumeConfig](): transformServiceVolumeConfig, + reflect.TypeFor[types.BuildConfig](): transformBuildConfig, + reflect.TypeFor[types.Duration](): transformStringToDuration, } for _, transformer := range additionalTransformers { diff --git a/cli/compose/loader/merge.go b/cli/compose/loader/merge.go index a321fd18c489..0aa61fad4673 100644 --- a/cli/compose/loader/merge.go +++ b/cli/compose/loader/merge.go @@ -56,15 +56,15 @@ func mergeServices(base, override []types.ServiceConfig) ([]types.ServiceConfig, overrideServices := mapByName(override) specials := &specials{ m: map[reflect.Type]func(dst, src reflect.Value) error{ - reflect.TypeOf(&types.LoggingConfig{}): safelyMerge(mergeLoggingConfig), - reflect.TypeOf([]types.ServicePortConfig{}): mergeSlice(toServicePortConfigsMap, toServicePortConfigsSlice), - reflect.TypeOf([]types.ServiceSecretConfig{}): mergeSlice(toServiceSecretConfigsMap, toServiceSecretConfigsSlice), - reflect.TypeOf([]types.ServiceConfigObjConfig{}): mergeSlice(toServiceConfigObjConfigsMap, toSServiceConfigObjConfigsSlice), - reflect.TypeOf(&types.UlimitsConfig{}): mergeUlimitsConfig, - reflect.TypeOf([]types.ServiceVolumeConfig{}): mergeSlice(toServiceVolumeConfigsMap, toServiceVolumeConfigsSlice), - reflect.TypeOf(types.ShellCommand{}): mergeShellCommand, - reflect.TypeOf(&types.ServiceNetworkConfig{}): mergeServiceNetworkConfig, - reflect.PointerTo(reflect.TypeOf(uint64(1))): mergeUint64, + reflect.PointerTo(reflect.TypeFor[types.LoggingConfig]()): safelyMerge(mergeLoggingConfig), + reflect.TypeFor[[]types.ServicePortConfig](): mergeSlice(toServicePortConfigsMap, toServicePortConfigsSlice), + reflect.TypeFor[[]types.ServiceSecretConfig](): mergeSlice(toServiceSecretConfigsMap, toServiceSecretConfigsSlice), + reflect.TypeFor[[]types.ServiceConfigObjConfig](): mergeSlice(toServiceConfigObjConfigsMap, toSServiceConfigObjConfigsSlice), + reflect.PointerTo(reflect.TypeFor[types.UlimitsConfig]()): mergeUlimitsConfig, + reflect.TypeFor[[]types.ServiceVolumeConfig](): mergeSlice(toServiceVolumeConfigsMap, toServiceVolumeConfigsSlice), + reflect.TypeFor[types.ShellCommand](): mergeShellCommand, + reflect.PointerTo(reflect.TypeFor[types.ServiceNetworkConfig]()): mergeServiceNetworkConfig, + reflect.PointerTo(reflect.TypeFor[uint64]()): mergeUint64, }, } for name, overrideService := range overrideServices { @@ -77,7 +77,7 @@ func mergeServices(base, override []types.ServiceConfig) ([]types.ServiceConfig, } baseServices[name] = overrideService } - services := []types.ServiceConfig{} + services := make([]types.ServiceConfig, 0, len(baseServices)) for _, baseService := range baseServices { services = append(services, baseService) }