[MNG-7102] Exclude all children of aggregators, even if the aggregator was already removed from the reactor.

This commit is contained in:
Martin Kanters 2021-03-22 16:10:05 +01:00 committed by Martin Kanters
parent 1ab29f5485
commit c4cd93d55f
2 changed files with 13 additions and 20 deletions

View File

@ -141,7 +141,7 @@ private Result<ProjectDependencyGraph> reactorDependencyGraph( MavenSession sess
activeProjects = trimProjectsToRequest( activeProjects, projectDependencyGraph, session.getRequest() );
activeProjects = trimSelectedProjects( activeProjects, projectDependencyGraph, session.getRequest() );
activeProjects = trimResumedProjects( activeProjects, projectDependencyGraph, session.getRequest() );
activeProjects = trimExcludedProjects( activeProjects, session.getRequest() );
activeProjects = trimExcludedProjects( activeProjects, projectDependencyGraph, session.getRequest() );
if ( activeProjects.size() != projectDependencyGraph.getSortedProjects().size() )
{
@ -269,7 +269,8 @@ private List<MavenProject> trimResumedProjects( List<MavenProject> projects, Pro
return result;
}
private List<MavenProject> trimExcludedProjects( List<MavenProject> projects, MavenExecutionRequest request )
private List<MavenProject> trimExcludedProjects( List<MavenProject> projects, ProjectDependencyGraph graph,
MavenExecutionRequest request )
throws MavenExecutionException
{
List<MavenProject> result = projects;
@ -280,24 +281,12 @@ private List<MavenProject> trimExcludedProjects( List<MavenProject> projects, Ma
if ( !requiredSelectors.isEmpty() || !optionalSelectors.isEmpty() )
{
Set<MavenProject> excludedProjects = new HashSet<>( requiredSelectors.size() + optionalSelectors.size() );
excludedProjects.addAll( getProjectsBySelectors( request, projects, requiredSelectors, true ) );
excludedProjects.addAll( getProjectsBySelectors( request, projects, optionalSelectors, false ) );
List<MavenProject> allProjects = graph.getAllProjects();
excludedProjects.addAll( getProjectsBySelectors( request, allProjects, requiredSelectors, true ) );
excludedProjects.addAll( getProjectsBySelectors( request, allProjects, optionalSelectors, false ) );
result = new ArrayList<>( projects );
for ( MavenProject excludedProject : excludedProjects )
{
boolean isExcludedProjectRemoved = result.remove( excludedProject );
if ( isExcludedProjectRemoved )
{
List<MavenProject> children = excludedProject.getCollectedProjects();
if ( children != null )
{
result.removeAll( children );
}
}
}
result.removeAll( excludedProjects );
if ( result.isEmpty() )
{

View File

@ -147,6 +147,10 @@ public static Stream<Arguments> parameters()
.activeRequiredProjects( MODULE_A )
.inactiveRequiredProjects( MODULE_A )
.expectResult( MavenExecutionException.class, "empty reactor" ),
scenario( "Excluded aggregator, but selected child" )
.activeRequiredProjects( MODULE_C_1 )
.inactiveRequiredProjects( MODULE_C )
.expectResult( MavenExecutionException.class, "empty reactor" ),
scenario( "Project selected with different selector resolves to same project" )
.activeRequiredProjects( GROUP_ID + ":" + MODULE_A )
.inactiveRequiredProjects( MODULE_A )
@ -282,7 +286,7 @@ void testGetReactorProjects(
// Then
if ( parameterExpectedResult instanceof SelectedProjectsResult )
{
assertThat( result.hasErrors() ).isFalse();
assertThat( result.hasErrors() ).withFailMessage( "Expected result not to have errors" ).isFalse();
List<String> expectedProjectNames = ((SelectedProjectsResult) parameterExpectedResult).projectNames;
List<MavenProject> actualReactorProjects = result.get().getSortedProjects();
List<MavenProject> expectedReactorProjects = expectedProjectNames.stream()
@ -292,7 +296,7 @@ void testGetReactorProjects(
}
else
{
assertThat( result.hasErrors() ).isTrue();
assertThat( result.hasErrors() ).withFailMessage( "Expected result to have errors" ).isTrue();
Class<? extends Throwable> expectedException = ((ExceptionThrown) parameterExpectedResult).expected;
String partOfMessage = ((ExceptionThrown) parameterExpectedResult).partOfMessage;