]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-18850 remove usage of mainBranchProjectUuid in task-analysis and es
authorLéo Geoffroy <leo.geoffroy@sonarsource.com>
Thu, 30 Mar 2023 07:48:08 +0000 (09:48 +0200)
committersonartech <sonartech@sonarsource.com>
Tue, 4 Apr 2023 20:03:16 +0000 (20:03 +0000)
server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplIT.java
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImpl.java
server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java

index 9c3c0412c49698f5e53658d9acbce36991a01aee..f77eb52d62476703837e91adbf3f0bc8c5cba21a 100644 (file)
@@ -74,6 +74,7 @@ public class BranchPersisterImplIT {
   @Test
   public void persist_fails_with_ISE_if_no_component_for_main_branches() {
     analysisMetadataHolder.setBranch(createBranch(BRANCH, true, "master"));
+    analysisMetadataHolder.setProject(PROJECT);
     treeRootHolder.setRoot(MAIN);
     DbSession dbSession = dbTester.getSession();
 
@@ -83,6 +84,8 @@ public class BranchPersisterImplIT {
   @Test
   public void persist_fails_with_ISE_if_no_component_for_branches() {
     analysisMetadataHolder.setBranch(createBranch(BRANCH, false, "foo"));
+    analysisMetadataHolder.setProject(PROJECT);
+
     treeRootHolder.setRoot(BRANCH1);
     DbSession dbSession = dbTester.getSession();
 
@@ -92,6 +95,8 @@ public class BranchPersisterImplIT {
   @Test
   public void persist_fails_with_ISE_if_no_component_for_pull_request() {
     analysisMetadataHolder.setBranch(createBranch(BranchType.PULL_REQUEST, false, "12"));
+    analysisMetadataHolder.setProject(PROJECT);
+
     treeRootHolder.setRoot(BRANCH1);
     DbSession dbSession = dbTester.getSession();
 
@@ -130,6 +135,7 @@ public class BranchPersisterImplIT {
   @Test
   public void main_branch_is_excluded_from_branch_purge_by_default() {
     analysisMetadataHolder.setBranch(createBranch(BRANCH, true, "master"));
+    analysisMetadataHolder.setProject(PROJECT);
     treeRootHolder.setRoot(MAIN);
     dbTester.components().insertPublicProject(p -> p.setKey(MAIN.getKey()).setUuid(MAIN.getUuid()));
     dbTester.commit();
@@ -203,6 +209,8 @@ public class BranchPersisterImplIT {
   public void pull_request_is_never_excluded_from_branch_purge_even_if_its_source_branch_name_matches_sonar_dbcleaner_keepFromPurge_property() {
     settings.setProperty(BRANCHES_TO_KEEP_WHEN_INACTIVE, "develop");
     analysisMetadataHolder.setBranch(createPullRequest(PR1.getKey(), MAIN.getUuid()));
+    analysisMetadataHolder.setProject(PROJECT);
+
     analysisMetadataHolder.setPullRequestKey(PR1.getKey());
     treeRootHolder.setRoot(PR1);
     ComponentDto mainComponent = dbTester.components().insertPublicProject(p -> p.setKey(MAIN.getKey()).setUuid(MAIN.getUuid()));
index dd19d82e2b5e8bc0b18df0f5ec5f200fcbdff982..e21c62ccab21eae5b551cdf8c65d128ff18c5f63 100644 (file)
@@ -31,6 +31,7 @@ import org.sonar.db.component.BranchDto;
 import org.sonar.db.component.BranchType;
 import org.sonar.db.component.ComponentDto;
 import org.sonar.db.protobuf.DbProjectBranches;
+import org.sonar.server.project.Project;
 
 import static org.sonar.core.config.PurgeConstants.BRANCHES_TO_KEEP_WHEN_INACTIVE;
 
@@ -52,13 +53,14 @@ public class BranchPersisterImpl implements BranchPersister {
 
   public void persist(DbSession dbSession) {
     Branch branch = analysisMetadataHolder.getBranch();
+    Project project = analysisMetadataHolder.getProject();
     String branchUuid = treeRootHolder.getRoot().getUuid();
 
     ComponentDto branchComponentDto = dbClient.componentDao().selectByUuid(dbSession, branchUuid)
       .orElseThrow(() -> new IllegalStateException("Component has been deleted by end-user during analysis"));
 
     // insert or update in table project_branches
-    dbClient.branchDao().upsert(dbSession, toBranchDto(dbSession, branchComponentDto, branch, checkIfExcludedFromPurge()));
+    dbClient.branchDao().upsert(dbSession, toBranchDto(dbSession, branchComponentDto, branch, project, checkIfExcludedFromPurge()));
   }
 
   private boolean checkIfExcludedFromPurge() {
@@ -76,14 +78,12 @@ public class BranchPersisterImpl implements BranchPersister {
       .anyMatch(excludePattern -> excludePattern.matcher(analysisMetadataHolder.getBranch().getName()).matches());
   }
 
-  protected BranchDto toBranchDto(DbSession dbSession, ComponentDto componentDto, Branch branch, boolean excludeFromPurge) {
+  protected BranchDto toBranchDto(DbSession dbSession, ComponentDto componentDto, Branch branch, Project project, boolean excludeFromPurge) {
     BranchDto dto = new BranchDto();
     dto.setUuid(componentDto.uuid());
 
-    // MainBranchProjectUuid will be null if it's a main branch
-    String projectUuid = firstNonNull(componentDto.getMainBranchProjectUuid(), componentDto.branchUuid());
-    dto.setIsMain(componentDto.uuid().equals(projectUuid));
-    dto.setProjectUuid(projectUuid);
+    dto.setIsMain(branch.isMain());
+    dto.setProjectUuid(project.getUuid());
     dto.setBranchType(branch.getType());
     dto.setExcludeFromPurge(excludeFromPurge);
 
@@ -96,7 +96,7 @@ public class BranchPersisterImpl implements BranchPersister {
       String pullRequestKey = analysisMetadataHolder.getPullRequestKey();
       dto.setKey(pullRequestKey);
 
-      DbProjectBranches.PullRequestData pullRequestData = getBuilder(dbSession, projectUuid, pullRequestKey)
+      DbProjectBranches.PullRequestData pullRequestData = getBuilder(dbSession, project.getUuid(), pullRequestKey)
         .setBranch(branch.getName())
         .setTitle(branch.getName())
         .setTarget(branch.getTargetBranchName())
index b550cb4a6e0e84423cffc60a59b2b44ae12acaa7..b2645b4d6dc59c767fcde0fd9dfa218ed52f3ccd 100644 (file)
@@ -41,6 +41,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
 import org.apache.commons.lang.BooleanUtils;
+import org.jetbrains.annotations.NotNull;
 import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rules.RuleType;
@@ -284,9 +285,10 @@ public class IssueQueryFactory {
 
     List<String> projectKeys = request.getProjects();
     if (projectKeys != null) {
-      List<ComponentDto> projects = getComponentsFromKeys(session, projectKeys, request.getBranch(), request.getPullRequest());
-      builder.projectUuids(projects.stream().map(IssueQueryFactory::toProjectUuid).collect(toList()));
-      setBranch(builder, projects.get(0), request.getBranch(), request.getPullRequest(), session);
+      List<ComponentDto> branchComponents = getComponentsFromKeys(session, projectKeys, request.getBranch(), request.getPullRequest());
+      Set<String> projectUuids = retrieveProjectUuidsFromComponents(session, branchComponents);
+      builder.projectUuids(projectUuids);
+      setBranch(builder, branchComponents.get(0), request.getBranch(), request.getPullRequest(), session);
     }
     builder.directories(request.getDirectories());
     builder.files(request.getFiles());
@@ -294,6 +296,14 @@ public class IssueQueryFactory {
     addComponentsBasedOnQualifier(builder, session, components, request);
   }
 
+  @NotNull
+  private Set<String> retrieveProjectUuidsFromComponents(DbSession session, List<ComponentDto> branchComponents) {
+    Set<String> branchUuids = branchComponents.stream().map(ComponentDto::branchUuid).collect(Collectors.toSet());
+    return dbClient.branchDao().selectByUuids(session, branchUuids).stream()
+      .map(BranchDto::getProjectUuid)
+      .collect(Collectors.toSet());
+  }
+
   private void addComponentsBasedOnQualifier(IssueQuery.Builder builder, DbSession dbSession, List<ComponentDto> components, SearchRequest request) {
     if (components.isEmpty()) {
       return;
@@ -317,7 +327,7 @@ public class IssueQueryFactory {
         addProjectUuidsForApplication(builder, dbSession, request);
         break;
       case Qualifiers.PROJECT:
-        builder.projectUuids(components.stream().map(IssueQueryFactory::toProjectUuid).collect(toList()));
+        builder.projectUuids(retrieveProjectUuidsFromComponents(dbSession, components));
         break;
       case Qualifiers.DIRECTORY:
         addDirectories(builder, components);
@@ -425,11 +435,6 @@ public class IssueQueryFactory {
     return Collections.emptyList();
   }
 
-  private static String toProjectUuid(ComponentDto componentDto) {
-    String mainBranchProjectUuid = componentDto.getMainBranchProjectUuid();
-    return mainBranchProjectUuid == null ? componentDto.branchUuid() : mainBranchProjectUuid;
-  }
-
   private void setBranch(IssueQuery.Builder builder, ComponentDto component, @Nullable String branch, @Nullable String pullRequest,
     DbSession session) {
     builder.branchUuid(branch == null && pullRequest == null ? null : component.branchUuid());