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

cstamas pushed a commit to branch maven-3.9.x
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/maven-3.9.x by this push:
     new bc52363d40 [3.9.x][MNG-8106] Fix metadata merge (#1480)
bc52363d40 is described below

commit bc52363d402f14043e2e4efed40799044cdf531b
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Thu Apr 25 12:10:11 2024 +0200

    [3.9.x][MNG-8106] Fix metadata merge (#1480)
    
    As currently if given metadata serves multiple roles (G, A or V level), 
data loss occurs.
    
    ---
    
    https://issues.apache.org/jira/browse/MNG-8106
---
 .github/workflows/maven.yml                                         | 4 ++--
 .../org/apache/maven/repository/internal/LocalSnapshotMetadata.java | 4 ++++
 .../java/org/apache/maven/repository/internal/PluginsMetadata.java  | 6 +++++-
 .../apache/maven/repository/internal/RemoteSnapshotMetadata.java    | 4 ++++
 .../java/org/apache/maven/repository/internal/VersionsMetadata.java | 4 ++++
 5 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 58dff73b96..3470c1b7ad 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -43,7 +43,7 @@ jobs:
       - uses: actions/setup-java@v4
         with:
           java-version: 8
-          distribution: 'temurin'
+          distribution: 'zulu'
           cache: 'maven'
 
       - name: Build with Maven
@@ -125,7 +125,7 @@ jobs:
         uses: actions/setup-java@v4
         with:
           java-version: ${{ matrix.java }}
-          distribution: 'temurin'
+          distribution: 'zulu'
           cache: 'maven'
 
       - name: Running integration tests
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
index 3d1817ce97..be038cea2b 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
@@ -116,6 +116,10 @@ final class LocalSnapshotMetadata extends MavenMetadata {
 
             metadata.getVersioning().setSnapshotVersions(new 
ArrayList<>(versions.values()));
         }
+        // just carry-on as-is
+        if (!recessive.getPlugins().isEmpty()) {
+            metadata.setPlugins(new ArrayList<>(recessive.getPlugins()));
+        }
 
         artifacts.clear();
     }
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadata.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadata.java
index 18fdbba38e..3358ded3c8 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadata.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadata.java
@@ -74,12 +74,16 @@ final class PluginsMetadata extends MavenMetadata {
     protected void merge(Metadata recessive) {
         List<Plugin> recessivePlugins = recessive.getPlugins();
         List<Plugin> plugins = metadata.getPlugins();
-        if (!plugins.isEmpty()) {
+        if (!recessivePlugins.isEmpty() || !plugins.isEmpty()) {
             LinkedHashMap<String, Plugin> mergedPlugins = new 
LinkedHashMap<>();
             recessivePlugins.forEach(p -> mergedPlugins.put(p.getPrefix(), p));
             plugins.forEach(p -> mergedPlugins.put(p.getPrefix(), p));
             metadata.setPlugins(new ArrayList<>(mergedPlugins.values()));
         }
+        // just carry-on as-is
+        if (recessive.getVersioning() != null) {
+            metadata.setVersioning(recessive.getVersioning());
+        }
     }
 
     @Override
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
index 8594c038c9..5d5a53d822 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
@@ -124,6 +124,10 @@ final class RemoteSnapshotMetadata extends 
MavenSnapshotMetadata {
         if (!legacyFormat) {
             metadata.getVersioning().setSnapshotVersions(new 
ArrayList<>(versions.values()));
         }
+        // just carry-on as-is
+        if (!recessive.getPlugins().isEmpty()) {
+            metadata.setPlugins(new ArrayList<>(recessive.getPlugins()));
+        }
     }
 
     private static int getBuildNumber(Metadata metadata) {
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
index 12e1ce0a25..b2bba6a793 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
@@ -83,6 +83,10 @@ final class VersionsMetadata extends MavenMetadata {
             versions.addAll(versioning.getVersions());
             versioning.setVersions(new ArrayList<>(versions));
         }
+        // just carry-on as-is
+        if (!recessive.getPlugins().isEmpty()) {
+            metadata.setPlugins(new ArrayList<>(recessive.getPlugins()));
+        }
     }
 
     public Object getKey() {

Reply via email to