codeconsole commented on code in PR #16732:
URL: https://github.com/apache/grails-core/pull/16732#discussion_r4352458664
##########
grails-core/src/main/groovy/org/grails/config/NavigableMapConfig.java:
##########
@@ -217,67 +222,29 @@ public <T> T getProperty(String key, Class<T> targetType,
T defaultValue, List<T
return value;
}
+ /**
+ * Reads the process environment again, so that a variable installed after
this config was
+ * created, as a test can do reflectively, is seen by the lookups that
follow.
+ */
+ protected void refreshSystemEnvironment() {
+ systemEnvironment = new SystemEnvironmentIndex(System.getenv());
+ }
+
@Override
public <T> T getProperty(String key, Class<T> targetType, T defaultValue) {
- Object value = findInSystemEnvironment(key);
+ Object value = systemEnvironment.get(key);
if (value == null) {
- value = getValueWithDotNotatedKeySupport(configMap, key);
+ // merge and dot-notation assignment write the flat key as well as
the nested entry, so the flat
Review Comment:
Good catch, thanks. Fixed in 1fe52b49df: the second pass of a nested dotted
key now carries the parent path, so `x: ['a.b': 'nested']` is flattened as
`x.a.b` only and the root `a.b` keeps `root`. The bug is older than this PR,
since any dotted key inside a nested map passed to `merge` also wrote a key at
the root (`config.merge([logging: [level: ['org.springframework': 'DEBUG']]])`
wrote a root `org.springframework`; the configuration files are flattened
before they are merged, so they never took that path), but with walk-first
`getProperty` happened to hide it while `config['a.b']` showed it. Pinned
exactly as you asked in `PropertySourcesConfigSpec`, `a dotted key inside a
nested map does not overwrite the root key it resembles`: `getProperty('a.b')
== 'root'`, `navigate('a', 'b') == 'root'`, `getProperty('x.a.b') == 'nested'`,
`navigate('x', 'a', 'b') == 'nested'`; and at the `NavigableMap` level in
`NavigableMapSpec` for both representations. 5f1c39aedb adds a sentence to sec
tion 17 of the upgrade guide.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]