From fe832ae13e5a3db78d576f70f4aa447680c62f93 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Thu, 17 Sep 2020 11:17:25 +0200 Subject: [PATCH] rollback changes on branches overview --- scm-ui/ui-types/src/Branches.ts | 3 -- .../repos/branches/components/BranchRow.tsx | 16 ------- .../branches/containers/BranchesOverview.tsx | 2 +- .../branches/containers/CreateBranch.tsx | 2 +- .../src/repos/branches/modules/branches.ts | 8 +--- .../codeSection/containers/CodeOverview.tsx | 2 +- .../BranchCollectionToDtoMapper.java | 8 ++-- .../sonia/scm/api/v2/resources/BranchDto.java | 7 +--- .../api/v2/resources/BranchRootResource.java | 7 ++-- .../v2/resources/BranchToBranchDtoMapper.java | 34 ++------------- .../DefaultChangesetToChangesetDtoMapper.java | 2 +- .../BranchToBranchDtoMapperTest.java | 42 +------------------ 12 files changed, 18 insertions(+), 115 deletions(-) diff --git a/scm-ui/ui-types/src/Branches.ts b/scm-ui/ui-types/src/Branches.ts index de8aa5fa49..87eb5af3dc 100644 --- a/scm-ui/ui-types/src/Branches.ts +++ b/scm-ui/ui-types/src/Branches.ts @@ -23,14 +23,11 @@ */ import { Links } from "./hal"; -import { Person } from "."; export type Branch = { name: string; revision: string; defaultBranch?: boolean; - lastModified?: Date; - lastModifier?: Person; _links: Links; }; diff --git a/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx b/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx index 1f0ba4d9f7..baddb90afd 100644 --- a/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx +++ b/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx @@ -25,23 +25,13 @@ import React, { FC } from "react"; import { Link } from "react-router-dom"; import { Branch } from "@scm-manager/ui-types"; import DefaultBranchTag from "./DefaultBranchTag"; -import { DateFromNow } from "@scm-manager/ui-components"; -import { useTranslation } from "react-i18next"; -import styled from "styled-components"; type Props = { baseUrl: string; branch: Branch; }; -const Modified = styled.span` - margin-left: 1rem; - font-size: 0.8rem; -`; - const BranchRow: FC = ({ baseUrl, branch }) => { - const [t] = useTranslation("repos"); - const to = `${baseUrl}/${encodeURIComponent(branch.name)}/info`; return ( @@ -49,12 +39,6 @@ const BranchRow: FC = ({ baseUrl, branch }) => { {branch.name} - {branch?.lastModified && branch.lastModifier && ( - - {t("branches.overview.lastModified")} {" "} - {t("branches.overview.lastModifier")} {branch.lastModifier?.name} - - )} diff --git a/scm-ui/ui-webapp/src/repos/branches/containers/BranchesOverview.tsx b/scm-ui/ui-webapp/src/repos/branches/containers/BranchesOverview.tsx index 190a338fbb..0e2a01622b 100644 --- a/scm-ui/ui-webapp/src/repos/branches/containers/BranchesOverview.tsx +++ b/scm-ui/ui-webapp/src/repos/branches/containers/BranchesOverview.tsx @@ -117,7 +117,7 @@ const mapStateToProps = (state: any, ownProps: Props) => { const mapDispatchToProps = (dispatch: any) => { return { fetchBranches: (repository: Repository) => { - dispatch(fetchBranches(repository, true)); + dispatch(fetchBranches(repository)); } }; }; diff --git a/scm-ui/ui-webapp/src/repos/branches/containers/CreateBranch.tsx b/scm-ui/ui-webapp/src/repos/branches/containers/CreateBranch.tsx index b457b26448..9e8c27fc0f 100644 --- a/scm-ui/ui-webapp/src/repos/branches/containers/CreateBranch.tsx +++ b/scm-ui/ui-webapp/src/repos/branches/containers/CreateBranch.tsx @@ -119,7 +119,7 @@ class CreateBranch extends React.Component { const mapDispatchToProps = (dispatch: any) => { return { fetchBranches: (repository: Repository) => { - dispatch(fetchBranches(repository, false)); + dispatch(fetchBranches(repository)); }, createBranch: ( createLink: string, diff --git a/scm-ui/ui-webapp/src/repos/branches/modules/branches.ts b/scm-ui/ui-webapp/src/repos/branches/modules/branches.ts index b2efb8720d..d7102fe9c9 100644 --- a/scm-ui/ui-webapp/src/repos/branches/modules/branches.ts +++ b/scm-ui/ui-webapp/src/repos/branches/modules/branches.ts @@ -50,7 +50,7 @@ const CONTENT_TYPE_BRANCH_REQUEST = "application/vnd.scmm-branchRequest+json;v=2 // Fetching branches -export function fetchBranches(repository: Repository, fullInformation: boolean) { +export function fetchBranches(repository: Repository) { if (!repository._links.branches) { return { type: FETCH_BRANCHES_SUCCESS, @@ -64,12 +64,8 @@ export function fetchBranches(repository: Repository, fullInformation: boolean) return function(dispatch: any) { dispatch(fetchBranchesPending(repository)); - let link = (repository._links.branches as Link).href; - if (fullInformation) { - link += "?fullInformation=true"; - } return apiClient - .get(link) + .get((repository._links.branches as Link).href) .then(response => response.json()) .then(data => { dispatch(fetchBranchesSuccess(data, repository)); diff --git a/scm-ui/ui-webapp/src/repos/codeSection/containers/CodeOverview.tsx b/scm-ui/ui-webapp/src/repos/codeSection/containers/CodeOverview.tsx index 84ffc8a6c1..6bf77d6352 100644 --- a/scm-ui/ui-webapp/src/repos/codeSection/containers/CodeOverview.tsx +++ b/scm-ui/ui-webapp/src/repos/codeSection/containers/CodeOverview.tsx @@ -108,7 +108,7 @@ class CodeOverview extends React.Component { const mapDispatchToProps = (dispatch: any) => { return { fetchBranches: (repo: Repository) => { - dispatch(fetchBranches(repo, false)); + dispatch(fetchBranches(repo)); } }; }; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionToDtoMapper.java index 1207aedeff..f640331381 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionToDtoMapper.java @@ -52,14 +52,14 @@ public class BranchCollectionToDtoMapper { this.branchToDtoMapper = branchToDtoMapper; } - public HalRepresentation map(Repository repository, Collection branches, boolean fullInformation) { + public HalRepresentation map(Repository repository, Collection branches) { return new HalRepresentation( createLinks(repository), - embedDtos(getBranchDtoList(repository.getNamespace(), repository.getName(), branches, fullInformation))); + embedDtos(getBranchDtoList(repository.getNamespace(), repository.getName(), branches))); } - public List getBranchDtoList(String namespace, String name, Collection branches, boolean fullInformation) { - return branches.stream().map(branch -> branchToDtoMapper.map(branch, new NamespaceAndName(namespace, name), fullInformation)).collect(toList()); + public List getBranchDtoList(String namespace, String name, Collection branches) { + return branches.stream().map(branch -> branchToDtoMapper.map(branch, new NamespaceAndName(namespace, name))).collect(toList()); } private Links createLinks(Repository repository) { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java index 63e98f5879..db144c18b2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java @@ -24,7 +24,6 @@ package sonia.scm.api.v2.resources; -import com.fasterxml.jackson.annotation.JsonInclude; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; @@ -35,11 +34,11 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; -import java.time.Instant; @Getter @Setter @NoArgsConstructor +@SuppressWarnings("java:S2160") // we do not need this for dto public class BranchDto extends HalRepresentation { private static final String VALID_CHARACTERS_AT_START_AND_END = "\\w-,;\\]{}@&+=$#`|<>"; @@ -52,10 +51,6 @@ public class BranchDto extends HalRepresentation { private String name; private String revision; private boolean defaultBranch; - @JsonInclude(JsonInclude.Include.NON_NULL) - private Instant lastModified; - @JsonInclude(JsonInclude.Include.NON_NULL) - private PersonDto lastModifier; BranchDto(Links links, Embedded embedded) { super(links, embedded); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index 23cbe8dc34..f3f9385624 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -133,7 +133,7 @@ public class BranchRootResource { .stream() .filter(branch -> branchName.equals(branch.getName())) .findFirst() - .map(branch -> branchToDtoMapper.map(branch, namespaceAndName, fullInformation)) + .map(branch -> branchToDtoMapper.map(branch, namespaceAndName)) .map(Response::ok) .orElseThrow(() -> notFound(entity("branch", branchName).in(namespaceAndName))) .build(); @@ -300,12 +300,11 @@ public class BranchRootResource { )) public Response getAll( @PathParam("namespace") String namespace, - @PathParam("name") String name, - @QueryParam("fullInformation") @DefaultValue("false") boolean fullInformation + @PathParam("name") String name ) throws IOException { try (RepositoryService repositoryService = serviceFactory.create(new NamespaceAndName(namespace, name))) { Branches branches = repositoryService.getBranchesCommand().getBranches(); - return Response.ok(branchCollectionToDtoMapper.map(repositoryService.getRepository(), branches.getBranches(), fullInformation)).build(); + return Response.ok(branchCollectionToDtoMapper.map(repositoryService.getRepository(), branches.getBranches())).build(); } catch (CommandNotSupportedException ex) { return Response.status(Response.Status.BAD_REQUEST).build(); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java index 7b091d8cf5..f8088a79d5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java @@ -30,19 +30,11 @@ import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ObjectFactory; -import sonia.scm.ContextEntry; import sonia.scm.repository.Branch; -import sonia.scm.repository.Changeset; -import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.NamespaceAndName; -import sonia.scm.repository.Person; -import sonia.scm.repository.api.RepositoryService; -import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.web.EdisonHalAppender; import javax.inject.Inject; -import java.io.IOException; -import java.time.Instant; import static de.otto.edison.hal.Link.linkBuilder; import static de.otto.edison.hal.Links.linkingTo; @@ -53,16 +45,11 @@ public abstract class BranchToBranchDtoMapper extends HalAppenderMapper { @Inject private ResourceLinks resourceLinks; - @Inject - private RepositoryServiceFactory serviceFactory; - @Mapping(target = "attributes", ignore = true) // We do not map HAL attributes - public abstract BranchDto map(Branch branch, @Context NamespaceAndName namespaceAndName, boolean fullInformation); - - abstract PersonDto map(Person person); + public abstract BranchDto map(Branch branch, @Context NamespaceAndName namespaceAndName); @ObjectFactory - BranchDto createDto(@Context NamespaceAndName namespaceAndName, Branch branch, boolean fullInformation) { + BranchDto createDto(@Context NamespaceAndName namespaceAndName, Branch branch) { Links.Builder linksBuilder = linkingTo() .self(resourceLinks.branch().self(namespaceAndName, branch.getName())) .single(linkBuilder("history", resourceLinks.branch().history(namespaceAndName, branch.getName())).build()) @@ -71,22 +58,7 @@ public abstract class BranchToBranchDtoMapper extends HalAppenderMapper { Embedded.Builder embeddedBuilder = Embedded.embeddedBuilder(); applyEnrichers(new EdisonHalAppender(linksBuilder, embeddedBuilder), branch, namespaceAndName); - BranchDto branchDto = new BranchDto(linksBuilder.build(), embeddedBuilder.build()); - if (fullInformation) { - try (RepositoryService service = serviceFactory.create(namespaceAndName)) { - Changeset latestChangeset = service.getLogCommand().setBranch(branch.getName()).getChangesets().getChangesets().get(0); - branchDto.setLastModified(Instant.ofEpochMilli(latestChangeset.getDate())); - branchDto.setLastModifier(map(latestChangeset.getAuthor())); - } catch (IOException e) { - throw new InternalRepositoryException( - ContextEntry.ContextBuilder.entity(Branch.class, branch.getName()), - "Could not read latest changeset for branch", - e - ); - } - } - - return branchDto; + return new BranchDto(linksBuilder.build(), embeddedBuilder.build()); } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultChangesetToChangesetDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultChangesetToChangesetDtoMapper.java index 2d1c036f07..c05547b295 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultChangesetToChangesetDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultChangesetToChangesetDtoMapper.java @@ -133,7 +133,7 @@ public abstract class DefaultChangesetToChangesetDtoMapper extends HalAppenderMa } if (repositoryService.isSupported(Command.BRANCHES)) { embeddedBuilder.with("branches", branchCollectionToDtoMapper.getBranchDtoList(namespace, name, - getListOfObjects(source.getBranches(), branchName -> Branch.normalBranch(branchName, source.getId())), false)); + getListOfObjects(source.getBranches(), branchName -> Branch.normalBranch(branchName, source.getId())))); } if (repositoryService.isSupported(Command.DIFF_RESULT)) { diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapperTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapperTest.java index 1b5d663dc2..f1b44bee08 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapperTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapperTest.java @@ -24,29 +24,16 @@ package sonia.scm.api.v2.resources; -import com.google.common.collect.ImmutableList; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Answers; import org.mockito.InjectMocks; -import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.repository.Branch; -import sonia.scm.repository.Changeset; -import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.NamespaceAndName; -import sonia.scm.repository.PersonTestData; -import sonia.scm.repository.api.LogCommandBuilder; -import sonia.scm.repository.api.RepositoryService; -import sonia.scm.repository.api.RepositoryServiceFactory; -import java.io.IOException; import java.net.URI; -import java.time.Instant; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class BranchToBranchDtoMapperTest { @@ -56,13 +43,6 @@ class BranchToBranchDtoMapperTest { @SuppressWarnings("unused") // Is injected private final ResourceLinks resourceLinks = ResourceLinksMock.createMock(baseUri); - @Mock - private RepositoryServiceFactory serviceFactory; - @Mock - private RepositoryService repositoryService; - @Mock(answer = Answers.RETURNS_SELF) - private LogCommandBuilder logCommandBuilder; - @InjectMocks private BranchToBranchDtoMapperImpl mapper; @@ -79,27 +59,7 @@ class BranchToBranchDtoMapperTest { Branch branch = Branch.normalBranch("master", "42"); - BranchDto dto = mapper.map(branch, new NamespaceAndName("hitchhiker", "heart-of-gold"), false); + BranchDto dto = mapper.map(branch, new NamespaceAndName("hitchhiker", "heart-of-gold")); assertThat(dto.getLinks().getLinkBy("ka").get().getHref()).isEqualTo("http://hitchhiker/heart-of-gold/master"); - assertThat(dto.getLastModified()).isNull(); - assertThat(dto.getLastModifier()).isNull(); } - - @Test - void shouldMapLastChangeDateAndLastModifier() throws IOException { - long creationTime = 1000000000; - Changeset changeset = new Changeset("1", 1L, PersonTestData.ZAPHOD); - changeset.setDate(creationTime); - - when(serviceFactory.create(any(NamespaceAndName.class))).thenReturn(repositoryService); - when(repositoryService.getLogCommand()).thenReturn(logCommandBuilder); - when(logCommandBuilder.getChangesets()).thenReturn(new ChangesetPagingResult(1, ImmutableList.of(changeset))); - Branch branch = Branch.normalBranch("master", "42"); - - BranchDto dto = mapper.map(branch, new NamespaceAndName("hitchhiker", "heart-of-gold"), true); - - assertThat(dto.getLastModified()).isEqualTo(Instant.ofEpochMilli(creationTime)); - assertThat(dto.getLastModifier().getName()).isEqualTo(PersonTestData.ZAPHOD.getName()); - } - }