Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package maven-filtering for openSUSE:Factory
checked in at 2026-07-06 12:33:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/maven-filtering (Old)
and /work/SRC/openSUSE:Factory/.maven-filtering.new.1982 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "maven-filtering"
Mon Jul 6 12:33:38 2026 rev:13 rq:1363906 version:3.5.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/maven-filtering/maven-filtering.changes
2026-03-05 17:33:39.056681507 +0100
+++
/work/SRC/openSUSE:Factory/.maven-filtering.new.1982/maven-filtering.changes
2026-07-06 12:36:14.315553737 +0200
@@ -1,0 +2,18 @@
+Sun Jul 5 20:03:33 UTC 2026 - Fridrich Strba <[email protected]>
+
+- Upgrade to upstream version 3.5.1
+ * Bug Fixes
+ + Improve error message for MalformedInputException during
+ resource filtering
+ + Restore "first entry wins" for overlapping resource
+ declarations
+ * Maintenance
+ + enable build with Maven 4
+ * Dependency updates
+ + Bump org.apache.maven.shared:maven-shared-components from 47
+ to 49
+ + Bump Maven version to 3.9.16
+ + Bump plexus-utils version to 3.6.1
+ + Bump commons-io:commons-io from 2.21.0 to 2.22.0
+
+-------------------------------------------------------------------
Old:
----
maven-filtering-3.5.0-source-release.zip
New:
----
maven-filtering-3.5.1-source-release.zip
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ maven-filtering.spec ++++++
--- /var/tmp/diff_new_pack.V9YKoM/_old 2026-07-06 12:36:14.967576353 +0200
+++ /var/tmp/diff_new_pack.V9YKoM/_new 2026-07-06 12:36:14.967576353 +0200
@@ -17,7 +17,7 @@
Name: maven-filtering
-Version: 3.5.0
+Version: 3.5.1
Release: 0
Summary: Shared component providing resource filtering
License: Apache-2.0
++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.V9YKoM/_old 2026-07-06 12:36:15.035578712 +0200
+++ /var/tmp/diff_new_pack.V9YKoM/_new 2026-07-06 12:36:15.051579267 +0200
@@ -1,6 +1,6 @@
-mtime: 1772456459
-commit: 672fafcb418d0e85ea6bef472fd6909c371c348d7dba09387a53db7c8d68fab1
-url: https://src.opensuse.org/java-packages/maven-filtering.git
-revision: 672fafcb418d0e85ea6bef472fd6909c371c348d7dba09387a53db7c8d68fab1
+mtime: 1783282652
+commit: 68e0e0c4e63cd9b44239fa586ae219939ffc2b163521f3b707b23e9bc2e00dc5
+url: https://src.opensuse.org/java-packages/maven-filtering
+revision: 68e0e0c4e63cd9b44239fa586ae219939ffc2b163521f3b707b23e9bc2e00dc5
projectscmsync: https://src.opensuse.org/java-packages/_ObsPrj
++++++ build.specials.obscpio ++++++
++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore 2026-07-05 22:17:32.000000000 +0200
@@ -0,0 +1 @@
+.osc
++++++ maven-filtering-3.5.0-source-release.zip ->
maven-filtering-3.5.1-source-release.zip ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/maven-filtering-3.5.0/DEPENDENCIES
new/maven-filtering-3.5.1/DEPENDENCIES
--- old/maven-filtering-3.5.0/DEPENDENCIES 2026-03-02 11:11:22.000000000
+0100
+++ new/maven-filtering-3.5.1/DEPENDENCIES 2026-06-30 14:34:02.000000000
+0200
@@ -20,8 +20,8 @@
- Plexus Interpolation API
(https://codehaus-plexus.github.io/plexus-pom/plexus-interpolation/)
org.codehaus.plexus:plexus-interpolation:bundle:1.29
License: Apache-2.0 (https://www.apache.org/licenses/LICENSE-2.0.txt)
- - Plexus Common Utilities (https://codehaus-plexus.github.io/plexus-utils/)
org.codehaus.plexus:plexus-utils:jar:3.6.0
- License: Apache License, Version 2.0
(https://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Plexus Common Utilities (https://codehaus-plexus.github.io/plexus-utils/)
org.codehaus.plexus:plexus-utils:jar:3.6.1
+ License: Apache-2.0 (https://www.apache.org/licenses/LICENSE-2.0.txt)
From: 'QOS.ch' (http://www.qos.ch)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/maven-filtering-3.5.0/pom.xml
new/maven-filtering-3.5.1/pom.xml
--- old/maven-filtering-3.5.0/pom.xml 2026-03-02 11:11:22.000000000 +0100
+++ new/maven-filtering-3.5.1/pom.xml 2026-06-30 14:34:02.000000000 +0200
@@ -23,12 +23,12 @@
<parent>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-shared-components</artifactId>
- <version>47</version>
+ <version>49</version>
<relativePath />
</parent>
<artifactId>maven-filtering</artifactId>
- <version>3.5.0</version>
+ <version>3.5.1</version>
<name>Apache Maven Filtering</name>
<description>A component to assist in filtering of resource files with
properties from a Maven project.</description>
@@ -42,7 +42,7 @@
<scm>
<connection>scm:git:https://gitbox.apache.org/repos/asf/maven-filtering.git</connection>
<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/maven-filtering.git</developerConnection>
- <tag>maven-filtering-3.5.0</tag>
+ <tag>maven-filtering-3.5.1</tag>
<url>https://github.com/apache/maven-filtering/tree/${project.scm.tag}</url>
</scm>
<issueManagement>
@@ -61,10 +61,10 @@
</distributionManagement>
<properties>
- <mavenVersion>3.9.12</mavenVersion>
+ <mavenVersion>3.9.16</mavenVersion>
<slf4jVersion>1.7.36</slf4jVersion>
- <version.plexus-utils>3.6.0</version.plexus-utils>
-
<project.build.outputTimestamp>2026-03-02T11:11:22Z</project.build.outputTimestamp>
+ <version.plexus-utils>3.6.1</version.plexus-utils>
+
<project.build.outputTimestamp>2026-06-30T14:34:01Z</project.build.outputTimestamp>
<!-- don't fail check for some rules that are too hard to enforce (could
even be told broken for some)
and those that are enforced by the formatting checks from spotless -->
<checkstyle.violation.ignore>ParameterNumber,MethodLength,FileLength</checkstyle.violation.ignore>
@@ -158,7 +158,7 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>2.21.0</version>
+ <version>2.22.0</version>
<scope>test</scope>
</dependency>
</dependencies>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
new/maven-filtering-3.5.1/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
---
old/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
2026-03-02 11:11:22.000000000 +0100
+++
new/maven-filtering-3.5.1/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
2026-06-30 14:34:02.000000000 +0200
@@ -32,9 +32,11 @@
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
+import java.util.Set;
import org.apache.maven.model.Resource;
import org.codehaus.plexus.util.DirectoryScanner;
@@ -144,6 +146,13 @@
boolean isFilteringUsed = false;
List<File> propertiesFiles = new ArrayList<>();
+ // Destinations already written by a previous <resource> entry in this
call.
+ // Used to preserve "first <resource> entry wins" semantics for
overlapping
+ // declarations — the behaviour 3.3.1 produced as a side effect of the
+ // timestamp-based overwrite gate in FilteringUtils.copyFile, lost in
+ // MSHARED-1216 / GH-333.
+ Set<Path> alreadyCopied = new HashSet<>();
+
for (Resource resource : mavenResourcesExecution.getResources()) {
if (LOGGER.isDebugEnabled()) {
@@ -281,6 +290,20 @@
File destinationFile = getDestinationFile(outputDirectory,
targetPath, name, mavenResourcesExecution);
+ // Track destinations already written by a previous <resource>
entry so we
+ // can preserve "first <resource> entry wins" semantics for
overlapping
+ // declarations. The flatten case has its own collision policy
below
+ // (warn-or-throw based on overwrite), so we deliberately do
not suppress
+ // it here.
+ Path destinationPath =
destinationFile.getAbsoluteFile().toPath();
+ boolean firstOccurrence = alreadyCopied.add(destinationPath);
+ if (!firstOccurrence
+ && !mavenResourcesExecution.isFlatten()
+ && mavenResourcesExecution.getChangeDetection() !=
ChangeDetection.ALWAYS) {
+ LOGGER.debug("skipping {} — destination already written by
a previous <resource> entry", name);
+ continue;
+ }
+
if (mavenResourcesExecution.isFlatten() &&
destinationFile.exists()) {
if (mavenResourcesExecution.getChangeDetection() ==
ChangeDetection.ALWAYS) {
LOGGER.warn("existing file " +
destinationFile.getName() + " will be overwritten by " + name);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
new/maven-filtering-3.5.1/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
---
old/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
2026-03-02 11:11:22.000000000 +0100
+++
new/maven-filtering-3.5.1/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
2026-06-30 14:34:02.000000000 +0200
@@ -24,6 +24,7 @@
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;
+import java.nio.charset.MalformedInputException;
import java.nio.file.FileSystemException;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
@@ -388,6 +389,8 @@
writer.write(buffer, 0, nRead);
}
}
+ } catch (MalformedInputException e) {
+ throw new IOException(e.getMessage() + " - using encoding " +
charset.name(), e);
}
}
copyFilePermissions(from, to);
@@ -418,6 +421,8 @@
}
copied = writer.isModified();
}
+ } catch (MalformedInputException e) {
+ throw new IOException(e.getMessage() + " - using encoding " +
charset.name(), e);
}
}
copyFilePermissions(from, to);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
new/maven-filtering-3.5.1/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
---
old/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
2026-03-02 11:11:22.000000000 +0100
+++
new/maven-filtering-3.5.1/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
2026-06-30 14:34:02.000000000 +0200
@@ -1112,4 +1112,50 @@
assertFalse(DefaultMavenResourcesFiltering.isPropertiesFile(new
File("file.xml")));
assertFalse(DefaultMavenResourcesFiltering.isPropertiesFile(new
File("some/parent/path", "file.xml")));
}
+
+ /**
+ * Regression guard for the maven-resources-plugin issue 471 / GH-333
scenario: when the same
+ * destination is reached by a later <resource> entry while overwrite is
explicitly enabled,
+ * the later entry must still be allowed to replace the earlier one — the
"first entry wins"
+ * skip introduced for the default case must not apply here.
+ */
+ @Test
+ void overlappingEntriesWithExplicitOverwriteStillReplace() throws
Exception {
+ Properties projectProperties = new Properties();
+ projectProperties.put("repro.value", "REPLACED_BY_FILTERING");
+ mavenProject.setProperties(projectProperties);
+
+ String unitFilesDir = getBasedir() + "/src/test/units-files/MRP-471";
+
+ Resource filtered = new Resource();
+ filtered.setDirectory(unitFilesDir);
+ filtered.setFiltering(true);
+ filtered.addInclude("config/filtered.xml");
+
+ Resource unfiltered = new Resource();
+ unfiltered.setDirectory(unitFilesDir);
+ unfiltered.setFiltering(false);
+ unfiltered.addInclude("**");
+
+ MavenResourcesExecution execution = new MavenResourcesExecution(
+ Arrays.asList(filtered, unfiltered),
+ outputDirectory,
+ mavenProject,
+ "UTF-8",
+ Collections.emptyList(),
+ Collections.emptyList(),
+ new StubMavenSession());
+ execution.setUseDefaultFilterWrappers(true);
+ execution.setOverwrite(true);
+
+ mavenResourcesFiltering.filterResources(execution);
+
+ File filteredOut = new File(outputDirectory, "config/filtered.xml");
+ String content = new
String(java.nio.file.Files.readAllBytes(filteredOut.toPath()), "UTF-8");
+ // With overwrite=true the unfiltered second pass still wins —
preserve the historical
+ // 3.3.1 behaviour for callers that opt in to ChangeDetection.ALWAYS.
+ assertTrue(
+ content.contains("${repro.value}"),
+ "with overwrite=true the second <resource> entry must still
clobber; got:\n" + content);
+ }
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/OverlappingResourcesFilteringTest.java
new/maven-filtering-3.5.1/src/test/java/org/apache/maven/shared/filtering/OverlappingResourcesFilteringTest.java
---
old/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/OverlappingResourcesFilteringTest.java
1970-01-01 01:00:00.000000000 +0100
+++
new/maven-filtering-3.5.1/src/test/java/org/apache/maven/shared/filtering/OverlappingResourcesFilteringTest.java
2026-06-30 14:34:02.000000000 +0200
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.shared.filtering;
+
+import javax.inject.Inject;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.model.Resource;
+import org.codehaus.plexus.testing.PlexusTest;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Reproduces the regression first reported against
+ * <a href="https://github.com/apache/maven-resources-plugin/issues/471">
+ * maven-resources-plugin issue #471</a>.
+ *
+ * <p>When a single source directory is covered by two {@link Resource}
entries — one with
+ * {@code filtering=true} and a narrow {@code <include>}, the other with
{@code filtering=false}
+ * and a broad {@code <include>**</include>} — the file selected by the first
entry must still be
+ * filtered. From {@code maven-filtering 3.3.2} onwards (pulled in by
+ * {@code maven-resources-plugin 3.4.0}), the placeholder is left as the
literal {@code ${...}}
+ * text instead of being replaced.</p>
+ *
+ * <p>The {@code static/keep-as-is.txt} file, only matched by the second
(unfiltered) entry, is
+ * expected to keep its placeholder verbatim — the test asserts both halves so
a future fix
+ * cannot trivially "always filter everything".</p>
+ */
+@PlexusTest
+class OverlappingResourcesFilteringTest {
+
+ private final File outputDirectory = new File(getBasedir(),
"target/OverlappingResourcesFilteringTest");
+ private final File baseDir = new File(getBasedir());
+ private final StubMavenProject mavenProject = new
StubMavenProject(baseDir);
+
+ @Inject
+ private MavenResourcesFiltering mavenResourcesFiltering;
+
+ @BeforeEach
+ void setUp() throws Exception {
+ if (outputDirectory.exists()) {
+ FileUtils.deleteDirectory(outputDirectory);
+ }
+ outputDirectory.mkdirs();
+
+ mavenProject.setVersion("1.0");
+ mavenProject.setGroupId("org.apache");
+ mavenProject.setName("MRP-471 repro");
+ }
+
+ @Test
+ void overlappingResourceEntriesShouldStillFilter() throws Exception {
+ Properties projectProperties = new Properties();
+ projectProperties.put("repro.value", "REPLACED_BY_FILTERING");
+ mavenProject.setProperties(projectProperties);
+
+ String unitFilesDir = getBasedir() + "/src/test/units-files/MRP-471";
+
+ // Mirrors the failing POM configuration:
+ // <resource>
+ // <filtering>true</filtering>
+ // <directory>src/main/resources</directory>
+ // <includes><include>config/filtered.xml</include></includes>
+ // </resource>
+ // <resource>
+ // <filtering>false</filtering>
+ // <directory>src/main/resources</directory>
+ // <includes><include>**</include></includes>
+ // </resource>
+ Resource filtered = new Resource();
+ filtered.setDirectory(unitFilesDir);
+ filtered.setFiltering(true);
+ filtered.addInclude("config/filtered.xml");
+
+ Resource unfiltered = new Resource();
+ unfiltered.setDirectory(unitFilesDir);
+ unfiltered.setFiltering(false);
+ unfiltered.addInclude("**");
+
+ List<Resource> resources = Arrays.asList(filtered, unfiltered);
+
+ MavenResourcesExecution execution = new MavenResourcesExecution(
+ resources,
+ outputDirectory,
+ mavenProject,
+ "UTF-8",
+ Collections.emptyList(),
+ Collections.emptyList(),
+ new StubMavenSession());
+ execution.setUseDefaultFilterWrappers(true);
+
+ mavenResourcesFiltering.filterResources(execution);
+
+ File filteredOut = new File(outputDirectory, "config/filtered.xml");
+ File unfilteredOut = new File(outputDirectory,
"static/keep-as-is.txt");
+ assertTrue(filteredOut.isFile(), "expected " + filteredOut + " to be
copied");
+ assertTrue(unfilteredOut.isFile(), "expected " + unfilteredOut + " to
be copied");
+
+ String filteredContent = new
String(Files.readAllBytes(filteredOut.toPath()), StandardCharsets.UTF_8);
+ String unfilteredContent = new
String(Files.readAllBytes(unfilteredOut.toPath()), StandardCharsets.UTF_8);
+
+ // The placeholder targeted by the filtered <resource> entry must be
replaced.
+ // Regression on maven-filtering >= 3.3.2: the literal ${repro.value}
is left in place.
+ assertTrue(
+ filteredContent.contains("REPLACED_BY_FILTERING"),
+ "config/filtered.xml should have ${repro.value} replaced;
got:\n" + filteredContent);
+ assertFalse(
+ filteredContent.contains("${repro.value}"),
+ "config/filtered.xml still contains the literal placeholder —
see "
+ +
"https://github.com/apache/maven-resources-plugin/issues/471\n"
+ + filteredContent);
+
+ // The second (unfiltered) entry must leave files matched only by it
untouched —
+ // this guards against a fix that just turns filtering on for
everything.
+ assertTrue(
+ unfilteredContent.contains("${repro.value}"),
+ "static/keep-as-is.txt is matched by filtering=false and must
keep the literal " + "placeholder; got:\n"
+ + unfilteredContent);
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/maven-filtering-3.5.0/src/test/units-files/MRP-471/config/filtered.xml
new/maven-filtering-3.5.1/src/test/units-files/MRP-471/config/filtered.xml
--- old/maven-filtering-3.5.0/src/test/units-files/MRP-471/config/filtered.xml
1970-01-01 01:00:00.000000000 +0100
+++ new/maven-filtering-3.5.1/src/test/units-files/MRP-471/config/filtered.xml
2026-06-30 14:34:02.000000000 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config>
+ <property name="value">${repro.value}</property>
+</config>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/maven-filtering-3.5.0/src/test/units-files/MRP-471/static/keep-as-is.txt
new/maven-filtering-3.5.1/src/test/units-files/MRP-471/static/keep-as-is.txt
---
old/maven-filtering-3.5.0/src/test/units-files/MRP-471/static/keep-as-is.txt
1970-01-01 01:00:00.000000000 +0100
+++
new/maven-filtering-3.5.1/src/test/units-files/MRP-471/static/keep-as-is.txt
2026-06-30 14:34:02.000000000 +0200
@@ -0,0 +1 @@
+Not filtered. Placeholder must stay verbatim: ${repro.value}
++++++ maven-filtering-build.xml ++++++
--- /var/tmp/diff_new_pack.V9YKoM/_old 2026-07-06 12:36:15.607598553 +0200
+++ /var/tmp/diff_new_pack.V9YKoM/_new 2026-07-06 12:36:15.619598970 +0200
@@ -10,7 +10,7 @@
<property name="project.groupId" value="org.apache.maven.shared"/>
<property name="project.artifactId" value="maven-filtering"/>
- <property name="project.version" value="3.5.0"/>
+ <property name="project.version" value="3.5.1"/>
<property name="project.name" value="Apache Maven Filtering"/>
<property name="project.organization.name" value="The Apache Software
Foundation"/>