]> source.dussan.org Git - sonar-scanner-cli.git/commitdiff
SONARPLUGINS-2202 Work dir of modules are located in root project
authorFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Thu, 13 Sep 2012 15:57:59 +0000 (17:57 +0200)
committerFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Thu, 13 Sep 2012 16:06:47 +0000 (18:06 +0200)
src/main/java/org/sonar/runner/internal/batch/SonarProjectBuilder.java
src/test/java/org/sonar/runner/internal/batch/SonarProjectBuilderTest.java

index 93a5d81eef55e2352204edf32d75edc320e11fd7..c748fa90767cd3fc9676a42132bf6b6dc92daa83 100644 (file)
@@ -107,6 +107,7 @@ public final class SonarProjectBuilder {
   private static final List<String> NON_HERITED_PROPERTIES_FOR_CHILD = Lists.newArrayList(PROPERTY_PROJECT_BASEDIR, PROPERTY_MODULES, PROPERTY_PROJECT_DESCRIPTION);
 
   private Properties properties;
+  private File rootProjectWorkDir;
 
   private SonarProjectBuilder(Properties properties) {
     this.properties = properties;
@@ -117,23 +118,31 @@ public final class SonarProjectBuilder {
   }
 
   public ProjectDefinition generateProjectDefinition() {
-    ProjectDefinition rootProject = defineProject(properties);
+    ProjectDefinition rootProject = defineProject(properties, null);
+    rootProjectWorkDir = rootProject.getWorkDir();
     defineChildren(rootProject);
     cleanAndCheckProjectDefinitions(rootProject);
     return rootProject;
   }
 
-  private ProjectDefinition defineProject(Properties properties) {
+  private ProjectDefinition defineProject(Properties properties, ProjectDefinition parent) {
     checkMandatoryProperties(properties, MANDATORY_PROPERTIES_FOR_PROJECT);
     File baseDir = new File(properties.getProperty(PROPERTY_PROJECT_BASEDIR));
+    File workDir = null;
+    if (parent == null) {
+      workDir = initRootProjectWorkDir(baseDir);
+    } else {
+      workDir = initModuleWorkDir(properties);
+    }
+
     ProjectDefinition definition = ProjectDefinition.create((Properties) properties.clone())
         .setBaseDir(baseDir)
-        .setWorkDir(initWorkDir(baseDir));
+        .setWorkDir(workDir);
     return definition;
   }
 
   @VisibleForTesting
-  protected File initWorkDir(File baseDir) {
+  protected File initRootProjectWorkDir(File baseDir) {
     String workDir = properties.getProperty(PROPERTY_WORK_DIRECTORY);
     if (StringUtils.isBlank(workDir)) {
       return new File(baseDir, DEF_VALUE_WORK_DIRECTORY);
@@ -146,6 +155,11 @@ public final class SonarProjectBuilder {
     return new File(baseDir, customWorkDir.getPath());
   }
 
+  @VisibleForTesting
+  protected File initModuleWorkDir(Properties properties) {
+    return new File(rootProjectWorkDir, properties.getProperty(PROPERTY_PROJECT_KEY));
+  }
+
   private void defineChildren(ProjectDefinition parentProject) {
     Properties parentProps = parentProject.getProperties();
     if (parentProps.containsKey(PROPERTY_MODULES)) {
@@ -183,7 +197,7 @@ public final class SonarProjectBuilder {
 
     prefixProjectKeyWithParentKey(moduleProps, parentProject.getKey());
 
-    return defineProject(moduleProps);
+    return defineProject(moduleProps, parentProject);
   }
 
   protected void loadPropsFile(ProjectDefinition parentProject, Properties moduleProps, String moduleId) {
index d7a216402f98d4040ca5b2d32ea317243f34be03..93e12a6b97f131fe18f4803717bc95aaab2a6b3b 100644 (file)
@@ -91,6 +91,11 @@ public class SonarProjectBuilderTest {
     // and module properties must have been cleaned
     assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
     assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+    // Check baseDir and workDir
+    assertThat(rootProject.getBaseDir().getCanonicalFile())
+        .isEqualTo(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root"));
+    assertThat(rootProject.getWorkDir().getCanonicalFile())
+        .isEqualTo(new File(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root"), ".sonar"));
 
     // CHECK MODULES
     List<ProjectDefinition> modules = rootProject.getSubProjects();
@@ -108,8 +113,13 @@ public class SonarProjectBuilderTest {
     assertThat(module1.getTestDirs()).contains("tests");
     assertThat(module1.getBinaries()).contains("target/classes");
     // and module properties must have been cleaned
-    assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
-    assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+    assertThat(module1.getProperties().getProperty("module1.sonar.projectKey")).isNull();
+    assertThat(module1.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+    // Check baseDir and workDir
+    assertThat(module1.getBaseDir().getCanonicalFile())
+        .isEqualTo(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root/module1"));
+    assertThat(module1.getWorkDir().getCanonicalFile())
+        .isEqualTo(new File(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root"), ".sonar/com.foo.project:module1"));
 
     // Module 2
     ProjectDefinition module2 = modules.get(1);
@@ -122,8 +132,13 @@ public class SonarProjectBuilderTest {
     assertThat(module2.getTestDirs()).contains("tests");
     assertThat(module2.getBinaries()).contains("target/classes");
     // and module properties must have been cleaned
-    assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
-    assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+    assertThat(module2.getProperties().getProperty("module1.sonar.projectKey")).isNull();
+    assertThat(module2.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+    // Check baseDir and workDir
+    assertThat(module2.getBaseDir().getCanonicalFile())
+        .isEqualTo(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root/module2"));
+    assertThat(module2.getWorkDir().getCanonicalFile())
+        .isEqualTo(new File(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root"), ".sonar/com.foo.project:com.foo.project.module2"));
   }
 
   @Test
@@ -159,8 +174,8 @@ public class SonarProjectBuilderTest {
     assertThat(module1.getTestDirs()).contains("tests");
     assertThat(module1.getBinaries()).contains("target/classes");
     // and module properties must have been cleaned
-    assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
-    assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+    assertThat(module1.getProperties().getProperty("module1.sonar.projectKey")).isNull();
+    assertThat(module1.getProperties().getProperty("module2.sonar.projectKey")).isNull();
 
     // Module 2
     ProjectDefinition module2 = modules.get(1);
@@ -173,8 +188,8 @@ public class SonarProjectBuilderTest {
     assertThat(module2.getTestDirs()).contains("tests");
     assertThat(module2.getBinaries()).contains("target/classes");
     // and module properties must have been cleaned
-    assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
-    assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+    assertThat(module2.getProperties().getProperty("module1.sonar.projectKey")).isNull();
+    assertThat(module2.getProperties().getProperty("module2.sonar.projectKey")).isNull();
   }
 
   @Test
@@ -350,11 +365,11 @@ public class SonarProjectBuilderTest {
   }
 
   @Test
-  public void shouldInitWorkDir() {
+  public void shouldInitRootWorkDir() {
     SonarProjectBuilder builder = SonarProjectBuilder.create(new Properties());
     File baseDir = new File("target/tmp/baseDir");
 
-    File workDir = builder.initWorkDir(baseDir);
+    File workDir = builder.initRootProjectWorkDir(baseDir);
 
     assertThat(workDir).isEqualTo(new File(baseDir, ".sonar"));
   }
@@ -366,19 +381,19 @@ public class SonarProjectBuilderTest {
     SonarProjectBuilder builder = SonarProjectBuilder.create(properties);
     File baseDir = new File("target/tmp/baseDir");
 
-    File workDir = builder.initWorkDir(baseDir);
+    File workDir = builder.initRootProjectWorkDir(baseDir);
 
     assertThat(workDir).isEqualTo(new File(baseDir, ".foo"));
   }
 
   @Test
-  public void shouldInitWorkDirWithCustomAbsoluteFolder() {
+  public void shouldInitRootWorkDirWithCustomAbsoluteFolder() {
     Properties properties = new Properties();
     properties.put("sonar.working.directory", new File("src").getAbsolutePath());
     SonarProjectBuilder builder = SonarProjectBuilder.create(properties);
     File baseDir = new File("target/tmp/baseDir");
 
-    File workDir = builder.initWorkDir(baseDir);
+    File workDir = builder.initRootProjectWorkDir(baseDir);
 
     assertThat(workDir).isEqualTo(new File("src").getAbsoluteFile());
   }