Преглед изворни кода

SONARPLUGINS-2202 Change some property names

The 2 following properties have been introduced for better 
readability and consistency:
  - sonar.projectBaseDir
  - sonar.projectConfigFile
tags/2.5-rc1
Fabrice Bellingard пре 11 година
родитељ
комит
4c56d81fdc

+ 1
- 1
src/main/java/org/sonar/runner/Main.java Прегледај датотеку

@@ -120,7 +120,7 @@ public final class Main {
// the real property of the Sonar Runner is "sonar.projectDir"
String baseDir = result.getProperty(PROJECT_HOME);
result.remove(PROJECT_HOME);
result.put(Runner.PROPERTY_PROJECT_DIR, baseDir);
result.put(Runner.PROPERTY_SONAR_PROJECT_BASEDIR, baseDir);
}

return result;

+ 4
- 4
src/main/java/org/sonar/runner/Runner.java Прегледај датотеку

@@ -83,7 +83,7 @@ public final class Runner {
*
* @since 1.5
*/
public static final String PROPERTY_PROJECT_DIR = "sonar.projectDir";
public static final String PROPERTY_SONAR_PROJECT_BASEDIR = "sonar.projectBaseDir";

/**
* Property used to specify the name of the tool that will run a Sonar analysis.
@@ -128,7 +128,7 @@ public final class Runner {
* Creates a Runner based only on the properties and with the given base directory.
*/
public static Runner create(Properties props, File basedir) {
props.put(PROPERTY_PROJECT_DIR, basedir.getAbsolutePath());
props.put(PROPERTY_SONAR_PROJECT_BASEDIR, basedir.getAbsolutePath());
return new Runner(props);
}

@@ -146,13 +146,13 @@ public final class Runner {
}

private void initDirs() {
String path = properties.getProperty(PROPERTY_PROJECT_DIR, ".");
String path = properties.getProperty(PROPERTY_SONAR_PROJECT_BASEDIR, ".");
projectDir = new File(path);
if (!projectDir.isDirectory()) {
throw new RunnerException("Project home must be an existing directory: " + path);
}
// project home exists: add its absolute path as "sonar.runner.projectDir" property
properties.put(PROPERTY_PROJECT_DIR, projectDir.getAbsolutePath());
properties.put(PROPERTY_SONAR_PROJECT_BASEDIR, projectDir.getAbsolutePath());
workDir = initWorkDir();
}


+ 1
- 3
src/main/java/org/sonar/runner/model/Launcher.java Прегледај датотеку

@@ -38,7 +38,6 @@ import org.sonar.batch.Batch;
import org.sonar.batch.bootstrapper.EnvironmentInformation;
import org.sonar.runner.Runner;

import java.io.File;
import java.io.InputStream;
import java.util.Properties;

@@ -58,8 +57,7 @@ public class Launcher {
* Main entry point.
*/
public void execute() {
File baseDir = new File(propertiesFromRunner.getProperty(Runner.PROPERTY_PROJECT_DIR));
ProjectDefinition project = SonarProjectBuilder.create(baseDir, propertiesFromRunner).generateProjectDefinition();
ProjectDefinition project = SonarProjectBuilder.create(propertiesFromRunner).generateProjectDefinition();
Configuration initialConfiguration = getInitialConfiguration(project);
initLogging(initialConfiguration);
executeBatch(project, initialConfiguration);

+ 48
- 29
src/main/java/org/sonar/runner/model/SonarProjectBuilder.java Прегледај датотеку

@@ -52,9 +52,13 @@ public final class SonarProjectBuilder {

private static final Logger LOG = LoggerFactory.getLogger(SonarProjectBuilder.class);

private static final String PROPERTY_SONAR_MODULES = "sonar.modules";
private static final String PROPERTY_MODULE_FILE = "file";
private static final String PROPERTY_MODULE_PATH = "path";
private static final String PROPERTY_PROJECT_BASEDIR = "sonar.projectBaseDir";
private static final String PROPERTY_PROJECT_CONFIG_FILE = "sonar.projectConfigFile";
private static final String PROPERTY_PROJECT_KEY = "sonar.projectKey";
private static final String PROPERTY_PROJECT_NAME = "sonar.projectName";
private static final String PROPERTY_PROJECT_DESCRIPTION = "sonar.projectDescription";
private static final String PROPERTY_PROJECT_VERSION = "sonar.projectVersion";
private static final String PROPERTY_MODULES = "sonar.modules";

/**
* New properties, to be consistent with Sonar naming conventions
@@ -88,41 +92,41 @@ public final class SonarProjectBuilder {
private static final String DEF_VALUE_WORK_DIRECTORY = ".sonar";

/**
* Array of all mandatory properties required for a root project.
* Array of all mandatory properties required for a project.
*/
private static final String[] MANDATORY_PROPERTIES_FOR_ROOT = {"sonar.projectKey", "sonar.projectName", "sonar.projectVersion", PROPERTY_SOURCES};
private static final String[] MANDATORY_PROPERTIES_FOR_PROJECT = {PROPERTY_PROJECT_BASEDIR, PROPERTY_PROJECT_KEY, PROPERTY_PROJECT_NAME, PROPERTY_PROJECT_VERSION,
PROPERTY_SOURCES};

/**
* Array of all mandatory properties required for a child project.
* Array of all mandatory properties required for a child project before its properties get merged with its parent ones.
*/
private static final String[] MANDATORY_PROPERTIES_FOR_CHILD = {"sonar.projectKey", "sonar.projectName"};
private static final String[] MANDATORY_PROPERTIES_FOR_CHILD = {PROPERTY_PROJECT_KEY, PROPERTY_PROJECT_NAME};

/**
* Properties that must not be passed from the parent project to its children.
*/
private static final List<String> NON_HERITED_PROPERTIES_FOR_CHILD = Lists.newArrayList("sonar.modules", "sonar.projectDescription");
private static final List<String> NON_HERITED_PROPERTIES_FOR_CHILD = Lists.newArrayList(PROPERTY_PROJECT_BASEDIR, PROPERTY_MODULES, PROPERTY_PROJECT_DESCRIPTION);

private File rootBaseDir;
private Properties properties;

private SonarProjectBuilder(File baseDir, Properties properties) {
this.rootBaseDir = baseDir;
private SonarProjectBuilder(Properties properties) {
this.properties = properties;
}

public static SonarProjectBuilder create(File baseDir, Properties properties) {
return new SonarProjectBuilder(baseDir, properties);
public static SonarProjectBuilder create(Properties properties) {
return new SonarProjectBuilder(properties);
}

public ProjectDefinition generateProjectDefinition() {
checkMandatoryProperties("root project", properties, MANDATORY_PROPERTIES_FOR_ROOT);
ProjectDefinition rootProject = defineProject(rootBaseDir, properties);
ProjectDefinition rootProject = defineProject(properties);
defineChildren(rootProject);
cleanAndCheckProjectDefinitions(rootProject);
return rootProject;
}

private ProjectDefinition defineProject(File baseDir, Properties properties) {
private ProjectDefinition defineProject(Properties properties) {
checkMandatoryProperties("root project", properties, MANDATORY_PROPERTIES_FOR_PROJECT);
File baseDir = new File(properties.getProperty(PROPERTY_PROJECT_BASEDIR));
ProjectDefinition definition = ProjectDefinition.create((Properties) properties.clone())
.setBaseDir(baseDir)
.setWorkDir(initWorkDir(baseDir));
@@ -145,11 +149,11 @@ public final class SonarProjectBuilder {

private void defineChildren(ProjectDefinition parentProject) {
Properties parentProps = parentProject.getProperties();
if (parentProps.containsKey(PROPERTY_SONAR_MODULES)) {
for (String module : SonarRunnerUtils.getListFromProperty(parentProps, PROPERTY_SONAR_MODULES)) {
if (parentProps.containsKey(PROPERTY_MODULES)) {
for (String module : SonarRunnerUtils.getListFromProperty(parentProps, PROPERTY_MODULES)) {
Properties moduleProps = extractModuleProperties(module, parentProps);
ProjectDefinition childProject = null;
if (moduleProps.containsKey(PROPERTY_MODULE_FILE)) {
if (moduleProps.containsKey(PROPERTY_PROJECT_CONFIG_FILE)) {
childProject = loadChildProjectFromPropertyFile(parentProject, moduleProps, module);
} else {
childProject = loadChildProjectFromProperties(parentProject, moduleProps, module);
@@ -165,21 +169,20 @@ public final class SonarProjectBuilder {
private ProjectDefinition loadChildProjectFromProperties(ProjectDefinition rootProject, Properties childProps, String moduleId) {
checkMandatoryProperties(moduleId, childProps, MANDATORY_PROPERTIES_FOR_CHILD);
mergeParentProperties(childProps, rootProject.getProperties());

File baseDir = null;
if (childProps.containsKey(PROPERTY_MODULE_PATH)) {
baseDir = getFileFromPath(childProps.getProperty(PROPERTY_MODULE_PATH), rootProject.getBaseDir());
if (childProps.containsKey(PROPERTY_PROJECT_BASEDIR)) {
baseDir = getFileFromPath(childProps.getProperty(PROPERTY_PROJECT_BASEDIR), rootProject.getBaseDir());
} else {
baseDir = new File(rootProject.getBaseDir(), moduleId);
}
if (!baseDir.isDirectory()) {
throw new RunnerException("The base directory of the module '" + moduleId + "' does not exist: " + baseDir.getAbsolutePath());
}
setProjectBaseDirOnProperties(childProps, moduleId, baseDir);

return defineProject(baseDir, childProps);
return defineProject(childProps);
}

private ProjectDefinition loadChildProjectFromPropertyFile(ProjectDefinition rootProject, Properties moduleProps, String moduleId) {
File propertyFile = getFileFromPath(moduleProps.getProperty(PROPERTY_MODULE_FILE), rootProject.getBaseDir());
File propertyFile = getFileFromPath(moduleProps.getProperty(PROPERTY_PROJECT_CONFIG_FILE), rootProject.getBaseDir());
if (!propertyFile.isFile()) {
throw new RunnerException("The properties file of the module '" + moduleId + "' does not exist: " + propertyFile.getAbsolutePath());
}
@@ -193,10 +196,26 @@ public final class SonarProjectBuilder {
} finally {
IOUtils.closeQuietly(fileInputStream);
}

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

return defineProject(propertyFile.getParentFile(), childProps);
File baseDir = null;
if (childProps.containsKey(PROPERTY_PROJECT_BASEDIR)) {
baseDir = getFileFromPath(childProps.getProperty(PROPERTY_PROJECT_BASEDIR), propertyFile.getParentFile());
} else {
baseDir = propertyFile.getParentFile();
}
setProjectBaseDirOnProperties(childProps, moduleId, baseDir);

return defineProject(childProps);
}

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

@VisibleForTesting
@@ -261,7 +280,7 @@ public final class SonarProjectBuilder {

// and they don't need properties related to their modules either
Properties clone = (Properties) properties.clone();
List<String> moduleIds = Lists.newArrayList(SonarRunnerUtils.getListFromProperty(properties, PROPERTY_SONAR_MODULES));
List<String> moduleIds = Lists.newArrayList(SonarRunnerUtils.getListFromProperty(properties, PROPERTY_MODULES));
for (Entry<Object, Object> entry : clone.entrySet()) {
String key = (String) entry.getKey();
if (isKeyPrefixedByModuleId(key, moduleIds)) {
@@ -290,7 +309,7 @@ public final class SonarProjectBuilder {

@VisibleForTesting
protected static void mergeParentProperties(Properties childProps, Properties parentProps) {
List<String> moduleIds = Lists.newArrayList(SonarRunnerUtils.getListFromProperty(parentProps, PROPERTY_SONAR_MODULES));
List<String> moduleIds = Lists.newArrayList(SonarRunnerUtils.getListFromProperty(parentProps, PROPERTY_MODULES));
for (Map.Entry<Object, Object> entry : parentProps.entrySet()) {
String key = (String) entry.getKey();
if (!childProps.containsKey(key)

+ 2
- 2
src/test/java/org/sonar/runner/RunnerTest.java Прегледај датотеку

@@ -81,9 +81,9 @@ public class RunnerTest {
public void shouldInitDirs() throws Exception {
Properties props = new Properties();
File home = TestUtils.getResource(this.getClass(), "shouldInitDirs");
props.setProperty(Runner.PROPERTY_PROJECT_DIR, home.getCanonicalPath());
props.setProperty(Runner.PROPERTY_SONAR_PROJECT_BASEDIR, home.getCanonicalPath());
Runner runner = Runner.create(props);
assertThat(runner.getProperties().get(Runner.PROPERTY_PROJECT_DIR)).isEqualTo(home.getCanonicalPath());
assertThat(runner.getProperties().get(Runner.PROPERTY_SONAR_PROJECT_BASEDIR)).isEqualTo(home.getCanonicalPath());

assertThat(runner.getProjectDir()).isEqualTo(home);
assertThat(runner.getWorkDir()).isEqualTo(new File(home, ".sonar"));

+ 13
- 9
src/test/java/org/sonar/runner/model/SonarProjectBuilderTest.java Прегледај датотеку

@@ -127,19 +127,22 @@ public class SonarProjectBuilderTest {
}

@Test
public void shouldDefineMultiModuleProjectWithPath() throws IOException {
ProjectDefinition rootProject = loadProjectDefinition("multi-module-with-path");
public void shouldDefineMultiModuleProjectWithBaseDir() throws IOException {
ProjectDefinition rootProject = loadProjectDefinition("multi-module-with-basedir");
List<ProjectDefinition> modules = rootProject.getSubProjects();
assertThat(modules.size()).isEqualTo(1);
assertThat(modules.get(0).getKey()).isEqualTo("com.foo.project.module1");
}

@Test
public void shouldDefineMultiModuleProjectWithFile() throws IOException {
ProjectDefinition rootProject = loadProjectDefinition("multi-module-with-file");
public void shouldDefineMultiModuleProjectWithConfigFile() throws IOException {
ProjectDefinition rootProject = loadProjectDefinition("multi-module-with-configfile");
List<ProjectDefinition> modules = rootProject.getSubProjects();
assertThat(modules.size()).isEqualTo(1);
assertThat(modules.get(0).getKey()).isEqualTo("com.foo.project.module1");
ProjectDefinition module = modules.get(0);
assertThat(module.getKey()).isEqualTo("com.foo.project.module1");
// 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"));
}

@Test
@@ -274,7 +277,8 @@ public class SonarProjectBuilderTest {

private ProjectDefinition loadProjectDefinition(String projectFolder) throws FileNotFoundException, IOException {
Properties props = loadPropsFromFile(projectFolder + "/sonar-project.properties");
ProjectDefinition projectDefinition = SonarProjectBuilder.create(TestUtils.getResource(this.getClass(), projectFolder), props)
props.put("sonar.projectBaseDir", TestUtils.getResource(this.getClass(), projectFolder).getAbsolutePath());
ProjectDefinition projectDefinition = SonarProjectBuilder.create(props)
.generateProjectDefinition();
return projectDefinition;
}
@@ -293,7 +297,7 @@ public class SonarProjectBuilderTest {

@Test
public void shouldInitWorkDir() {
SonarProjectBuilder builder = SonarProjectBuilder.create(null, new Properties());
SonarProjectBuilder builder = SonarProjectBuilder.create(new Properties());
File baseDir = new File("target/tmp/baseDir");

File workDir = builder.initWorkDir(baseDir);
@@ -305,7 +309,7 @@ public class SonarProjectBuilderTest {
public void shouldInitWorkDirWithCustomRelativeFolder() {
Properties properties = new Properties();
properties.put("sonar.working.directory", ".foo");
SonarProjectBuilder builder = SonarProjectBuilder.create(null, properties);
SonarProjectBuilder builder = SonarProjectBuilder.create(properties);
File baseDir = new File("target/tmp/baseDir");

File workDir = builder.initWorkDir(baseDir);
@@ -317,7 +321,7 @@ public class SonarProjectBuilderTest {
public void shouldInitWorkDirWithCustomAbsoluteFolder() {
Properties properties = new Properties();
properties.put("sonar.working.directory", new File("src").getAbsolutePath());
SonarProjectBuilder builder = SonarProjectBuilder.create(null, properties);
SonarProjectBuilder builder = SonarProjectBuilder.create(properties);
File baseDir = new File("target/tmp/baseDir");

File workDir = builder.initWorkDir(baseDir);

src/test/resources/org/sonar/runner/model/SonarProjectBuilderTest/multi-module-with-file/any-folder/sources/Fake.java → src/test/resources/org/sonar/runner/model/SonarProjectBuilderTest/multi-module-with-basedir/modules/module1/sources/Fake.java Прегледај датотеку


src/test/resources/org/sonar/runner/model/SonarProjectBuilderTest/multi-module-with-file/sonar-project.properties → src/test/resources/org/sonar/runner/model/SonarProjectBuilderTest/multi-module-with-basedir/sonar-project.properties Прегледај датотеку

@@ -9,6 +9,6 @@ sonar.binaries=target/classes

sonar.modules=module1

module1.file=any-folder/any-file.properties
module1.sonar.projectBaseDir=modules/module1
module1.sonar.projectKey=com.foo.project.module1
module1.sonar.projectName=Foo Module 1

src/test/resources/org/sonar/runner/model/SonarProjectBuilderTest/multi-module-with-file/any-folder/any-file.properties → src/test/resources/org/sonar/runner/model/SonarProjectBuilderTest/multi-module-with-configfile/any-folder/generated/any-file.properties Прегледај датотеку

@@ -1,2 +1,5 @@
sonar.projectKey=com.foo.project.module1
sonar.projectName=Foo Module 1

# and specify a different baseDir
sonar.projectBaseDir=..

src/test/resources/org/sonar/runner/model/SonarProjectBuilderTest/multi-module-with-path/modules/module1/sources/Fake.java → src/test/resources/org/sonar/runner/model/SonarProjectBuilderTest/multi-module-with-configfile/any-folder/sources/Fake.java Прегледај датотеку


src/test/resources/org/sonar/runner/model/SonarProjectBuilderTest/multi-module-with-path/sonar-project.properties → src/test/resources/org/sonar/runner/model/SonarProjectBuilderTest/multi-module-with-configfile/sonar-project.properties Прегледај датотеку

@@ -9,6 +9,4 @@ sonar.binaries=target/classes

sonar.modules=module1

module1.path=modules/module1
module1.sonar.projectKey=com.foo.project.module1
module1.sonar.projectName=Foo Module 1
module1.sonar.projectConfigFile=any-folder/generated/any-file.properties

+ 1
- 3
src/test/resources/org/sonar/runner/model/SonarProjectBuilderTest/multi-module-with-unexisting-file/sonar-project.properties Прегледај датотеку

@@ -9,6 +9,4 @@ sonar.binaries=target/classes

sonar.modules=module1

module1.file=any-folder/any-file.properties
module1.sonar.projectKey=com.foo.project.module1
module1.sonar.projectName=Foo Module 1
module1.sonar.projectConfigFile=any-folder/any-file.properties

Loading…
Откажи
Сачувај