You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2022/12/19 10:21:25 UTC
[logging-log4j2] 19/33: LOG4J2-3628 Rename `unreleased.adoc` to `.x.x.adoc`.
This is an automated email from the ASF dual-hosted git repository.
vy pushed a commit to branch mvn-site-simplified
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 73bc9928357284632f6cbd75fa0edbecd5c81d02
Author: Volkan Yazıcı <vo...@yazi.ci>
AuthorDate: Thu Nov 24 10:45:58 2022 +0100
LOG4J2-3628 Rename `unreleased.adoc` to `<releaseVersionMajor>.x.x.adoc`.
---
changelog/README.adoc | 4 +-
.../logging/log4j/internal/util/XmlReader.java | 6 +--
.../internal/util/changelog/ChangelogEntry.java | 6 +--
.../util/changelog/exporter/AsciiDocExporter.java | 58 +++++++++++++++-------
.../util/changelog/importer/MavenChanges.java | 2 +-
.../util/changelog/releaser/ChangelogReleaser.java | 2 +-
.../changelog/{unreleased.adoc => 2.x.x.adoc} | 2 +-
src/site/asciidoc/changelog/index.adoc | 2 +-
8 files changed, 52 insertions(+), 30 deletions(-)
diff --git a/changelog/README.adoc b/changelog/README.adoc
index b5c4ee8de1..6564fa031d 100644
--- a/changelog/README.adoc
+++ b/changelog/README.adoc
@@ -43,7 +43,7 @@ Generator will compile these files to emit a single `{generator-target-dir}/<rel
Changelogs of the staged changes for the next version is stored in `.unreleased` directory.
Compared to released version changelog directories (e.g., `20220909-2.10.0`), `.unreleased` directory only consists of changelog entry files (i.e., `[<issueId>_]<shortSummary>.xml`).
-Generator will compile these files to emit a single `{generator-target-dir}/unreleased.adoc` file and update `{generator-target-dir}/index.adoc` accordingly.
+Generator will compile these files to emit a single `{generator-target-dir}/<releaseVersionMajor>.x.x.adoc` file and update `{generator-target-dir}/index.adoc` accordingly, where `releaseVersionMajor` is populated from the root `pom.xml` file.
[#changelog-entry-file]
== Changelog entry file
@@ -98,7 +98,7 @@ You can manually trigger it using `./mvnw -pl log4j-internal-util` command.
=== I am about to deploy a new Log4j _release candidate_. Now what?
For release candidates, you don't need to touch anything.
-Your regular build should have already populated `{generator-target-dir}/unreleased.adoc`.
+Your regular build should have already populated `{generator-target-dir}/<releaseVersionMajor>.x.x.adoc`.
**Make sure to commit these!**
=== I am about to deploy a new Log4j _release_. Now what?
diff --git a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/XmlReader.java b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/XmlReader.java
index df1b2442a1..e458177f1a 100644
--- a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/XmlReader.java
+++ b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/XmlReader.java
@@ -66,7 +66,7 @@ public final class XmlReader {
return document;
}
- public static Stream<Element> childElementsMatchingName(final Element parentElement, final String childElementName) {
+ public static Stream<Element> findChildElementsMatchingName(final Element parentElement, final String childElementName) {
final NodeList childNodes = parentElement.getChildNodes();
return IntStream
.range(0, childNodes.getLength())
@@ -75,8 +75,8 @@ public final class XmlReader {
.map(childNode -> (Element) childNode);
}
- public static Element childElementMatchingName(final Element parentElement, final String childElementName) {
- final List<Element> childElements = childElementsMatchingName(parentElement, childElementName)
+ public static Element requireChildElementMatchingName(final Element parentElement, final String childElementName) {
+ final List<Element> childElements = findChildElementsMatchingName(parentElement, childElementName)
.collect(Collectors.toList());
final int childElementCount = childElements.size();
if (childElementCount != 1) {
diff --git a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/ChangelogEntry.java b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/ChangelogEntry.java
index 5ee776afed..0f42d6186e 100644
--- a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/ChangelogEntry.java
+++ b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/ChangelogEntry.java
@@ -164,7 +164,7 @@ public final class ChangelogEntry {
// Read the `issue` elements.
final List<Issue> issues = XmlReader
- .childElementsMatchingName(entryElement, "issue")
+ .findChildElementsMatchingName(entryElement, "issue")
.map(issueElement -> {
final String issueId = XmlReader.requireAttribute(issueElement, "id");
final String issueLink = XmlReader.requireAttribute(issueElement, "link");
@@ -174,7 +174,7 @@ public final class ChangelogEntry {
// Read the `author` elements.
final List<Author> authors = XmlReader
- .childElementsMatchingName(entryElement, "author")
+ .findChildElementsMatchingName(entryElement, "author")
.map(authorElement -> {
final String authorId = authorElement.hasAttribute("id")
? authorElement.getAttribute("id")
@@ -194,7 +194,7 @@ public final class ChangelogEntry {
}
// Read the `description` element.
- final Element descriptionElement = XmlReader.childElementMatchingName(entryElement, "description");
+ final Element descriptionElement = XmlReader.requireChildElementMatchingName(entryElement, "description");
final String descriptionFormat = XmlReader.requireAttribute(descriptionElement, "format");
final String descriptionText = trimNullable(descriptionElement.getTextContent());
final Description description = new Description(descriptionFormat, descriptionText);
diff --git a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/exporter/AsciiDocExporter.java b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/exporter/AsciiDocExporter.java
index 68cb4931e3..0f8492d2b1 100644
--- a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/exporter/AsciiDocExporter.java
+++ b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/exporter/AsciiDocExporter.java
@@ -29,9 +29,14 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.logging.log4j.internal.util.AsciiDocUtils;
+import org.apache.logging.log4j.internal.util.XmlReader;
import org.apache.logging.log4j.internal.util.changelog.ChangelogEntry;
import org.apache.logging.log4j.internal.util.changelog.ChangelogFiles;
import org.apache.logging.log4j.internal.util.changelog.ChangelogRelease;
+import org.w3c.dom.Element;
+
+import static org.apache.logging.log4j.internal.util.StringUtils.isBlank;
+import static org.apache.logging.log4j.internal.util.StringUtils.trimNullable;
public final class AsciiDocExporter {
@@ -95,9 +100,13 @@ public final class AsciiDocExporter {
}
// Export unreleased.
- exportUnreleased(args.projectRootDirectory);
+ final int releaseVersionMajor = readRootPomVersionMajor(args.projectRootDirectory);
+ final String releaseVersion = releaseVersionMajor + ".x.x";
+ final ChangelogRelease upcomingRelease = new ChangelogRelease(releaseVersion, null);
+ exportUnreleased(args.projectRootDirectory, upcomingRelease);
// Export the release index.
+ changelogReleases.add(upcomingRelease);
exportReleaseIndex(args.projectRootDirectory, changelogReleases);
}
@@ -220,19 +229,17 @@ public final class AsciiDocExporter {
.append('\n')
.append(AUTO_GENERATION_WARNING_ASCIIDOC)
.append('\n')
- .append("= ");
- if (release.version != null) {
+ .append("= ")
+ .append(release.version);
+ if (release.date != null) {
stringBuilder
- .append(release.version)
.append(" (")
.append(release.date)
.append(")\n")
.append(introAsciiDoc)
.append("\n");
} else {
- stringBuilder
- .append("Unreleased\n\n")
- .append("Changes staged for the next version that is yet to be released.\n\n");
+ stringBuilder.append("\n\nChanges staged for the next version that is yet to be released.\n\n");
}
if (!entries.isEmpty()) {
@@ -357,12 +364,27 @@ public final class AsciiDocExporter {
}
}
- private static void exportUnreleased(final Path projectRootDirectory) {
+ private static int readRootPomVersionMajor(final Path projectRootDirectory) {
+ final Path rootPomFile = projectRootDirectory.resolve("pom.xml");
+ final Element projectElement = XmlReader.readXmlFileRootElement(rootPomFile, "project");
+ final Element versionElement = XmlReader.requireChildElementMatchingName(projectElement, "version");
+ final String version = trimNullable(versionElement.getTextContent());
+ if (isBlank(version)) {
+ throw XmlReader.failureAtXmlNode(versionElement, "blank `version`");
+ }
+ final String versionPattern = "^\\d+\\.\\d+.\\d+(-SNAPSHOT)?$";
+ if (!version.matches(versionPattern)) {
+ throw XmlReader.failureAtXmlNode(
+ versionElement, "`version` doesnt' match the expected pattern `%s`: `%s`", versionPattern, version);
+ }
+ return Integer.parseInt(version.split("\\.", 2)[0]);
+ }
+
+ private static void exportUnreleased(final Path projectRootDirectory, final ChangelogRelease upcomingRelease) {
final Path unreleasedDirectory = ChangelogFiles.unreleasedDirectory(projectRootDirectory);
final List<ChangelogEntry> changelogEntries = readChangelogEntries(unreleasedDirectory);
- final ChangelogRelease changelogRelease = new ChangelogRelease(null, null);
try {
- exportRelease(projectRootDirectory, changelogRelease, null, changelogEntries);
+ exportRelease(projectRootDirectory, upcomingRelease, null, changelogEntries);
} catch (final IOException error) {
throw new UncheckedIOException("failed exporting unreleased changes", error);
}
@@ -388,14 +410,16 @@ public final class AsciiDocExporter {
.append(AsciiDocUtils.LICENSE_COMMENT_BLOCK)
.append('\n')
.append(AUTO_GENERATION_WARNING_ASCIIDOC)
- .append("\n= Release changelogs\n\n")
- .append("* xref:unreleased.adoc[Unreleased]\n");
+ .append("\n= Release changelogs\n\n");
for (int releaseIndex = changelogReleases.size() - 1; releaseIndex >= 0; releaseIndex--) {
final ChangelogRelease changelogRelease = changelogReleases.get(releaseIndex);
final String asciiDocFilename = changelogReleaseAsciiDocFilename(changelogRelease);
+ final String asciiDocBulletDatePrefix = changelogRelease.date != null
+ ? ('[' + changelogRelease.date + "] ")
+ : "";
final String asciiDocBullet = String.format(
- "* [%s] xref:%s[%s]\n",
- changelogRelease.date,
+ "* %sxref:%s[%s]\n",
+ asciiDocBulletDatePrefix,
asciiDocFilename,
changelogRelease.version);
stringBuilder.append(asciiDocBullet);
@@ -404,10 +428,8 @@ public final class AsciiDocExporter {
}
private static String changelogReleaseAsciiDocFilename(final ChangelogRelease changelogRelease) {
- return changelogRelease.version == null
- ? "unreleased.adoc"
- // Using only the version (that is, avoiding the date) in the filename so that one can determine the link to the changelog of a particular release with only version information.
- : String.format("%s.adoc", changelogRelease.version);
+ // Using only the version (that is, avoiding the date) in the filename so that one can determine the link to the changelog of a particular release with only version information.
+ return String.format("%s.adoc", changelogRelease.version);
}
}
diff --git a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/importer/MavenChanges.java b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/importer/MavenChanges.java
index be5fe682a3..3c01dadd5b 100644
--- a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/importer/MavenChanges.java
+++ b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/importer/MavenChanges.java
@@ -46,7 +46,7 @@ final class MavenChanges {
final Element documentElement = readXmlFileRootElement(xmlPath, "document");
// Read the `body` element.
- final Element bodyElement = XmlReader.childElementMatchingName(documentElement, "body");
+ final Element bodyElement = XmlReader.requireChildElementMatchingName(documentElement, "body");
// Read releases.
final List<Release> releases = new ArrayList<>();
diff --git a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/releaser/ChangelogReleaser.java b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/releaser/ChangelogReleaser.java
index c4e47d1b66..6a8f0417f6 100644
--- a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/releaser/ChangelogReleaser.java
+++ b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/releaser/ChangelogReleaser.java
@@ -81,7 +81,7 @@ public final class ChangelogReleaser {
final Element projectElement = XmlReader.readXmlFileRootElement(rootPomFile, "project");
// Read the `version` element.
- final Element versionElement = XmlReader.childElementMatchingName(projectElement, "version");
+ final Element versionElement = XmlReader.requireChildElementMatchingName(projectElement, "version");
final String version = trimNullable(versionElement.getTextContent());
if (isBlank(version)) {
throw XmlReader.failureAtXmlNode(versionElement, "blank `version`: %s", version);
diff --git a/src/site/asciidoc/changelog/unreleased.adoc b/src/site/asciidoc/changelog/2.x.x.adoc
similarity index 99%
rename from src/site/asciidoc/changelog/unreleased.adoc
rename to src/site/asciidoc/changelog/2.x.x.adoc
index dd33eb6dae..8f0c6372a2 100644
--- a/src/site/asciidoc/changelog/unreleased.adoc
+++ b/src/site/asciidoc/changelog/2.x.x.adoc
@@ -20,7 +20,7 @@
This file is automatically generated from the release changelog directory!
////
-= Unreleased
+= 2.x.x
Changes staged for the next version that is yet to be released.
diff --git a/src/site/asciidoc/changelog/index.adoc b/src/site/asciidoc/changelog/index.adoc
index f695267463..e202204cb4 100644
--- a/src/site/asciidoc/changelog/index.adoc
+++ b/src/site/asciidoc/changelog/index.adoc
@@ -22,7 +22,7 @@ This file is automatically generated from the release changelog directory!
= Release changelogs
-* xref:unreleased.adoc[Unreleased]
+* xref:2.x.x.adoc[2.x.x]
* [2022-09-09] xref:2.19.0.adoc[2.19.0]
* [2022-06-28] xref:2.18.0.adoc[2.18.0]
* [2022-02-23] xref:2.17.2.adoc[2.17.2]