Ver código fonte

SONARPLUGINS-2202 Work dir of modules are located in root project

tags/2.5-rc1
Fabrice Bellingard 11 anos atrás
pai
commit
5373972668

+ 19
- 5
src/main/java/org/sonar/runner/internal/batch/SonarProjectBuilder.java Ver arquivo

@@ -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) {

+ 28
- 13
src/test/java/org/sonar/runner/internal/batch/SonarProjectBuilderTest.java Ver arquivo

@@ -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());
}

Carregando…
Cancelar
Salvar