Skip to content

Commit 87b1bc7

Browse files
authored
Merge pull request #30172 from gsmet/codestart-flattening-fix
Codestarts - Fix flattening of log levels
2 parents 5837733 + affb2c5 commit 87b1bc7

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

independent-projects/tools/codestarts/src/main/java/io/quarkus/devtools/codestarts/core/strategy/SmartConfigMergeCodestartFileStrategyHandler.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,22 @@ private void writePropertiesConfig(Path targetPath, Map<String, Object> config)
7979
static void flatten(String prefix, Map<String, String> target, Map<String, ?> map) {
8080
for (Map.Entry entry : map.entrySet()) {
8181
if (entry.getValue() instanceof Map) {
82-
flatten(prefix + entry.getKey() + ".", target, (Map) entry.getValue());
82+
flatten(prefix + quote(entry.getKey().toString()) + ".", target, (Map) entry.getValue());
8383
} else {
8484
// TODO: handle different types of values
85-
target.put(prefix + entry.getKey(), entry.getValue().toString());
85+
target.put(prefix + quote(entry.getKey().toString()), entry.getValue().toString());
8686
}
8787
}
8888
}
8989

90+
private static String quote(String key) {
91+
if (!key.contains(".")) {
92+
return key;
93+
}
94+
95+
return "\"" + key.replaceAll("\"", "\\\"") + "\"";
96+
}
97+
9098
private static String getConfigType(Map<String, Object> data) {
9199
final Optional<String> config = CodestartData.getInputCodestartForType(data, CodestartType.CONFIG);
92100
return config.orElseThrow(() -> new CodestartException("Config type is required"));

independent-projects/tools/codestarts/src/test/java/io/quarkus/devtools/codestarts/core/strategy/SmartConfigMergeCodestartFileStrategyHandlerTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,27 @@ void testFlatten() {
3434
assertThat(flat).containsEntry("c.c-c.c-c-a", "1");
3535
assertThat(flat).containsEntry("c.c-c.c-c-b", "2");
3636
}
37+
38+
@Test
39+
void testLogLevel() {
40+
final HashMap<String, Object> level = new HashMap<>();
41+
level.put("level", "DEBUG");
42+
43+
final HashMap<String, Object> categoryName = new HashMap<>();
44+
categoryName.put("org.hibernate", level);
45+
46+
final HashMap<String, Object> category = new HashMap<>();
47+
category.put("category", categoryName);
48+
49+
final HashMap<String, Object> log = new HashMap<>();
50+
log.put("log", category);
51+
52+
final HashMap<String, Object> quarkus = new HashMap<>();
53+
quarkus.put("quarkus", log);
54+
55+
final HashMap<String, String> flat = new HashMap<>();
56+
SmartConfigMergeCodestartFileStrategyHandler.flatten("", flat, quarkus);
57+
58+
assertThat(flat).containsEntry("quarkus.log.category.\"org.hibernate\".level", "DEBUG");
59+
}
3760
}

0 commit comments

Comments
 (0)