diff options
2 files changed, 59 insertions, 1 deletions
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 6fd35693df0..76ca07cef96 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 @@ -55,8 +55,35 @@ <select id="selectByKeyAndBranchOrPr" parameterType="String" resultType="Component"> select - <include refid="componentColumns"/> + p.uuid as uuid, + p.uuid_path as uuidPath, + p.branch_uuid as branchUuid, + p.module_uuid as moduleUuid, + p.module_uuid_path as moduleUuidPath, + p.main_branch_project_uuid as mainBranchProjectUuid, + p.kee as kee, + case + when pr.name is not null and p.scope = 'PRJ' + then pr.name + else p.name + end as name, + case + when pr.name is not null and p.scope = 'PRJ' + then pr.name + else p.long_name + end as longName, + p.description as description, + p.qualifier as qualifier, + p.scope as scope, + p.language as language, + p.root_uuid as rootUuid, + p.path as path, + p.enabled as enabled, + p.copy_component_uuid as copyComponentUuid, + p.private as isPrivate, + p.created_at as createdAt from components p + left join projects pr on p.main_branch_project_uuid = pr.uuid <if test="branch != null || pullRequest != null"> inner join project_branches pb on pb.uuid = p.branch_uuid </if> diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/component/ComponentFinderTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/component/ComponentFinderTest.java index 551f413890a..4809facd823 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/component/ComponentFinderTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/component/ComponentFinderTest.java @@ -232,4 +232,35 @@ public class ComponentFinderTest { .isInstanceOf(NotFoundException.class) .hasMessage(format("Component '%s' on branch 'other_branch' not found", fileKey)); } + + @Test + public void get_main_branch_name_when_selecting_any_branch() { + ComponentDto project = db.components().insertPrivateProject(); + + // Copy project ComponentDto and rename it to be used by the branch + ComponentDto project2 = project.copy(); + project2.setName("projectName_branch"); + project2.setLongName("projectLongName_branch"); + db.components().insertProjectBranch(project2, b -> b.setKey("my_branch")); + + ComponentDto retrievedProject = underTest.getByKeyAndOptionalBranchOrPullRequest(dbSession, project.getKey(), "my_branch", null); + assertThat(retrievedProject.name()).isEqualTo(project.name()); + assertThat(retrievedProject.longName()).isEqualTo(project.name()); + } + + @Test + public void ignore_component_parent_name_when_not_branch() { + ComponentDto project = db.components().insertPrivateProject(); + ComponentDto directory = db.components().insertComponent(newDirectory(project, "src")); + ComponentDto file = db.components().insertComponent(newFileDto(project, directory) + .setKey("org.struts:struts-core:src/org/struts/RequestContext.java") + .setName("RequestContext.java") + .setLongName("org.struts.RequestContext") + .setLanguage("java") + .setPath("src/RequestContext.java")); + + ComponentDto retrievedFile = underTest.getByKeyAndOptionalBranchOrPullRequest(dbSession, file.getKey(), null, null); + assertThat(retrievedFile.name()).isEqualTo(file.name()); + assertThat(retrievedFile.longName()).isEqualTo(file.longName()); + } } |