From 60a2cdf72db31d746da21ab2e32b6c51830b5fd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Tue, 13 Jun 2023 18:01:23 +0200 Subject: Fix config merge regression with root slices (e.g. disableKinds) Fixes #11089 --- config/allconfig/allconfig.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'config') diff --git a/config/allconfig/allconfig.go b/config/allconfig/allconfig.go index ade9607dd..08792d870 100644 --- a/config/allconfig/allconfig.go +++ b/config/allconfig/allconfig.go @@ -191,6 +191,22 @@ type configCompiler interface { func (c Config) cloneForLang() *Config { x := c x.C = nil + copyStringSlice := func(in []string) []string { + if in == nil { + return nil + } + out := make([]string, len(in)) + copy(out, in) + return out + } + + // Copy all the slices to avoid sharing. + x.DisableKinds = copyStringSlice(x.DisableKinds) + x.DisableLanguages = copyStringSlice(x.DisableLanguages) + x.MainSections = copyStringSlice(x.MainSections) + x.IgnoreErrors = copyStringSlice(x.IgnoreErrors) + x.IgnoreFiles = copyStringSlice(x.IgnoreFiles) + x.Theme = copyStringSlice(x.Theme) // Collapse all static dirs to one. x.StaticDir = x.staticDirs() @@ -787,12 +803,14 @@ func fromLoadConfigResult(fs afero.Fs, logger loggers.Logger, res config.LoadCon // Create a copy of the complete config and replace the root keys with the language specific ones. clone := all.cloneForLang() + if err := decodeConfigFromParams(fs, bcfg, mergedConfig, clone, differentRootKeys); err != nil { return nil, fmt.Errorf("failed to decode config for language %q: %w", k, err) } if err := clone.CompileConfig(logger); err != nil { return nil, err } + langConfigMap[k] = clone case maps.ParamsMergeStrategy: default: -- cgit v1.2.3