MNG-7529 alternate fix (#795)

[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.
This commit is contained in:
Henning Schmiedehausen 2022-08-31 09:47:00 -07:00 committed by GitHub
parent ce4579108d
commit e410a6ce1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 24 additions and 16 deletions

View File

@ -19,6 +19,7 @@ package org.apache.maven.repository.internal;
* 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;
@ -185,11 +184,12 @@ public class DefaultVersionRangeResolver
}
Versioning versioning = readVersions( session, trace, metadataResult.getMetadata(), repository, result );
RemoteRepository remoteRepository = metadataResult.getRequest().getRepository();
versioning = filterVersionsByRepositoryType( versioning, 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 +199,6 @@ public class DefaultVersionRangeResolver
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 )
{
@ -242,6 +230,26 @@ public class DefaultVersionRangeResolver
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() )
{
if ( !remoteRepository.getPolicy( ArtifactUtils.isSnapshot( version ) ).isEnabled() )
{
filteredVersions.removeVersion( version );
}
}
return filteredVersions;
}
private void invalidMetadata( RepositorySystemSession session, RequestTrace trace, Metadata metadata,
ArtifactRepository repository, Exception exception )
{