Browse Source

Document properties whose default values have changed

This commit adds a new section in the Configuration Changelog to
indicate properties whose default values have changed.

See gh-48962

Signed-off-by: junpak <junpak.park@gmail.com>
pull/49028/head
junpak 1 week ago committed by Stéphane Nicoll
parent
commit
d760b171c3
  1. 13
      configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/main/java/org/springframework/boot/configurationmetadata/changelog/ChangelogWriter.java
  2. 5
      configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/main/java/org/springframework/boot/configurationmetadata/changelog/Difference.java
  3. 7
      configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/main/java/org/springframework/boot/configurationmetadata/changelog/DifferenceType.java
  4. 9
      configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/test/java/org/springframework/boot/configurationmetadata/changelog/ChangelogTests.java
  5. 14
      configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample-1.0.json
  6. 12
      configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample-2.0.json
  7. 16
      configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample.adoc

13
configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/main/java/org/springframework/boot/configurationmetadata/changelog/ChangelogWriter.java

@ -68,6 +68,8 @@ class ChangelogWriter implements AutoCloseable { @@ -68,6 +68,8 @@ class ChangelogWriter implements AutoCloseable {
String newVersionNumber = changelog.newVersionNumber();
Map<DifferenceType, List<Difference>> differencesByType = collateByType(changelog);
write("Configuration property changes between `%s` and `%s`%n", oldVersionNumber, newVersionNumber);
write("%n%n%n== Default Value Changed in %s%n%n", newVersionNumber);
writeDefaultValueChanged(differencesByType.get(DifferenceType.DEFAULT_VALUE_CHANGED));
write("%n%n%n== Deprecated in %s%n%n", newVersionNumber);
writeDeprecated(differencesByType.get(DifferenceType.DEPRECATED));
write("%n%n%n== Added in %s%n%n", newVersionNumber);
@ -98,6 +100,17 @@ class ChangelogWriter implements AutoCloseable { @@ -98,6 +100,17 @@ class ChangelogWriter implements AutoCloseable {
writeDeprecatedPropertyRow(difference.newProperty());
}
private void writeDefaultValueChanged(List<Difference> differences) {
List<Difference> rows = sortProperties(differences, Difference::newProperty);
writeTable("| Key | Old Default | New Default", rows, this::writeDefaultValueChanged);
}
private void writeDefaultValueChanged(Difference difference) {
writeCell(monospace(difference.newProperty().getId()));
writeCell(monospace(asString(difference.oldProperty().getDefaultValue())));
writeCell(monospace(asString(difference.newProperty().getDefaultValue())));
}
private void writeAdded(List<Difference> differences) {
List<Difference> rows = sortProperties(differences, Difference::newProperty);
writeTable("| Key | Default value | Description", rows, this::writeAdded);

5
configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/main/java/org/springframework/boot/configurationmetadata/changelog/Difference.java

@ -16,6 +16,8 @@ @@ -16,6 +16,8 @@
package org.springframework.boot.configurationmetadata.changelog;
import java.util.Objects;
import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty;
import org.springframework.boot.configurationmetadata.Deprecation.Level;
@ -49,6 +51,9 @@ record Difference(DifferenceType type, ConfigurationMetadataProperty oldProperty @@ -49,6 +51,9 @@ record Difference(DifferenceType type, ConfigurationMetadataProperty oldProperty
&& newProperty.isDeprecated() && newProperty.getDeprecation().getLevel() == Level.ERROR) {
return new Difference(DifferenceType.DELETED, oldProperty, newProperty);
}
if (!Objects.equals(oldProperty.getDefaultValue(), newProperty.getDefaultValue())) {
return new Difference(DifferenceType.DEFAULT_VALUE_CHANGED, oldProperty, newProperty);
}
return null;
}

7
configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/main/java/org/springframework/boot/configurationmetadata/changelog/DifferenceType.java

@ -37,6 +37,11 @@ enum DifferenceType { @@ -37,6 +37,11 @@ enum DifferenceType {
/**
* The entry has been deleted.
*/
DELETED
DELETED,
/**
* The entry's default value has been changed.
*/
DEFAULT_VALUE_CHANGED
}

9
configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/test/java/org/springframework/boot/configurationmetadata/changelog/ChangelogTests.java

@ -39,7 +39,7 @@ class ChangelogTests { @@ -39,7 +39,7 @@ class ChangelogTests {
assertThat(differences).isNotNull();
assertThat(differences.oldVersionNumber()).isEqualTo("1.0");
assertThat(differences.newVersionNumber()).isEqualTo("2.0");
assertThat(differences.differences()).hasSize(7);
assertThat(differences.differences()).hasSize(9);
List<Difference> added = differences.differences()
.stream()
.filter((difference) -> difference.type() == DifferenceType.ADDED)
@ -65,6 +65,13 @@ class ChangelogTests { @@ -65,6 +65,13 @@ class ChangelogTests {
assertThat(deprecated).hasSize(1);
assertProperty(deprecated.get(0).oldProperty(), "test.deprecate", String.class, "wrong");
assertProperty(deprecated.get(0).newProperty(), "test.deprecate", String.class, "wrong");
List<Difference> defaultValueChanged = differences.differences()
.stream()
.filter((difference) -> difference.type() == DifferenceType.DEFAULT_VALUE_CHANGED)
.toList();
assertThat(defaultValueChanged).hasSize(2)
.anySatisfy((entry) -> assertProperty(entry.newProperty(), "test.default.change", String.class, "new"))
.anySatisfy((entry) -> assertThat(entry.newProperty().getId()).isEqualTo("test.array.change"));
}
private void assertProperty(ConfigurationMetadataProperty property, String id, Class<?> type, Object defaultValue) {

14
configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample-1.0.json

@ -6,6 +6,12 @@ @@ -6,6 +6,12 @@
"description": "Test equality.",
"defaultValue": "test"
},
{
"name": "test.default.change",
"type": "java.lang.String",
"description": "Test default value change.",
"defaultValue": "old"
},
{
"name": "test.replace",
"type": "java.lang.String",
@ -41,6 +47,12 @@ @@ -41,6 +47,12 @@
"deprecation": {
"level": "error"
}
},
{
"name": "test.array.change",
"type": "java.lang.String[]",
"description": "Test array default value change.",
"defaultValue": ["a", "b"]
}
]
}
}

12
configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample-2.0.json

@ -6,6 +6,12 @@ @@ -6,6 +6,12 @@
"description": "Test add.",
"defaultValue": "new"
},
{
"name": "test.default.change",
"type": "java.lang.String",
"description": "Test default value change.",
"defaultValue": "new"
},
{
"name": "test.replace",
"type": "java.lang.String",
@ -60,6 +66,12 @@ @@ -60,6 +66,12 @@
"replacement": "test.new.property",
"reason": "removed in third-party library without deprecation"
}
},
{
"name": "test.array.change",
"type": "java.lang.String[]",
"description": "Test array default value change.",
"defaultValue": ["a", "b", "c"]
}
]
}

16
configuration-metadata/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample.adoc

@ -2,6 +2,22 @@ Configuration property changes between `1.0` and `2.0` @@ -2,6 +2,22 @@ Configuration property changes between `1.0` and `2.0`
== Default Value Changed in 2.0
|======================
| Key | Old Default | New Default
| `test.array.change`
| `a, b`
| `a, b, c`
| `test.default.change`
| `old`
| `new`
|======================
== Deprecated in 2.0
|======================

Loading…
Cancel
Save