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() {