From e2becff1837608ac1cfa25be03b8be35eb593a94 Mon Sep 17 00:00:00 2001 From: "Henning P. Schmiedehausen" Date: Sun, 28 Aug 2022 12:32:41 -0700 Subject: [PATCH 1/3] Revert "[MNG-7529] Maven resolver makes bad repository choices (#786)" This reverts commit ce4579108d653be2ab7eab43be7d5951151dae5b. --- .../internal/DefaultVersionRangeResolver.java | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java index a4f66a6e988f..dfc7181a4a5b 100644 --- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java @@ -69,8 +69,6 @@ public class DefaultVersionRangeResolver private static final String MAVEN_METADATA_XML = "maven-metadata.xml"; - private static final String SNAPSHOT = "SNAPSHOT"; - private final MetadataResolver metadataResolver; private final SyncContextFactory syncContextFactory; private final RepositoryEventDispatcher repositoryEventDispatcher; @@ -185,11 +183,9 @@ private Map getVersions( RepositorySystemSession ses } Versioning versioning = readVersions( session, trace, metadataResult.getMetadata(), repository, result ); - RemoteRepository remoteRepository = metadataResult.getRequest().getRepository(); - for ( String version : versioning.getVersions() ) { - if ( isEnabled( remoteRepository, version ) && !versionIndex.containsKey( version ) ) + if ( !versionIndex.containsKey( version ) ) { versionIndex.put( version, repository ); } @@ -199,18 +195,6 @@ private Map getVersions( RepositorySystemSession ses return versionIndex; } - private boolean isEnabled( RemoteRepository remoteRepository, String version ) - { - if ( remoteRepository == null ) - { - return true; - } - - boolean snapshot = version != null && version.endsWith( SNAPSHOT ); - - return remoteRepository.getPolicy( snapshot ).isEnabled(); - } - private Versioning readVersions( RepositorySystemSession session, RequestTrace trace, Metadata metadata, ArtifactRepository repository, VersionRangeResult result ) { @@ -254,4 +238,4 @@ private void invalidMetadata( RepositorySystemSession session, RequestTrace trac repositoryEventDispatcher.dispatch( event.build() ); } -} +} \ No newline at end of file From e70b8c86a99d65c4f1290402f014069178499444 Mon Sep 17 00:00:00 2001 From: "Henning P. Schmiedehausen" Date: Sun, 28 Aug 2022 12:33:31 -0700 Subject: [PATCH 2/3] [MNG-7529] Maven resolver makes bad repository choices Structure the version checks slightly different to make the separation between repository versions and the version range resolution clearer. --- .../internal/DefaultVersionRangeResolver.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java index dfc7181a4a5b..856eaa82dbee 100644 --- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java @@ -69,6 +69,8 @@ public class DefaultVersionRangeResolver private static final String MAVEN_METADATA_XML = "maven-metadata.xml"; + private static final String SNAPSHOT = "SNAPSHOT"; + private final MetadataResolver metadataResolver; private final SyncContextFactory syncContextFactory; private final RepositoryEventDispatcher repositoryEventDispatcher; @@ -183,6 +185,9 @@ private Map getVersions( RepositorySystemSession ses } Versioning versioning = readVersions( session, trace, metadataResult.getMetadata(), repository, result ); + + versioning = filterVersionsByRepositoryType( versioning, metadataResult.getRequest().getRepository() ); + for ( String version : versioning.getVersions() ) { if ( !versionIndex.containsKey( version ) ) @@ -226,6 +231,28 @@ private Versioning readVersions( RepositorySystemSession session, RequestTrace t return ( versioning != null ) ? versioning : new Versioning(); } + private Versioning filterVersionsByRepositoryType( Versioning versioning, RemoteRepository remoteRepository ) + { + if ( remoteRepository == null ) + { + return versioning; + } + + Versioning filteredVersions = versioning.clone(); + + for ( String version : versioning.getVersions() ) + { + boolean snapshotVersion = version != null && version.endsWith( SNAPSHOT ); + + if ( !remoteRepository.getPolicy( snapshotVersion ).isEnabled() ) + { + filteredVersions.removeVersion( version ); + } + } + + return filteredVersions; + } + private void invalidMetadata( RepositorySystemSession session, RequestTrace trace, Metadata metadata, ArtifactRepository repository, Exception exception ) { From bdf76a93c71fce696afa2ef3f4f09adcb6d02ca8 Mon Sep 17 00:00:00 2001 From: "Henning P. Schmiedehausen" Date: Tue, 30 Aug 2022 15:50:37 -0700 Subject: [PATCH 3/3] use ArtifactUtils helper method --- .../repository/internal/DefaultVersionRangeResolver.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java index 856eaa82dbee..d3a09e53c36e 100644 --- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java @@ -19,6 +19,7 @@ * under the License. */ +import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.artifact.repository.metadata.Versioning; import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; import org.eclipse.aether.RepositoryEvent; @@ -69,8 +70,6 @@ public class DefaultVersionRangeResolver private static final String MAVEN_METADATA_XML = "maven-metadata.xml"; - private static final String SNAPSHOT = "SNAPSHOT"; - private final MetadataResolver metadataResolver; private final SyncContextFactory syncContextFactory; private final RepositoryEventDispatcher repositoryEventDispatcher; @@ -242,9 +241,7 @@ private Versioning filterVersionsByRepositoryType( Versioning versioning, Remote for ( String version : versioning.getVersions() ) { - boolean snapshotVersion = version != null && version.endsWith( SNAPSHOT ); - - if ( !remoteRepository.getPolicy( snapshotVersion ).isEnabled() ) + if ( !remoteRepository.getPolicy( ArtifactUtils.isSnapshot( version ) ).isEnabled() ) { filteredVersions.removeVersion( version ); } @@ -265,4 +262,4 @@ private void invalidMetadata( RepositorySystemSession session, RequestTrace trac repositoryEventDispatcher.dispatch( event.build() ); } -} \ No newline at end of file +}