diff --git a/src/main/java/com/soebes/maven/extensions/incremental/IncrementalModuleBuilderImpl.java b/src/main/java/com/soebes/maven/extensions/incremental/IncrementalModuleBuilderImpl.java index 0b0b0db..d191b7a 100644 --- a/src/main/java/com/soebes/maven/extensions/incremental/IncrementalModuleBuilderImpl.java +++ b/src/main/java/com/soebes/maven/extensions/incremental/IncrementalModuleBuilderImpl.java @@ -92,10 +92,8 @@ class IncrementalModuleBuilderImpl public void build() throws ExecutionException, InterruptedException { - this.mavenSession.setProjects( this.projects ); - logger.info( "Recalculated reactor:" ); - for ( MavenProject mavenProject : this.mavenSession.getProjects() ) + for ( MavenProject mavenProject : this.projects ) { logger.info( " {}", mavenProject.getName() ); } @@ -108,7 +106,7 @@ public void build() { logger.debug( " task:" + task ); } - for ( MavenProject mavenProject : mavenSession.getProjects() ) + for ( MavenProject mavenProject : this.projects ) { logger.info( "Building project: {}", mavenProject.getId() ); lifecycleModuleBuilder.buildProject( mavenSession, reactorContext, mavenProject, taskSegment ); diff --git a/src/main/java/com/soebes/maven/extensions/incremental/ModuleCalculator.java b/src/main/java/com/soebes/maven/extensions/incremental/ModuleCalculator.java index 8734681..3cc7fce 100644 --- a/src/main/java/com/soebes/maven/extensions/incremental/ModuleCalculator.java +++ b/src/main/java/com/soebes/maven/extensions/incremental/ModuleCalculator.java @@ -62,22 +62,28 @@ public List calculateChangedModules( Path projectRootpath ) // TODO: Think about if we got only pom packaging modules? Do we // need to do something special there? List result = new ArrayList<>(); - for ( MavenProject project : projectList ) + for ( ScmFile fileItem : changeList ) { - Path relativize = projectRootpath.relativize( project.getBasedir().toPath() ); - for ( ScmFile fileItem : changeList ) + MavenProject project = null; + int longestRelativePathLength = -1; + for ( MavenProject currProject : projectList ) { - boolean startsWith = new File( fileItem.getPath() ).toPath().startsWith( relativize ); - logger.debug( "startswith: " + startsWith + " " + fileItem.getPath() + " " + relativize ); - if ( startsWith ) + Path relativize = projectRootpath.relativize( currProject.getBasedir().toPath() ); + boolean startsWith = "".equals(relativize.toString()) || ".".equals(relativize.toString()) + || new File(fileItem.getPath()).toPath().startsWith(relativize); + logger.debug("startswith: " + startsWith + " " + fileItem.getPath() + " " + relativize); + int currRelativePathLength = relativize.toString().length(); + if (startsWith && longestRelativePathLength < currRelativePathLength) { - if ( !result.contains( project ) ) - { - result.add( project ); - } + longestRelativePathLength = currRelativePathLength; + project = currProject; } } + if (project != null && !result.contains(project)) { + result.add(project); + } } + return result; } diff --git a/src/test/java/com/soebes/maven/extensions/incremental/ModuleCalculatorTest.java b/src/test/java/com/soebes/maven/extensions/incremental/ModuleCalculatorTest.java index 9df0bfa..0b38589 100644 --- a/src/test/java/com/soebes/maven/extensions/incremental/ModuleCalculatorTest.java +++ b/src/test/java/com/soebes/maven/extensions/incremental/ModuleCalculatorTest.java @@ -51,6 +51,8 @@ public class ModuleCalculatorTest private MavenProject subdomain = createProject( "subdomain", new File( baseDir, "domain/subdomain" ) ); + private MavenProject subsubdomain = createProject( "subsubdomain", new File( baseDir, "domain/subdomain/subsubdomain" ) ); + private ModuleCalculator moduleCalculator; @Before @@ -61,6 +63,7 @@ public void before() projectList.add( assembly ); projectList.add( domain ); projectList.add( subdomain ); + projectList.add( subsubdomain ); } private MavenProject createProject( String artifactId, File baseDir ) @@ -125,7 +128,7 @@ public void shouldResultInTwoModulesDomainAndSubDomain() assertThat( changedModules ).hasSize( 2 ).containsOnly( domain, subdomain ); } - @Ignore + @Test public void shouldResultInThreeModules() { // TODO: Think about this test case. What @@ -143,4 +146,17 @@ public void shouldResultInThreeModules() assertThat( changedModules ).hasSize( 3 ).containsOnly( domain, subdomain, parent ); } + @Test + public void shouldReturnOnlyChangedModules() { + Path root = baseDir.toPath(); + List changeList = Arrays.asList( + new ScmFile( "domain/subdomain/subsubdomain/pom.xml", ScmFileStatus.MODIFIED ), + new ScmFile( "domain/pom.xml", ScmFileStatus.MODIFIED ) + ); + moduleCalculator = new ModuleCalculator( projectList, changeList ); + List changedModules = moduleCalculator.calculateChangedModules( root ); + + assertThat( changedModules ).hasSize( 2 ).containsOnly( subsubdomain, domain ); + } + }