diff options
author | Duarte Meneses <duarte.meneses@sonarsource.com> | 2017-08-15 10:11:23 +0200 |
---|---|---|
committer | Janos Gyerik <janos.gyerik@sonarsource.com> | 2017-09-12 10:59:56 +0200 |
commit | 6533563053cceb42e926466b8d4755d5a5ec6293 (patch) | |
tree | 410d5ff07654ba0f7a7fc76147eba8e3474984a2 /sonar-scanner-engine | |
parent | a33cf1af5ffb9b98444cea717bab330c22d86ca0 (diff) | |
download | sonarqube-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.java | 23 | ||||
-rw-r--r-- | sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ComponentsPublisherTest.java | 81 |
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); |