Browse Source

SONARPLUGINS-2202 Prefix child key by parent key

tags/2.5-rc1
Fabrice Bellingard 11 years ago
parent
commit
6dbe831ea8

+ 16
- 8
src/main/java/org/sonar/runner/model/SonarProjectBuilder.java View File

} }
} }


private ProjectDefinition loadChildProjectFromProperties(ProjectDefinition rootProject, Properties childProps, String moduleId) {
private ProjectDefinition loadChildProjectFromProperties(ProjectDefinition parentProject, Properties childProps, String moduleId) {
checkMandatoryProperties(moduleId, childProps, MANDATORY_PROPERTIES_FOR_CHILD); checkMandatoryProperties(moduleId, childProps, MANDATORY_PROPERTIES_FOR_CHILD);
mergeParentProperties(childProps, rootProject.getProperties());
mergeParentProperties(childProps, parentProject.getProperties());


File baseDir = null; File baseDir = null;
if (childProps.containsKey(PROPERTY_PROJECT_BASEDIR)) { if (childProps.containsKey(PROPERTY_PROJECT_BASEDIR)) {
baseDir = getFileFromPath(childProps.getProperty(PROPERTY_PROJECT_BASEDIR), rootProject.getBaseDir());
baseDir = getFileFromPath(childProps.getProperty(PROPERTY_PROJECT_BASEDIR), parentProject.getBaseDir());
} else { } else {
baseDir = new File(rootProject.getBaseDir(), moduleId);
baseDir = new File(parentProject.getBaseDir(), moduleId);
} }
setProjectBaseDirOnProperties(childProps, moduleId, baseDir); setProjectBaseDirOnProperties(childProps, moduleId, baseDir);
prefixProjectKeyWithParentKey(childProps, parentProject.getKey());


return defineProject(childProps); return defineProject(childProps);
} }


private ProjectDefinition loadChildProjectFromPropertyFile(ProjectDefinition rootProject, Properties moduleProps, String moduleId) {
File propertyFile = getFileFromPath(moduleProps.getProperty(PROPERTY_PROJECT_CONFIG_FILE), rootProject.getBaseDir());
private ProjectDefinition loadChildProjectFromPropertyFile(ProjectDefinition parentProject, Properties moduleProps, String moduleId) {
File propertyFile = getFileFromPath(moduleProps.getProperty(PROPERTY_PROJECT_CONFIG_FILE), parentProject.getBaseDir());
if (!propertyFile.isFile()) { if (!propertyFile.isFile()) {
throw new RunnerException("The properties file of the module '" + moduleId + "' does not exist: " + propertyFile.getAbsolutePath()); throw new RunnerException("The properties file of the module '" + moduleId + "' does not exist: " + propertyFile.getAbsolutePath());
} }
} }


checkMandatoryProperties(moduleId, childProps, MANDATORY_PROPERTIES_FOR_CHILD); checkMandatoryProperties(moduleId, childProps, MANDATORY_PROPERTIES_FOR_CHILD);
mergeParentProperties(childProps, rootProject.getProperties());
mergeParentProperties(childProps, parentProject.getProperties());


File baseDir = null; File baseDir = null;
if (childProps.containsKey(PROPERTY_PROJECT_BASEDIR)) { if (childProps.containsKey(PROPERTY_PROJECT_BASEDIR)) {
baseDir = propertyFile.getParentFile(); baseDir = propertyFile.getParentFile();
} }
setProjectBaseDirOnProperties(childProps, moduleId, baseDir); setProjectBaseDirOnProperties(childProps, moduleId, baseDir);
prefixProjectKeyWithParentKey(childProps, parentProject.getKey());


return defineProject(childProps); return defineProject(childProps);
} }


