}
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:
}
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<Component> children = buildChangedComponentChildren(component);
if (children.isEmpty()) {
return null;
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();
}
private static List<Component> 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())
.setStatus(component.getStatus())
.setReportAttributes(component.getReportAttributes())
.setName(component.getName())
- .setShortName(removeStart(removeStart(path, parentPath), "/"))
+ .setShortName(newShortName)
.setDescription(component.getDescription());
}
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();
@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));
ScannerReport.Component.Builder builder = ScannerReport.Component.newBuilder()
.setType(componentType)
.setRef(componentRef)
+ .setName(key)
.setStatus(status)
.setLines(1)
.setKey(key);
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) {