mthmulders commented on a change in pull request #444:
URL: https://github.com/apache/maven/pull/444#discussion_r575230619



##########
File path: 
maven-core/src/main/java/org/apache/maven/execution/DefaultBuildResumptionAnalyzer.java
##########
@@ -47,132 +41,49 @@
     @Override
     public Optional<BuildResumptionData> determineBuildResumptionData( final 
MavenExecutionResult result )
     {
-        final List<MavenProject> failedProjects = getFailedProjectsInOrder( 
result );
-
-        if ( failedProjects.isEmpty() )
+        if ( !result.hasExceptions() )
         {
-            LOGGER.info( "No failed projects found, resuming the build would 
not make sense." );
             return Optional.empty();
         }
 
-        final MavenProject resumeFromProject = failedProjects.get( 0 );
-
-        final String resumeFromSelector;
-        final List<String> projectsToSkip;
-        if ( isFailedProjectFirstInBuild( result, resumeFromProject ) )
-        {
-            // As the first module in the build failed, there is no need to 
specify this as the resumeFrom project.
-            resumeFromSelector = null;
-            projectsToSkip = determineProjectsToSkip( result, failedProjects, 
0 );
-        }
-        else
-        {
-            resumeFromSelector = resumeFromProject.getGroupId() + ":" + 
resumeFromProject.getArtifactId();
-            List<MavenProject> allProjects = 
result.getTopologicallySortedProjects();
-            int resumeFromProjectIndex = allProjects.indexOf( 
resumeFromProject );
-            projectsToSkip = determineProjectsToSkip( result, failedProjects, 
resumeFromProjectIndex + 1 );
-        }
-
-        boolean canBuildBeResumed = StringUtils.isNotEmpty( resumeFromSelector 
) || !projectsToSkip.isEmpty();
-        if ( canBuildBeResumed )
-        {
-            return Optional.of( new BuildResumptionData( resumeFromSelector, 
projectsToSkip ) );
-        }
-        else
-        {
-            return Optional.empty();
-        }
-    }
-
-    private boolean isFailedProjectFirstInBuild( final MavenExecutionResult 
result, final MavenProject failedProject )
-    {
-        final List<MavenProject> sortedProjects = 
result.getTopologicallySortedProjects();
-        return sortedProjects.indexOf( failedProject ) == 0;
-    }
-
-    private List<MavenProject> getFailedProjectsInOrder( MavenExecutionResult 
result )
-    {
         List<MavenProject> sortedProjects = 
result.getTopologicallySortedProjects();
 
-        return result.getExceptions().stream()
-                .filter( LifecycleExecutionException.class::isInstance )
-                .map( LifecycleExecutionException.class::cast )
-                .map( LifecycleExecutionException::getProject )
-                .filter( Objects::nonNull )
-                .sorted( comparing( sortedProjects::indexOf ) )
-                .collect( Collectors.toList() );
-    }
-
-    /**
-     * Projects after the first failed project could have succeeded by using 
-T or --fail-at-end.
-     * These projects can be skipped from later builds.
-     * This is not the case these projects are dependent on one of the failed 
projects.
-     * @param result The result of the Maven build.
-     * @param failedProjects The list of failed projects in the build.
-     * @param startFromProjectIndex Start looking for projects which can be 
skipped from a certain index.
-     * @return A list of projects which can be skipped in a later build.
-     */
-    private List<String> determineProjectsToSkip( MavenExecutionResult result,
-                                                  List<MavenProject> 
failedProjects,
-                                                  int startFromProjectIndex )
-    {
-        List<MavenProject> allProjects = 
result.getTopologicallySortedProjects();
-        List<MavenProject> remainingProjects = allProjects.subList( 
startFromProjectIndex, allProjects.size() );
-
-        List<GroupArtifactPair> failedProjectsGAList = failedProjects.stream()
-                .map( GroupArtifactPair::new )
-                .collect( Collectors.toList() );
-
-        return remainingProjects.stream()
+        long succeeded = sortedProjects.stream()
                 .filter( project -> result.getBuildSummary( project ) 
instanceof BuildSuccess )
-                .filter( project -> hasNoDependencyOnProjects( project, 
failedProjectsGAList ) )
-                .map( project -> project.getGroupId() + ":" + 
project.getArtifactId() )
-                .collect( Collectors.toList() );
-    }
-
-    private boolean hasNoDependencyOnProjects( MavenProject project, 
List<GroupArtifactPair> projectsGAs )
-    {
-        return project.getDependencies().stream()
-                .map( GroupArtifactPair::new )
-                .noneMatch( projectsGAs::contains );
-    }
-
-    private static class GroupArtifactPair
-    {
-        private final String groupId;
-        private final String artifactId;
-
-        GroupArtifactPair( MavenProject project )
-        {
-            this.groupId = project.getGroupId();
-            this.artifactId = project.getArtifactId();
-        }
+                .count();
 
-        GroupArtifactPair( Dependency dependency )
+        if ( succeeded == 0 )
         {
-            this.groupId = dependency.getGroupId();
-            this.artifactId = dependency.getArtifactId();
+            return Optional.empty();
         }
 
-        @Override
-        public boolean equals( Object o )
+        List<MavenProject> projects = sortedProjects.stream()
+                .filter( project -> result.getBuildSummary( project ) == null
+                        || result.getBuildSummary( project ) instanceof 
BuildFailure )
+                .collect( Collectors.toList() );
+        while ( true )
         {
-            if ( this == o )
+            List<MavenProject> children = projects.stream()

Review comment:
       Just checked the combination of `-r` and `--non-recursive`, and it 
doesn't work:
   
   > [INFO] Scanning for projects...
   > [INFO] Resuming from org.apache.maven:maven-plugin-api, 
org.apache.maven:maven-xml, org.apache.maven:maven-model-builder, 
org.apache.maven:maven-settings-builder, 
org.apache.maven:maven-resolver-provider, org.apache.maven:maven-core, 
org.apache.maven:maven-slf4j-provider, org.apache.maven:maven-embedder, 
org.apache.maven:maven-compat, org.apache.maven:apache-maven, 
org.apache.maven:maven-wrapper, org.apache.maven:apache-maven-wrapper due to 
the --resume / -r feature.
   > [ERROR] [ERROR] Could not find the selected project in the reactor: 
org.apache.maven:maven-plugin-api
   
   This makes sense as the modules listed in **target/resume.properties** do 
not exist in the Reactor. `--non-recursive` effectively reduces the available 
projects to only the selected project, as @MartinKanters pointed out.
   
   It's not something that's changing with these code changes, so let's keep it 
this way and see if the message is clear enough for end-users. 




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to