aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2014-10-02 18:25:17 +0200
committerJulien HENRY <julien.henry@sonarsource.com>2014-10-02 21:25:33 +0200
commit91b39b5b5350f038738f422b05ea642b52493b8e (patch)
tree22b5c1764b7a28875c971cbb7f9fce44060ed751
parent7d1f081b5a3948c71597a1a7455806f3ffd92745 (diff)
downloadsonarqube-91b39b5b5350f038738f422b05ea642b52493b8e.tar.gz
sonarqube-91b39b5b5350f038738f422b05ea642b52493b8e.zip
SONAR-5620 Improve user experience
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scm/ScmConfiguration.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scm/ScmSensor.java12
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java48
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java136
4 files changed, 145 insertions, 53 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scm/ScmConfiguration.java b/sonar-batch/src/main/java/org/sonar/batch/scm/ScmConfiguration.java
index 8ccfa2f4678..ef95169f8be 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scm/ScmConfiguration.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scm/ScmConfiguration.java
@@ -29,10 +29,12 @@ import org.sonar.api.batch.InstantiationStrategy;
import org.sonar.api.batch.bootstrap.ProjectReactor;
import org.sonar.api.batch.scm.ScmProvider;
import org.sonar.api.config.Settings;
+import org.sonar.core.DryRunIncompatible;
import java.util.LinkedHashMap;
import java.util.Map;
+@DryRunIncompatible
@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
public final class ScmConfiguration implements BatchComponent, Startable {
private static final Logger LOG = LoggerFactory.getLogger(ScmConfiguration.class);
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scm/ScmSensor.java b/sonar-batch/src/main/java/org/sonar/batch/scm/ScmSensor.java
index 2de113798e1..4485407e9e3 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scm/ScmSensor.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scm/ScmSensor.java
@@ -21,6 +21,7 @@ package org.sonar.batch.scm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.sonar.api.CoreProperties;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
@@ -33,11 +34,12 @@ import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.utils.TimeProfiler;
import org.sonar.batch.protocol.input.FileData;
import org.sonar.batch.protocol.input.ProjectReferentials;
+import org.sonar.core.DryRunIncompatible;
-import java.nio.charset.Charset;
import java.util.LinkedList;
import java.util.List;
+@DryRunIncompatible
public final class ScmSensor implements Sensor {
private static final Logger LOG = LoggerFactory.getLogger(ScmSensor.class);
@@ -71,12 +73,10 @@ public final class ScmSensor implements Sensor {
return;
}
if (configuration.provider() == null) {
- LOG.info("No SCM provider for this project");
+ LOG.info("No SCM system was detected. You can use the '" + CoreProperties.SCM_PROVIDER_KEY + "' property to explicitly specify it.");
return;
}
- TimeProfiler profiler = new TimeProfiler().start("Retrieve SCM blame information with encoding " + Charset.defaultCharset());
-
List<InputFile> filesToBlame = new LinkedList<InputFile>();
for (InputFile f : fs.inputFiles(fs.predicates().all())) {
FileData fileData = projectReferentials.fileData(projectDefinition.getKeyWithBranch(), f.relativePath());
@@ -91,9 +91,11 @@ public final class ScmSensor implements Sensor {
}
}
if (!filesToBlame.isEmpty()) {
+ LOG.info("SCM provider for this project is: " + configuration.provider().key());
+ TimeProfiler profiler = new TimeProfiler().start("Retrieve SCM blame information");
configuration.provider().blameCommand().blame(fs, filesToBlame, new DefaultBlameResult(context));
+ profiler.stop();
}
- profiler.stop();
}
/**
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java
index d0f60bb4858..a255f04eb7d 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java
@@ -102,52 +102,4 @@ public class MeasuresMediumTest {
}
- @Test
- public void testScmMeasure() throws IOException {
-
- File baseDir = temp.newFolder();
- File srcDir = new File(baseDir, "src");
- srcDir.mkdir();
-
- File xooFile = new File(srcDir, "sample.xoo");
- File xooMeasureFile = new File(srcDir, "sample.xoo.measures");
- File xooScmFile = new File(srcDir, "sample.xoo.scm");
- FileUtils.write(xooFile, "Sample xoo\ncontent");
- FileUtils.write(xooMeasureFile, "lines:5");
- FileUtils.write(xooScmFile,
- // revision,author,dateTime
- "1,julien,2013-01-04\n" +
- "1,julien,2013-01-04\n" +
- "2,julien,2013-02-03\n" +
- "2,julien,2013-02-03\n" +
- "3,simon,2013-03-04\n"
- );
-
- TaskResult result = tester.newTask()
- .properties(ImmutableMap.<String, String>builder()
- .put("sonar.task", "scan")
- .put("sonar.projectBaseDir", baseDir.getAbsolutePath())
- .put("sonar.projectKey", "com.foo.project")
- .put("sonar.projectName", "Foo Project")
- .put("sonar.projectVersion", "1.0-SNAPSHOT")
- .put("sonar.projectDescription", "Description of Foo Project")
- .put("sonar.sources", "src")
- .put("sonar.scm.enabled", "true")
- .put("sonar.scm.provider", "xoo")
- .build())
- .start();
-
- assertThat(result.measures()).hasSize(4);
-
- assertThat(result.measures()).contains(new DefaultMeasure<Integer>()
- .forMetric(CoreMetrics.LINES)
- .onFile(new DefaultInputFile("com.foo.project", "src/sample.xoo"))
- .withValue(5));
-
- assertThat(result.measures()).contains(new DefaultMeasure<String>()
- .forMetric(CoreMetrics.SCM_AUTHORS_BY_LINE)
- .onFile(new DefaultInputFile("com.foo.project", "src/sample.xoo"))
- .withValue("1=julien;2=julien;3=julien;4=julien;5=simon"));
- }
-
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java
new file mode 100644
index 00000000000..e23cdd2296f
--- /dev/null
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java
@@ -0,0 +1,136 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.batch.mediumtest.scm;
+
+import com.google.common.collect.ImmutableMap;
+import org.apache.commons.io.FileUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.sonar.api.batch.fs.internal.DefaultInputFile;
+import org.sonar.api.batch.sensor.measure.internal.DefaultMeasure;
+import org.sonar.api.measures.CoreMetrics;
+import org.sonar.batch.mediumtest.BatchMediumTester;
+import org.sonar.batch.mediumtest.BatchMediumTester.TaskResult;
+import org.sonar.xoo.XooPlugin;
+
+import java.io.File;
+import java.io.IOException;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class ScmMediumTest {
+
+ @org.junit.Rule
+ public TemporaryFolder temp = new TemporaryFolder();
+
+ public BatchMediumTester tester = BatchMediumTester.builder()
+ .registerPlugin("xoo", new XooPlugin())
+ .addDefaultQProfile("xoo", "Sonar Way")
+ .bootstrapProperties(ImmutableMap.of("sonar.analysis.mode", "sensor"))
+ .build();
+
+ @Before
+ public void prepare() {
+ tester.start();
+ }
+
+ @After
+ public void stop() {
+ tester.stop();
+ }
+
+ @Test
+ public void testScmMeasure() throws IOException {
+
+ File baseDir = prepareProject();
+
+ TaskResult result = tester.newTask()
+ .properties(ImmutableMap.<String, String>builder()
+ .put("sonar.task", "scan")
+ .put("sonar.projectBaseDir", baseDir.getAbsolutePath())
+ .put("sonar.projectKey", "com.foo.project")
+ .put("sonar.projectName", "Foo Project")
+ .put("sonar.projectVersion", "1.0-SNAPSHOT")
+ .put("sonar.projectDescription", "Description of Foo Project")
+ .put("sonar.sources", "src")
+ .put("sonar.scm.enabled", "true")
+ .put("sonar.scm.provider", "xoo")
+ .build())
+ .start();
+
+ assertThat(result.measures()).hasSize(4);
+
+ assertThat(result.measures()).contains(new DefaultMeasure<Integer>()
+ .forMetric(CoreMetrics.LINES)
+ .onFile(new DefaultInputFile("com.foo.project", "src/sample.xoo"))
+ .withValue(5));
+
+ assertThat(result.measures()).contains(new DefaultMeasure<String>()
+ .forMetric(CoreMetrics.SCM_AUTHORS_BY_LINE)
+ .onFile(new DefaultInputFile("com.foo.project", "src/sample.xoo"))
+ .withValue("1=julien;2=julien;3=julien;4=julien;5=simon"));
+ }
+
+ private File prepareProject() throws IOException {
+ File baseDir = temp.newFolder();
+ File srcDir = new File(baseDir, "src");
+ srcDir.mkdir();
+
+ File xooFile = new File(srcDir, "sample.xoo");
+ File xooMeasureFile = new File(srcDir, "sample.xoo.measures");
+ File xooScmFile = new File(srcDir, "sample.xoo.scm");
+ FileUtils.write(xooFile, "Sample xoo\ncontent");
+ FileUtils.write(xooMeasureFile, "lines:5");
+ FileUtils.write(xooScmFile,
+ // revision,author,dateTime
+ "1,julien,2013-01-04\n" +
+ "1,julien,2013-01-04\n" +
+ "2,julien,2013-02-03\n" +
+ "2,julien,2013-02-03\n" +
+ "3,simon,2013-03-04\n"
+ );
+ return baseDir;
+ }
+
+ @Test
+ public void testDisableScmSensor() throws IOException {
+
+ File baseDir = prepareProject();
+
+ TaskResult result = tester.newTask()
+ .properties(ImmutableMap.<String, String>builder()
+ .put("sonar.task", "scan")
+ .put("sonar.projectBaseDir", baseDir.getAbsolutePath())
+ .put("sonar.projectKey", "com.foo.project")
+ .put("sonar.projectName", "Foo Project")
+ .put("sonar.projectVersion", "1.0-SNAPSHOT")
+ .put("sonar.projectDescription", "Description of Foo Project")
+ .put("sonar.sources", "src")
+ .put("sonar.scm.enabled", "false")
+ .put("sonar.scm.provider", "xoo")
+ .build())
+ .start();
+
+ assertThat(result.measures()).hasSize(1);
+ }
+
+}