private void setProjectBaseDirOnProperties(Properties childProps, String moduleId, File baseDir) {
@VisibleForTesting
protected static void prefixProjectKeyWithParentKey(Properties childProps, String parentKey) {
String childKey = childProps.getProperty(PROPERTY_PROJECT_KEY);
childProps.put(PROPERTY_PROJECT_KEY, parentKey + ":" + childKey);
}

private static void setProjectBaseDirOnProperties(Properties childProps, String moduleId, File baseDir) {
if (!baseDir.isDirectory()) { if (!baseDir.isDirectory()) {
throw new RunnerException("The base directory of the module '" + moduleId + "' does not exist: " + baseDir.getAbsolutePath()); throw new RunnerException("The base directory of the module '" + moduleId + "' does not exist: " + baseDir.getAbsolutePath());
} }

+ 13
- 4
src/test/java/org/sonar/runner/model/SonarProjectBuilderTest.java View File



// Module 1 // Module 1
ProjectDefinition module1 = modules.get(0); ProjectDefinition module1 = modules.get(0);
assertThat(module1.getKey()).isEqualTo("com.foo.project.module1");
assertThat(module1.getKey()).isEqualTo("com.foo.project:com.foo.project.module1");
assertThat(module1.getName()).isEqualTo("Foo Module 1"); assertThat(module1.getName()).isEqualTo("Foo Module 1");
assertThat(module1.getVersion()).isEqualTo("1.0-SNAPSHOT"); assertThat(module1.getVersion()).isEqualTo("1.0-SNAPSHOT");
// Description should not be inherited from parent if not set // Description should not be inherited from parent if not set


// Module 2 // Module 2
ProjectDefinition module2 = modules.get(1); ProjectDefinition module2 = modules.get(1);
assertThat(module2.getKey()).isEqualTo("com.foo.project.module2");
assertThat(module2.getKey()).isEqualTo("com.foo.project:com.foo.project.module2");
assertThat(module2.getName()).isEqualTo("Foo Module 2"); assertThat(module2.getName()).isEqualTo("Foo Module 2");
assertThat(module2.getVersion()).isEqualTo("1.0-SNAPSHOT"); assertThat(module2.getVersion()).isEqualTo("1.0-SNAPSHOT");
assertThat(module2.getDescription()).isEqualTo("Description of Module 2"); assertThat(module2.getDescription()).isEqualTo("Description of Module 2");
ProjectDefinition rootProject = loadProjectDefinition("multi-module-with-basedir"); ProjectDefinition rootProject = loadProjectDefinition("multi-module-with-basedir");
List<ProjectDefinition> modules = rootProject.getSubProjects(); List<ProjectDefinition> modules = rootProject.getSubProjects();
assertThat(modules.size()).isEqualTo(1); assertThat(modules.size()).isEqualTo(1);
assertThat(modules.get(0).getKey()).isEqualTo("com.foo.project.module1");
assertThat(modules.get(0).getKey()).isEqualTo("com.foo.project:com.foo.project.module1");
} }


@Test @Test
List<ProjectDefinition> modules = rootProject.getSubProjects(); List<ProjectDefinition> modules = rootProject.getSubProjects();
assertThat(modules.size()).isEqualTo(1); assertThat(modules.size()).isEqualTo(1);
ProjectDefinition module = modules.get(0); ProjectDefinition module = modules.get(0);
assertThat(module.getKey()).isEqualTo("com.foo.project.module1");
assertThat(module.getKey()).isEqualTo("com.foo.project:com.foo.project.module1");
// verify the base directory that has been changed in this config file // verify the base directory that has been changed in this config file
assertThat(module.getBaseDir().getCanonicalFile()).isEqualTo(TestUtils.getResource(this.getClass(), "multi-module-with-configfile/any-folder")); assertThat(module.getBaseDir().getCanonicalFile()).isEqualTo(TestUtils.getResource(this.getClass(), "multi-module-with-configfile/any-folder"));
} }
assertThat(workDir).isEqualTo(new File("src").getAbsoluteFile()); assertThat(workDir).isEqualTo(new File("src").getAbsoluteFile());
} }


@Test
public void shouldReturnPrefixedKey() {
Properties props = new Properties();
props.put("sonar.projectKey", "my-module-key");

SonarProjectBuilder.prefixProjectKeyWithParentKey(props, "my-parent-key");
assertThat(props.getProperty("sonar.projectKey")).isEqualTo("my-parent-key:my-module-key");
}

} }

Loading…
Cancel
Save