From: Duarte Meneses Date: Fri, 27 Mar 2020 16:43:28 +0000 (-0500) Subject: SONAR-13262 P/R analysis fails if top directory as same name as project X-Git-Tag: 8.3.0.34182~22 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=f2bf93dff30ed93fbce24dcf2078801e2544d008;p=sonarqube.git SONAR-13262 P/R analysis fails if top directory as same name as project --- diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ComponentTreeBuilder.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ComponentTreeBuilder.java index 7a7bd3b5b51..96edd8711ab 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ComponentTreeBuilder.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ComponentTreeBuilder.java @@ -213,16 +213,16 @@ public class ComponentTreeBuilder { } public Component buildChangedComponentTreeRoot(Component project) { - return buildChangedComponentTree(project, ""); + return buildChangedComponentTree(project); } @Nullable - private static Component buildChangedComponentTree(Component component, String parentPath) { + private static Component buildChangedComponentTree(Component component) { switch (component.getType()) { case PROJECT: return buildChangedProject(component); case DIRECTORY: - return buildChangedDirectory(component, parentPath); + return buildChangedDirectory(component); case FILE: return buildChangedFile(component); default: @@ -231,14 +231,14 @@ public class ComponentTreeBuilder { } private static Component buildChangedProject(Component component) { - return changedComponentBuilder(component, "", "") + return changedComponentBuilder(component, "") .setProjectAttributes(new ProjectAttributes(component.getProjectAttributes())) .addChildren(buildChangedComponentChildren(component)) .build(); } @Nullable - private static Component buildChangedDirectory(Component component, String parentPath) { + private static Component buildChangedDirectory(Component component) { List children = buildChangedComponentChildren(component); if (children.isEmpty()) { return null; @@ -246,11 +246,12 @@ public class ComponentTreeBuilder { if (children.size() == 1 && children.get(0).getType() == Component.Type.DIRECTORY) { Component child = children.get(0); - return changedComponentBuilder(child, parentPath, child.getName()) + String shortName = component.getShortName() + "/" + child.getShortName(); + return changedComponentBuilder(child, shortName) .addChildren(child.getChildren()) .build(); } else { - return changedComponentBuilder(component, parentPath, component.getName()) + return changedComponentBuilder(component, component.getShortName()) .addChildren(children) .build(); } @@ -258,12 +259,12 @@ public class ComponentTreeBuilder { private static List buildChangedComponentChildren(Component component) { return component.getChildren().stream() - .map(c -> ComponentTreeBuilder.buildChangedComponentTree(c, component.getName())) + .map(ComponentTreeBuilder::buildChangedComponentTree) .filter(Objects::nonNull) .collect(MoreCollectors.toList()); } - private static ComponentImpl.Builder changedComponentBuilder(Component component, String parentPath, String path) { + private static ComponentImpl.Builder changedComponentBuilder(Component component, String newShortName) { return ComponentImpl.builder(component.getType()) .setUuid(component.getUuid()) .setDbKey(component.getDbKey()) @@ -271,7 +272,7 @@ public class ComponentTreeBuilder { .setStatus(component.getStatus()) .setReportAttributes(component.getReportAttributes()) .setName(component.getName()) - .setShortName(removeStart(removeStart(path, parentPath), "/")) + .setShortName(newShortName) .setDescription(component.getDescription()); } 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 153cbf4d0d6..4a4cf3db828 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 @@ -194,6 +194,29 @@ public class BuildComponentTreeStepTest { context.getStatistics().assertValue("components", 7); } + /** + * SONAR-13262 + */ + @Test + public void verify_tree_is_correctly_built_in_prs_with_repeated_names() { + setAnalysisMetadataHolder(true); + reportReader.putComponent(component(ROOT_REF, PROJECT, REPORT_PROJECT_KEY, FILE_1_REF)); + reportReader.putComponent(componentWithPath(FILE_1_REF, FILE, REPORT_PROJECT_KEY + "/file.js")); + + TestComputationStepContext context = new TestComputationStepContext(); + underTest.execute(context); + + // modified root + Component mRoot = treeRootHolder.getRoot(); + verifyComponent(mRoot, Component.Type.PROJECT, ROOT_REF, 1); + + Component dir = mRoot.getChildren().get(0); + assertThat(dir.getName()).isEqualTo(REPORT_PROJECT_KEY); + assertThat(dir.getShortName()).isEqualTo(REPORT_PROJECT_KEY); + + verifyComponent(dir, Component.Type.DIRECTORY, null, 1); + } + @Test public void compute_keys_and_uuids() { setAnalysisMetadataHolder(); @@ -273,11 +296,7 @@ public class BuildComponentTreeStepTest { @Test public void generate_keys_when_using_main_branch() { - Branch branch = new DefaultBranchImpl(); - analysisMetadataHolder.setRootComponentRef(ROOT_REF) - .setAnalysisDate(ANALYSIS_DATE) - .setProject(Project.from(newPrivateProjectDto(newOrganizationDto()).setDbKey(REPORT_PROJECT_KEY))) - .setBranch(branch); + setAnalysisMetadataHolder(); BuildComponentTreeStep underTest = new BuildComponentTreeStep(dbClient, reportReader, treeRootHolder, analysisMetadataHolder, reportModulesPath); reportReader.putComponent(component(ROOT_REF, PROJECT, REPORT_PROJECT_KEY, FILE_1_REF)); reportReader.putComponent(componentWithPath(FILE_1_REF, FILE, REPORT_FILE_PATH_1)); @@ -498,6 +517,7 @@ public class BuildComponentTreeStepTest { ScannerReport.Component.Builder builder = ScannerReport.Component.newBuilder() .setType(componentType) .setRef(componentRef) + .setName(key) .setStatus(status) .setLines(1) .setKey(key); @@ -559,7 +579,7 @@ public class BuildComponentTreeStepTest { analysisMetadataHolder.setRootComponentRef(ROOT_REF) .setAnalysisDate(ANALYSIS_DATE) .setBranch(branch) - .setProject(Project.from(newPrivateProjectDto(newOrganizationDto()).setDbKey(REPORT_PROJECT_KEY))); + .setProject(Project.from(newPrivateProjectDto(newOrganizationDto()).setDbKey(REPORT_PROJECT_KEY).setName(REPORT_PROJECT_KEY))); } public static ScannerReport.Metadata createReportMetadata(@Nullable String projectVersion, @Nullable String buildString) {