summaryrefslogtreecommitdiffstats
path: root/sonar-scanner-engine
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2017-08-15 10:11:23 +0200
committerJanos Gyerik <janos.gyerik@sonarsource.com>2017-09-12 10:59:56 +0200
commit6533563053cceb42e926466b8d4755d5a5ec6293 (patch)
tree410d5ff07654ba0f7a7fc76147eba8e3474984a2 /sonar-scanner-engine
parenta33cf1af5ffb9b98444cea717bab330c22d86ca0 (diff)
downloadsonarqube-6533563053cceb42e926466b8d4755d5a5ec6293.tar.gz
sonarqube-6533563053cceb42e926466b8d4755d5a5ec6293.zip
Skip unchanged files and dirs on short living branches
Diffstat (limited to 'sonar-scanner-engine')
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ComponentsPublisher.java23
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ComponentsPublisherTest.java81
2 files changed, 92 insertions, 12 deletions
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ComponentsPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ComponentsPublisher.java
index b04a23870d4..68f0a380a4f 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ComponentsPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ComponentsPublisher.java
@@ -21,7 +21,9 @@ package org.sonar.scanner.report;
import java.util.Collection;
import java.util.stream.Collectors;
+
import javax.annotation.CheckForNull;
+
import org.apache.commons.lang.StringUtils;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
@@ -44,20 +46,29 @@ import org.sonar.scanner.protocol.output.ScannerReport.ComponentLink.ComponentLi
import org.sonar.scanner.protocol.output.ScannerReport.Issue;
import org.sonar.scanner.protocol.output.ScannerReportReader;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
+import org.sonar.scanner.scan.BranchConfiguration;
+import org.sonar.scanner.scan.BranchConfiguration.BranchType;
/**
* Adds components and analysis metadata to output report
*/
public class ComponentsPublisher implements ReportPublisherStep {
- private InputComponentTree componentTree;
- private InputModuleHierarchy moduleHierarchy;
+ private final InputComponentTree componentTree;
+ private final InputModuleHierarchy moduleHierarchy;
+ private final BranchConfiguration branchConfiguration;
+
private ScannerReportReader reader;
private ScannerReportWriter writer;
- public ComponentsPublisher(InputModuleHierarchy moduleHierarchy, InputComponentTree inputComponentTree) {
+ public ComponentsPublisher(InputModuleHierarchy moduleHierarchy, InputComponentTree inputComponentTree, BranchConfiguration branchConfiguration) {
this.moduleHierarchy = moduleHierarchy;
this.componentTree = inputComponentTree;
+ this.branchConfiguration = branchConfiguration;
+ }
+
+ private boolean isShortLivingBranch() {
+ return branchConfiguration.branchType() == BranchType.SHORT;
}
@Override
@@ -103,9 +114,7 @@ public class ComponentsPublisher implements ReportPublisherStep {
}
writeVersion(inputModule, builder);
- }
-
- if (component.isFile()) {
+ } else if (component.isFile()) {
DefaultInputFile file = (DefaultInputFile) component;
builder.setIsTest(file.type() == InputFile.Type.TEST);
builder.setLines(file.lines());
@@ -178,7 +187,7 @@ public class ComponentsPublisher implements ReportPublisherStep {
} else if (component instanceof DefaultInputFile) {
// skip files not marked for publishing
DefaultInputFile inputFile = (DefaultInputFile) component;
- return !inputFile.isPublished();
+ return !inputFile.isPublished() || (isShortLivingBranch() && inputFile.status() == Status.SAME);
}
return false;
}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ComponentsPublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ComponentsPublisherTest.java
index ca7163a0e01..5d45fca8155 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ComponentsPublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ComponentsPublisherTest.java
@@ -44,6 +44,8 @@ import org.sonar.scanner.protocol.output.ScannerReport.Component.FileStatus;
import org.sonar.scanner.protocol.output.ScannerReport.ComponentLink.ComponentLinkType;
import org.sonar.scanner.protocol.output.ScannerReportReader;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
+import org.sonar.scanner.scan.BranchConfiguration;
+import org.sonar.scanner.scan.BranchConfiguration.BranchType;
import org.sonar.scanner.scan.DefaultComponentTree;
import static org.assertj.core.api.Assertions.assertThat;
@@ -59,9 +61,11 @@ public class ComponentsPublisherTest {
private File outputDir;
private ScannerReportWriter writer;
private ScannerReportReader reader;
+ private BranchConfiguration branchConfiguration;
@Before
public void setUp() throws IOException {
+ branchConfiguration = mock(BranchConfiguration.class);
tree = new DefaultComponentTree();
outputDir = temp.newFolder();
writer = new ScannerReportWriter(outputDir);
@@ -116,7 +120,7 @@ public class ComponentsPublisherTest {
DefaultInputFile testFile = new TestInputFileBuilder("module1", "test/FooTest.java", 7).setType(Type.TEST).setStatus(InputFile.Status.ADDED).setLines(4).build();
tree.index(testFile, dir);
- ComponentsPublisher publisher = new ComponentsPublisher(moduleHierarchy, tree);
+ ComponentsPublisher publisher = new ComponentsPublisher(moduleHierarchy, tree, branchConfiguration);
publisher.publish(writer);
assertThat(writer.hasComponentData(FileStructure.Domain.COMPONENT, 1)).isTrue();
@@ -188,7 +192,7 @@ public class ComponentsPublisherTest {
DefaultInputFile file3 = new TestInputFileBuilder("module1", "src2/Foo3.java", 7).setPublish(false).setLines(2).build();
tree.index(file3, dir3);
- ComponentsPublisher publisher = new ComponentsPublisher(moduleHierarchy, tree);
+ ComponentsPublisher publisher = new ComponentsPublisher(moduleHierarchy, tree, branchConfiguration);
publisher.publish(writer);
assertThat(writer.hasComponentData(FileStructure.Domain.COMPONENT, 1)).isTrue();
@@ -234,7 +238,7 @@ public class ComponentsPublisherTest {
DefaultInputFile file2 = new TestInputFileBuilder("module1", "src/Foo.java", 5).setLines(2).setStatus(InputFile.Status.ADDED).build();
tree.index(file2, dir2);
- ComponentsPublisher publisher = new ComponentsPublisher(moduleHierarchy, tree);
+ ComponentsPublisher publisher = new ComponentsPublisher(moduleHierarchy, tree, branchConfiguration);
publisher.publish(writer);
assertThat(writer.hasComponentData(FileStructure.Domain.COMPONENT, 1)).isTrue();
@@ -251,6 +255,73 @@ public class ComponentsPublisherTest {
}
@Test
+ public void skip_unchanged_components_in_short_branches() throws IOException {
+ when(branchConfiguration.branchType()).thenReturn(BranchType.SHORT);
+ ProjectAnalysisInfo projectAnalysisInfo = mock(ProjectAnalysisInfo.class);
+ when(projectAnalysisInfo.analysisDate()).thenReturn(DateUtils.parseDate("2012-12-12"));
+
+ ProjectDefinition rootDef = ProjectDefinition.create()
+ .setKey("foo")
+ .setProperty(CoreProperties.PROJECT_VERSION_PROPERTY, "1.0")
+ .setName("Root project")
+ .setDescription("Root description")
+ .setBaseDir(temp.newFolder())
+ .setWorkDir(temp.newFolder());
+ DefaultInputModule root = new DefaultInputModule(rootDef, 1);
+
+ moduleHierarchy = mock(InputModuleHierarchy.class);
+ when(moduleHierarchy.root()).thenReturn(root);
+ when(moduleHierarchy.children(root)).thenReturn(Collections.emptyList());
+
+ // dir with changed files
+ DefaultInputDir dir = new DefaultInputDir("module1", "src", 2);
+ tree.index(dir, root);
+
+ // dir without changed files or issues
+ DefaultInputDir dir2 = new DefaultInputDir("module1", "src2", 3);
+ tree.index(dir2, root);
+
+ // dir without changed files but has issues
+ DefaultInputDir dir3 = new DefaultInputDir("module1", "src3", 4);
+ tree.index(dir3, root);
+ writeIssue(4);
+
+ DefaultInputFile file = new TestInputFileBuilder("module1", "src/Foo.java", 5)
+ .setLines(2)
+ .setPublish(true)
+ .setStatus(InputFile.Status.ADDED)
+ .build();
+ tree.index(file, dir);
+
+ DefaultInputFile file2 = new TestInputFileBuilder("module1", "src2/Foo2.java", 6)
+ .setPublish(true)
+ .setStatus(InputFile.Status.SAME)
+ .setLines(2)
+ .build();
+ tree.index(file2, dir2);
+
+ DefaultInputFile file3 = new TestInputFileBuilder("module1", "src3/Foo3.java", 7)
+ .setPublish(true)
+ .setStatus(InputFile.Status.SAME)
+ .setLines(2)
+ .build();
+ tree.index(file3, dir3);
+
+ ComponentsPublisher publisher = new ComponentsPublisher(moduleHierarchy, tree, branchConfiguration);
+ publisher.publish(writer);
+
+ assertThat(writer.hasComponentData(FileStructure.Domain.COMPONENT, 1)).isTrue();
+ assertThat(writer.hasComponentData(FileStructure.Domain.COMPONENT, 2)).isTrue();
+ assertThat(writer.hasComponentData(FileStructure.Domain.COMPONENT, 4)).isTrue();
+ assertThat(writer.hasComponentData(FileStructure.Domain.COMPONENT, 5)).isTrue();
+
+ assertThat(writer.hasComponentData(FileStructure.Domain.COMPONENT, 3)).isFalse();
+ assertThat(writer.hasComponentData(FileStructure.Domain.COMPONENT, 6)).isFalse();
+ assertThat(writer.hasComponentData(FileStructure.Domain.COMPONENT, 7)).isFalse();
+ }
+
+
+ @Test
public void add_components_without_version_and_name() throws IOException {
ProjectAnalysisInfo projectAnalysisInfo = mock(ProjectAnalysisInfo.class);
when(projectAnalysisInfo.analysisDate()).thenReturn(DateUtils.parseDate("2012-12-12"));
@@ -287,7 +358,7 @@ public class ComponentsPublisherTest {
DefaultInputFile testFile = new TestInputFileBuilder("module1", "test/FooTest.java", 6).setType(Type.TEST).setStatus(InputFile.Status.SAME).setLines(4).build();
tree.index(testFile, dir);
- ComponentsPublisher publisher = new ComponentsPublisher(moduleHierarchy, tree);
+ ComponentsPublisher publisher = new ComponentsPublisher(moduleHierarchy, tree, branchConfiguration);
publisher.publish(writer);
assertThat(writer.hasComponentData(FileStructure.Domain.COMPONENT, 1)).isTrue();
@@ -352,7 +423,7 @@ public class ComponentsPublisherTest {
DefaultInputFile file = new TestInputFileBuilder("module1", "src/Foo.java", 4).setLines(2).setStatus(InputFile.Status.SAME).build();
tree.index(file, dir);
- ComponentsPublisher publisher = new ComponentsPublisher(moduleHierarchy, tree);
+ ComponentsPublisher publisher = new ComponentsPublisher(moduleHierarchy, tree, branchConfiguration);
publisher.publish(writer);
ScannerReportReader reader = new ScannerReportReader(outputDir);