You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2023/01/30 22:39:08 UTC

[logging-log4j-tools] branch master updated: Fix Windows test problem

This is an automated email from the ASF dual-hosted git repository.

pkarwasz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j-tools.git


The following commit(s) were added to refs/heads/master by this push:
     new df58dd7  Fix Windows test problem
df58dd7 is described below

commit df58dd77614bc464bd5f15f35836e8f8c164e668
Author: Piotr P. Karwasz <pi...@karwasz.org>
AuthorDate: Mon Jan 30 23:35:54 2023 +0100

    Fix Windows test problem
    
    The Windows Freemarker failure has been fixed by restraining the
    templates to the `changelog` directory.
---
 .../logging/log4j/changelog/ChangelogFiles.java    |  7 +++++
 .../changelog/exporter/ChangelogExporter.java      | 35 +++++++++++++++-------
 .../log4j/changelog/exporter/FreeMarkerUtils.java  | 22 +++++++++-----
 .../logging/log4j/changelog/FileTestUtils.java     |  2 +-
 4 files changed, 46 insertions(+), 20 deletions(-)

diff --git a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/ChangelogFiles.java b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/ChangelogFiles.java
index df35b37..abca953 100644
--- a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/ChangelogFiles.java
+++ b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/ChangelogFiles.java
@@ -56,6 +56,10 @@ public final class ChangelogFiles {
         return changelogDirectory.resolve(".index.adoc.ftl");
     }
 
+    public static String indexTemplateFile(final Path changelogDirectory, final Path baseDir) {
+        return baseDir.relativize(indexTemplateFile(changelogDirectory)).toString().replaceAll("\\\\", "/");
+    }
+
     public static Path releaseDirectory(final Path changelogDirectory, final String releaseVersion) {
         return changelogDirectory.resolve(releaseVersion);
     }
@@ -68,4 +72,7 @@ public final class ChangelogFiles {
         return releaseDirectory.resolve(".changelog.adoc.ftl");
     }
 
+    public static String releaseChangelogTemplateFile(final Path releaseDirectory, final Path baseDir) {
+        return baseDir.relativize(releaseChangelogTemplateFile(releaseDirectory)).toString().replaceAll("\\\\", "/");
+    }
 }
