From: Julien Lancelot Date: Fri, 8 Jun 2018 08:57:23 +0000 (+0200) Subject: SONAR-10812 Application with branches X-Git-Tag: 7.5~916 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e5bd169a6e017334ae77832adb7eaea766138e28;p=sonarqube.git SONAR-10812 Application with branches --- diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java index 49cdaf24a2b..34dc809356e 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java @@ -202,7 +202,7 @@ public class BuildComponentTreeStepTest { } @Test - public void generate_keys_when_using_branch() { + public void generate_keys_when_using_new_branch() { Branch branch = mock(Branch.class); when(branch.getName()).thenReturn("origin/feature"); when(branch.isMain()).thenReturn(false); @@ -226,6 +226,27 @@ public class BuildComponentTreeStepTest { verifyComponent(FILE_1_REF, "generated", REPORT_MODULE_KEY + ":" + REPORT_FILE_KEY_1, null); } + @Test + public void generate_keys_when_using_existing_branch() { + ComponentDto projectDto = dbTester.components().insertMainBranch(); + ComponentDto branchDto = dbTester.components().insertProjectBranch(projectDto); + Branch branch = mock(Branch.class); + when(branch.getName()).thenReturn(branchDto.getBranch()); + when(branch.isMain()).thenReturn(false); + when(branch.isLegacyFeature()).thenReturn(false); + when(branch.generateKey(any(), any())).thenReturn(branchDto.getDbKey()); + analysisMetadataHolder.setRootComponentRef(ROOT_REF) + .setAnalysisDate(ANALYSIS_DATE) + .setProject(Project.from(projectDto)) + .setBranch(branch); + BuildComponentTreeStep underTest = new BuildComponentTreeStep(dbClient, reportReader, treeRootHolder, analysisMetadataHolder); + reportReader.putComponent(componentWithKey(ROOT_REF, PROJECT, branchDto.getKey())); + + underTest.execute(); + + verifyComponent(ROOT_REF, branchDto.getDbKey(), branchDto.getKey(), branchDto.uuid()); + } + @Test public void generate_keys_when_using_main_branch() { Branch branch = new DefaultBranchImpl(); diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java index 0899d7f4c2b..f0149992fe5 100644 --- a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java +++ b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java @@ -113,8 +113,8 @@ public class ComputeEngineContainerImplTest { ); assertThat(picoContainer.getParent().getParent().getComponentAdapters()).hasSize( CONTAINER_ITSELF - + 14 // MigrationConfigurationModule - + 19 // level 2 + + 17 // MigrationConfigurationModule + + 17 // level 2 ); assertThat(picoContainer.getParent().getParent().getParent().getComponentAdapters()).hasSize( COMPONENTS_IN_LEVEL_1_AT_CONSTRUCTION diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentDao.java index e572a95ba15..37009c74415 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentDao.java @@ -27,6 +27,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Set; import java.util.stream.Stream; import javax.annotation.CheckForNull; @@ -195,6 +196,15 @@ public class ComponentDao implements Dao { return executeLargeInputs(allKeys, subKeys -> mapper(session).selectByKeysAndBranch(subKeys, branch)); } + /** + * Return list of components that will will mix main and branch components. + * Please note that a project can only appear once in the list, it's not possible to ask for many branches on same project with this method. + */ + public List selectByKeysAndBranches(DbSession session, Map branchesByKey) { + List dbKeys = branchesByKey.entrySet().stream().map(entry -> generateBranchKey(entry.getKey(), entry.getValue())).collect(toList()); + return executeLargeInputs(dbKeys, subKeys -> mapper(session).selectByDbKeys(subKeys)); + } + public List selectByKeysAndPullRequest(DbSession session, Collection keys, String pullRequestId) { List dbKeys = keys.stream().map(k -> generatePullRequestKey(k, pullRequestId)).collect(toList()); List allKeys = Stream.of(keys, dbKeys).flatMap(Collection::stream).collect(toList()); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentMapper.java index eb1023f17a0..10e3b48241c 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentMapper.java @@ -49,6 +49,8 @@ public interface ComponentMapper { List selectByKeys(@Param("keys") Collection keys); + List selectByDbKeys(@Param("dbKeys") Collection dbKeys); + List selectByKeysAndBranch(@Param("keys") Collection keys, @Param("branch") String branch); List selectByIds(@Param("ids") Collection ids); diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml index e59d48eefa3..d6fd5aa8979 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml @@ -92,6 +92,18 @@ + +