diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java index 2f924d4d4..3db90e94f 100644 --- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java +++ b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java @@ -25,7 +25,6 @@ import java.io.Writer; import org.apache.maven.artifact.repository.metadata.Metadata; -import org.apache.maven.artifact.repository.metadata.Versioning; import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer; import org.codehaus.plexus.util.IOUtil; @@ -81,24 +80,7 @@ public boolean isMerged() return merged; } - protected void merge( Metadata recessive ) - { - Versioning versioning = recessive.getVersioning(); - if ( versioning != null ) - { - versioning.setLastUpdated( null ); - } - - Metadata dominant = metadata; - - versioning = dominant.getVersioning(); - if ( versioning != null ) - { - versioning.updateTimestamp(); - } - - dominant.merge( recessive ); - } + protected abstract void merge( Metadata recessive ); private Metadata read( File metadataFile ) throws RepositoryException diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java index 16eafecab..139e5f8c9 100644 --- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java +++ b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java @@ -20,6 +20,9 @@ */ import java.io.File; +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashSet; import org.apache.maven.artifact.repository.metadata.Metadata; import org.apache.maven.artifact.repository.metadata.Versioning; @@ -68,6 +71,29 @@ private static Metadata createMetadata( Artifact artifact ) return metadata; } + @Override + protected void merge( Metadata recessive ) + { + Versioning versioning = metadata.getVersioning(); + versioning.updateTimestamp(); + + if ( recessive.getVersioning() != null ) + { + if ( versioning.getLatest() == null ) + { + versioning.setLatest( recessive.getVersioning().getLatest() ); + } + if ( versioning.getRelease() == null ) + { + versioning.setRelease( recessive.getVersioning().getRelease() ); + } + + Collection versions = new LinkedHashSet( recessive.getVersioning().getVersions() ); + versions.addAll( versioning.getVersions() ); + versioning.setVersions( new ArrayList( versions ) ); + } + } + public Object getKey() { return getGroupId() + ':' + getArtifactId();