From 252d994be23dc175503efc859997ef75f6c2d65e Mon Sep 17 00:00:00 2001 From: =?utf8?q?L=C3=A9o=20Geoffroy?= Date: Thu, 30 Mar 2023 09:48:08 +0200 Subject: [PATCH] SONAR-18850 remove usage of mainBranchProjectUuid in task-analysis and es --- .../component/BranchPersisterImplIT.java | 8 +++++++ .../component/BranchPersisterImpl.java | 14 +++++------ .../server/issue/index/IssueQueryFactory.java | 23 +++++++++++-------- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplIT.java index 9c3c0412c49..f77eb52d624 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplIT.java @@ -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())); diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImpl.java index dd19d82e2b5..e21c62ccab2 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImpl.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImpl.java @@ -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()) diff --git a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java index b550cb4a6e0..b2645b4d6dc 100644 --- a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java +++ b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java @@ -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 projectKeys = request.getProjects(); if (projectKeys != null) { - List 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 branchComponents = getComponentsFromKeys(session, projectKeys, request.getBranch(), request.getPullRequest()); + Set 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 retrieveProjectUuidsFromComponents(DbSession session, List branchComponents) { + Set 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 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()); -- 2.39.5