diff --git a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporter.java b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporter.java
index 41d0021..96ac864 100644
--- a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporter.java
+++ b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporter.java
@@ -60,12 +60,13 @@ public final class ChangelogExporter {
             for (int releaseIndex = 0; releaseIndex < releaseDirectories.size(); releaseIndex++) {
                 final Path releaseDirectory = releaseDirectories.get(releaseIndex);
                 final ChangelogRelease changelogRelease = changelogReleases.get(releaseIndex);
-                final Path releaseChangelogTemplateFile = ChangelogFiles.releaseChangelogTemplateFile(releaseDirectory);
+                final String releaseChangelogTemplateFile = ChangelogFiles.releaseChangelogTemplateFile(releaseDirectory, args.changelogDirectory);
                 try {
                     exportRelease(
                             args.outputDirectory,
                             releaseDirectory,
                             changelogRelease,
+                            args.changelogDirectory,
                             releaseChangelogTemplateFile);
                 } catch (final Exception error) {
                     final String message =
@@ -95,20 +96,25 @@ public final class ChangelogExporter {
                     final Path upcomingReleaseDirectory =
                             ChangelogFiles.unreleasedDirectory(args.changelogDirectory, upcomingReleaseVersionMajor);
                     final ChangelogRelease upcomingRelease = upcomingRelease(upcomingReleaseVersionMajor);
-                    final Path upcomingReleaseChangelogTemplateFile =
-                            ChangelogFiles.releaseChangelogTemplateFile(upcomingReleaseDirectory);
+                    final String upcomingReleaseChangelogTemplateFile =
+                            ChangelogFiles.releaseChangelogTemplateFile(upcomingReleaseDirectory, args.changelogDirectory);
                     System.out.format("exporting upcoming release directory: `%s`%n", upcomingReleaseDirectory);
                     exportRelease(
                             args.outputDirectory,
                             upcomingReleaseDirectory,
                             upcomingRelease,
+                            args.changelogDirectory,
                             upcomingReleaseChangelogTemplateFile);
                     changelogReleases.add(upcomingRelease);
                 });
 
         // Export the release index
-        final Path changelogIndexTemplateFile = ChangelogFiles.indexTemplateFile(args.changelogDirectory);
-        exportIndex(args.outputDirectory, changelogReleases, changelogIndexTemplateFile);
+        final String changelogIndexTemplateFile = ChangelogFiles.indexTemplateFile(args.changelogDirectory, args.changelogDirectory);
+        exportIndex(
+                args.outputDirectory,
+                changelogReleases,
+                args.changelogDirectory,
+                changelogIndexTemplateFile);
 
     }
 
@@ -135,10 +141,11 @@ public final class ChangelogExporter {
             final Path outputDirectory,
             final Path releaseDirectory,
             final ChangelogRelease changelogRelease,
-            final Path releaseChangelogTemplateFile) {
+            final Path templateDirectory,
+            final String releaseChangelogTemplateFile) {
         final Map<ChangelogEntry.Type, List<ChangelogEntry>> changelogEntriesByType = readChangelogEntriesByType(releaseDirectory);
         try {
-            exportRelease(outputDirectory, changelogRelease, changelogEntriesByType, releaseChangelogTemplateFile);
+            exportRelease(outputDirectory, changelogRelease, changelogEntriesByType, templateDirectory, releaseChangelogTemplateFile);
         } catch (final IOException error) {
             final String message = String.format("failed exporting release from directory `%s`", releaseDirectory);
             throw new UncheckedIOException(message, error);
@@ -162,14 +169,19 @@ public final class ChangelogExporter {
             final Path outputDirectory,
             final ChangelogRelease release,
             final Map<ChangelogEntry.Type, List<ChangelogEntry>> entriesByType,
-            final Path releaseChangelogTemplateFile)
+            final Path templateDirectory,
+            final String releaseChangelogTemplateFile)
             throws IOException {
         final String releaseChangelogFileName = releaseChangelogFileName(release);
         final Path releaseChangelogFile = outputDirectory.resolve(releaseChangelogFileName);
         final Map<String, Object> releaseChangelogTemplateData = new LinkedHashMap<>();
         releaseChangelogTemplateData.put("release", release);
         releaseChangelogTemplateData.put("entriesByType", entriesByType);
-        FreeMarkerUtils.render(releaseChangelogTemplateFile, releaseChangelogTemplateData, releaseChangelogFile);
+        FreeMarkerUtils.render(
+                templateDirectory,
+                releaseChangelogTemplateFile,
+                releaseChangelogTemplateData,
+                releaseChangelogFile);
     }
 
     private static ChangelogRelease upcomingRelease(final int versionMajor) {
@@ -180,7 +192,8 @@ public final class ChangelogExporter {
     private static void exportIndex(
             final Path outputDirectory,
             final List<ChangelogRelease> changelogReleases,
-            final Path indexTemplateFile) {
+            final Path templateDirectory,
+            final String indexTemplateFile) {
         final Object indexTemplateData = Collections.singletonMap(
                 "releases", IntStream
                         .range(0, changelogReleases.size())
@@ -196,7 +209,7 @@ public final class ChangelogExporter {
                         })
                         .collect(Collectors.toList()));
         final Path indexFile = outputDirectory.resolve("index.adoc");
-        FreeMarkerUtils.render(indexTemplateFile, indexTemplateData, indexFile);
+        FreeMarkerUtils.render(templateDirectory, indexTemplateFile, indexTemplateData, indexFile);
     }
 
     private static String releaseChangelogFileName(final ChangelogRelease changelogRelease) {
diff --git a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/FreeMarkerUtils.java b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/FreeMarkerUtils.java
index 9deafcd..eaaa637 100644
--- a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/FreeMarkerUtils.java
+++ b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/FreeMarkerUtils.java
@@ -17,7 +17,6 @@
 package org.apache.logging.log4j.changelog.exporter;
 
 import java.io.BufferedWriter;
-import java.io.File;
 import java.io.IOException;
 import java.io.UncheckedIOException;
 import java.nio.file.Files;
@@ -28,21 +27,23 @@ import org.apache.logging.log4j.changelog.util.CharsetUtils;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import freemarker.cache.FileTemplateLoader;
-import freemarker.template.*;
+import freemarker.template.Configuration;
+import freemarker.template.DefaultObjectWrapper;
+import freemarker.template.DefaultObjectWrapperBuilder;
+import freemarker.template.Template;
+import freemarker.template.TemplateExceptionHandler;
 
 final class FreeMarkerUtils {
 
     private FreeMarkerUtils() {}
 
-    private static final Configuration CONFIGURATION = createConfiguration();
-
     @SuppressFBWarnings("DMI_HARDCODED_ABSOLUTE_FILENAME")
-    private static Configuration createConfiguration() {
+    private static Configuration createConfiguration(final Path root) {
         final Configuration configuration = new Configuration(Configuration.VERSION_2_3_29);
         configuration.setDefaultEncoding(CharsetUtils.CHARSET_NAME);
         configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
         try {
-            configuration.setTemplateLoader(new FileTemplateLoader(new File("/")));
+            configuration.setTemplateLoader(new FileTemplateLoader(root.toFile()));
         } catch (final IOException error) {
             throw new UncheckedIOException(error);
         }
@@ -58,9 +59,14 @@ final class FreeMarkerUtils {
     }
 
     @SuppressFBWarnings("TEMPLATE_INJECTION_FREEMARKER")
-    static void render(final Path templateFile, final Object templateData, final Path outputFile) {
+    static void render(
+            final Path templateDirectory,
+            final String templateFile,
+            final Object templateData,
+            final Path outputFile) {
         try {
-            final Template template = CONFIGURATION.getTemplate(templateFile.toAbsolutePath().toString());
+            final Configuration configuration = createConfiguration(templateDirectory);
+            final Template template = configuration.getTemplate(templateFile);
             final Path outputFileParent = outputFile.getParent();
             if (outputFileParent != null) {
                 Files.createDirectories(outputFileParent);
diff --git a/log4j-changelog/src/test/java/org/apache/logging/log4j/changelog/FileTestUtils.java b/log4j-changelog/src/test/java/org/apache/logging/log4j/changelog/FileTestUtils.java
index f7f491f..d62ea22 100644
--- a/log4j-changelog/src/test/java/org/apache/logging/log4j/changelog/FileTestUtils.java
+++ b/log4j-changelog/src/test/java/org/apache/logging/log4j/changelog/FileTestUtils.java
@@ -44,7 +44,7 @@ final class FileTestUtils {
             final Path actualFilePath = actualContents.get(relativeFilePath);
             final Path expectedFilePath = expectedContents.get(relativeFilePath);
             if (!Files.isDirectory(actualFilePath) || !Files.isDirectory(expectedFilePath)) {
-                assertThat(actualFilePath).hasSameBinaryContentAs(expectedFilePath);
+                assertThat(actualFilePath).hasSameTextualContentAs(expectedFilePath);
             }
         });