Skip to content

Commit bc52363

Browse files
authored
[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
1 parent 587e99b commit bc52363

File tree

5 files changed

+19
-3
lines changed

5 files changed

+19
-3
lines changed

.github/workflows/maven.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
- uses: actions/setup-java@v4
4444
with:
4545
java-version: 8
46-
distribution: 'temurin'
46+
distribution: 'zulu'
4747
cache: 'maven'
4848

4949
- name: Build with Maven
@@ -125,7 +125,7 @@ jobs:
125125
uses: actions/setup-java@v4
126126
with:
127127
java-version: ${{ matrix.java }}
128-
distribution: 'temurin'
128+
distribution: 'zulu'
129129
cache: 'maven'
130130

131131
- name: Running integration tests

maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ protected void merge(Metadata recessive) {
116116

117117
metadata.getVersioning().setSnapshotVersions(new ArrayList<>(versions.values()));
118118
}
119+
// just carry-on as-is
120+
if (!recessive.getPlugins().isEmpty()) {
121+
metadata.setPlugins(new ArrayList<>(recessive.getPlugins()));
122+
}
119123

120124
artifacts.clear();
121125
}

maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/PluginsMetadata.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,16 @@ private static Metadata createRepositoryMetadata(PluginInfo pluginInfo) {
7474
protected void merge(Metadata recessive) {
7575
List<Plugin> recessivePlugins = recessive.getPlugins();
7676
List<Plugin> plugins = metadata.getPlugins();
77-
if (!plugins.isEmpty()) {
77+
if (!recessivePlugins.isEmpty() || !plugins.isEmpty()) {
7878
LinkedHashMap<String, Plugin> mergedPlugins = new LinkedHashMap<>();
7979
recessivePlugins.forEach(p -> mergedPlugins.put(p.getPrefix(), p));
8080
plugins.forEach(p -> mergedPlugins.put(p.getPrefix(), p));
8181
metadata.setPlugins(new ArrayList<>(mergedPlugins.values()));
8282
}
83+
// just carry-on as-is
84+
if (recessive.getVersioning() != null) {
85+
metadata.setVersioning(recessive.getVersioning());
86+
}
8387
}
8488

8589
@Override

maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,10 @@ protected void merge(Metadata recessive) {
124124
if (!legacyFormat) {
125125
metadata.getVersioning().setSnapshotVersions(new ArrayList<>(versions.values()));
126126
}
127+
// just carry-on as-is
128+
if (!recessive.getPlugins().isEmpty()) {
129+
metadata.setPlugins(new ArrayList<>(recessive.getPlugins()));
130+
}
127131
}
128132

129133
private static int getBuildNumber(Metadata metadata) {

maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ protected void merge(Metadata recessive) {
8383
versions.addAll(versioning.getVersions());
8484
versioning.setVersions(new ArrayList<>(versions));
8585
}
86+
// just carry-on as-is
87+
if (!recessive.getPlugins().isEmpty()) {
88+
metadata.setPlugins(new ArrayList<>(recessive.getPlugins()));
89+
}
8690
}
8791

8892
public Object getKey() {

0 commit comments

Comments
 (0)