]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10261 don't update project links when analysing branch 3125/head
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Tue, 6 Mar 2018 17:18:47 +0000 (18:18 +0100)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Tue, 13 Mar 2018 08:12:31 +0000 (09:12 +0100)
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/PersistProjectLinksStep.java
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/PersistProjectLinksStepTest.java

index 7d7127ceea0750fcfec71d1c998ec7f9f404eba0..0b4906b60dbf1bab216b2484f413dec7f2ba3f0c 100644 (file)
@@ -31,6 +31,7 @@ import org.sonar.db.DbSession;
 import org.sonar.db.component.ProjectLinkDto;
 import org.sonar.scanner.protocol.output.ScannerReport;
 import org.sonar.scanner.protocol.output.ScannerReport.ComponentLink.ComponentLinkType;
+import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolder;
 import org.sonar.server.computation.task.projectanalysis.batch.BatchReportReader;
 import org.sonar.server.computation.task.projectanalysis.component.Component;
 import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolder;
@@ -40,6 +41,7 @@ import static com.google.common.base.Preconditions.checkArgument;
 
 public class PersistProjectLinksStep implements ComputationStep {
 
+  private final AnalysisMetadataHolder analysisMetadataHolder;
   private final DbClient dbClient;
   private final TreeRootHolder treeRootHolder;
   private final BatchReportReader reportReader;
@@ -51,7 +53,9 @@ public class PersistProjectLinksStep implements ComputationStep {
     ComponentLinkType.CI, ProjectLinkDto.TYPE_CI,
     ComponentLinkType.ISSUE, ProjectLinkDto.TYPE_ISSUE_TRACKER);
 
-  public PersistProjectLinksStep(DbClient dbClient, TreeRootHolder treeRootHolder, BatchReportReader reportReader, UuidFactory uuidFactory) {
+  public PersistProjectLinksStep(AnalysisMetadataHolder analysisMetadataHolder, DbClient dbClient, TreeRootHolder treeRootHolder,
+    BatchReportReader reportReader, UuidFactory uuidFactory) {
+    this.analysisMetadataHolder = analysisMetadataHolder;
     this.dbClient = dbClient;
     this.treeRootHolder = treeRootHolder;
     this.reportReader = reportReader;
@@ -60,6 +64,10 @@ public class PersistProjectLinksStep implements ComputationStep {
 
   @Override
   public void execute() {
+    if (!analysisMetadataHolder.getBranch().isMain()) {
+      return;
+    }
+
     try (DbSession session = dbClient.openSession(false)) {
       Component project = treeRootHolder.getRoot();
       ScannerReport.Component batchComponent = reportReader.readComponent(project.getReportAttributes().getRef());
index d5dfa7235d3d349174473b52c40d2c3f932627c3..0cf04f2a326784ea1707a911f112791e0e97a686 100644 (file)
@@ -22,21 +22,31 @@ package org.sonar.server.computation.task.projectanalysis.step;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.mockito.Mockito;
 import org.sonar.api.utils.System2;
+import org.sonar.core.util.UuidFactory;
 import org.sonar.core.util.UuidFactoryFast;
+import org.sonar.db.DbClient;
 import org.sonar.db.DbTester;
 import org.sonar.db.component.ComponentDto;
 import org.sonar.db.component.ProjectLinkDto;
 import org.sonar.scanner.protocol.output.ScannerReport;
 import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
+import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolderRule;
+import org.sonar.server.computation.task.projectanalysis.analysis.Branch;
+import org.sonar.server.computation.task.projectanalysis.batch.BatchReportReader;
 import org.sonar.server.computation.task.projectanalysis.batch.BatchReportReaderRule;
 import org.sonar.server.computation.task.projectanalysis.component.Component;
 import org.sonar.server.computation.task.projectanalysis.component.ReportComponent;
+import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolder;
 import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolderRule;
 import org.sonar.server.computation.task.step.ComputationStep;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.tuple;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
 import static org.sonar.scanner.protocol.output.ScannerReport.ComponentLink.ComponentLinkType.CI;
 import static org.sonar.scanner.protocol.output.ScannerReport.ComponentLink.ComponentLinkType.HOME;
 import static org.sonar.scanner.protocol.output.ScannerReport.ComponentLink.ComponentLinkType.ISSUE;
@@ -46,25 +56,39 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
 
   @Rule
   public ExpectedException expectedException = ExpectedException.none();
-
+  @Rule
+  public AnalysisMetadataHolderRule analysisMetadataHolder = new AnalysisMetadataHolderRule();
   @Rule
   public DbTester db = DbTester.create(System2.INSTANCE);
-
   @Rule
   public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule();
-
   @Rule
   public BatchReportReaderRule reportReader = new BatchReportReaderRule();
 
-  PersistProjectLinksStep step = new PersistProjectLinksStep(db.getDbClient(), treeRootHolder, reportReader, UuidFactoryFast.getInstance());
+  PersistProjectLinksStep step = new PersistProjectLinksStep(analysisMetadataHolder, db.getDbClient(), treeRootHolder, reportReader, UuidFactoryFast.getInstance());
 
   @Override
   protected ComputationStep step() {
     return step;
   }
 
+  @Test
+  public void no_effect_if_branch_is_not_main() {
+    DbClient dbClient = mock(DbClient.class);
+    TreeRootHolder treeRootHolder = mock(TreeRootHolder.class);
+    BatchReportReader reportReader = mock(BatchReportReader.class);
+    UuidFactory uuidFactory = mock(UuidFactory.class);
+    mockBranch(false);
+    PersistProjectLinksStep underTest = new PersistProjectLinksStep(analysisMetadataHolder, dbClient, treeRootHolder, reportReader, uuidFactory);
+
+    underTest.execute();
+
+    verifyZeroInteractions(uuidFactory, reportReader, treeRootHolder, dbClient);
+  }
+
   @Test
   public void add_links_on_project() {
+    mockBranch(true);
     treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").addChildren(
       ReportComponent.builder(Component.Type.MODULE, 2).setUuid("BCDE").build())
       .build());
@@ -93,6 +117,7 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
 
   @Test
   public void nothing_to_do_when_link_already_exists() {
+    mockBranch(true);
     ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD"));
     db.componentLinks().insertProvidedLink(project, l -> l.setType("homepage").setName("Home").setHref("http://www.sonarqube.org"));
 
@@ -113,6 +138,7 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
 
   @Test
   public void do_not_add_links_on_module() {
+    mockBranch(true);
     treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").addChildren(
       ReportComponent.builder(Component.Type.MODULE, 2).setUuid("BCDE").build())
       .build());
@@ -134,6 +160,7 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
 
   @Test
   public void do_not_add_links_on_file() {
+    mockBranch(true);
     treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").addChildren(
       ReportComponent.builder(Component.Type.FILE, 2).setUuid("BCDE").build())
       .build());
@@ -156,6 +183,7 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
 
   @Test
   public void update_link() {
+    mockBranch(true);
     ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD"));
     db.componentLinks().insertProvidedLink(project, l -> l.setType("homepage").setName("Home").setHref("http://www.sonar.org"));
 
@@ -176,6 +204,7 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
 
   @Test
   public void delete_link() {
+    mockBranch(true);
     ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD"));
     db.componentLinks().insertProvidedLink(project, l -> l.setType("homepage").setName("Home").setHref("http://www.sonar.org"));
 
@@ -193,6 +222,7 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
 
   @Test
   public void not_delete_custom_link() {
+    mockBranch(true);
     ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD"));
     db.componentLinks().insertCustomLink(project);
 
@@ -210,6 +240,7 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
 
   @Test
   public void fail_when_trying_to_add_same_link_type_multiple_times() {
+    mockBranch(true);
     treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build());
 
     reportReader.putComponent(ScannerReport.Component.newBuilder()
@@ -224,4 +255,10 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
 
     step.execute();
   }
+
+  private void mockBranch(boolean isMain) {
+    Branch branch = Mockito.mock(Branch.class);
+    when(branch.isMain()).thenReturn(isMain);
+    analysisMetadataHolder.setBranch(branch);
+  }
 }