@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();
@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();
@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();
@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();
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()));
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;
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() {
.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);
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())
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;
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());
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;
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);
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());