From acc3306450ea4e9b0ed739a3450cfaea15669058 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 10 Jun 2020 11:08:11 +0200 Subject: [PATCH] rename trailer to contributor --- CHANGELOG.md | 2 +- .../scm/api/v2/resources/ChangesetDto.java | 2 +- .../{TrailerDto.java => ContributorDto.java} | 4 +- .../java/sonia/scm/repository/Changeset.java | 46 +++++++--- .../{Trailer.java => Contributor.java} | 4 +- .../scm/repository/GitChangesetConverter.java | 2 +- .../scm/repository/spi/GitLogCommandTest.java | 7 +- .../src/__resources__/changesets.tsx | 20 ++-- .../src/repos/changesets/ChangesetAuthor.tsx | 37 ++++---- scm-ui/ui-types/src/Changesets.ts | 6 +- scm-ui/ui-types/src/index.ts | 2 +- scm-ui/ui-webapp/public/locales/de/repos.json | 18 ++-- scm-ui/ui-webapp/public/locales/en/repos.json | 29 ++---- .../changesets/ChangesetDetails.tsx | 14 ++- .../changesets/ContributorTable.tsx | 32 +++---- .../DefaultChangesetToChangesetDtoMapper.java | 7 +- ...ngesetDescriptionContributorProvider.java} | 24 ++--- .../main/resources/locales/de/plugins.json | 2 +- .../main/resources/locales/en/plugins.json | 2 +- ...etDescriptionContributorProviderTest.java} | 92 +++++++++---------- 20 files changed, 180 insertions(+), 172 deletions(-) rename scm-core/src/main/java/sonia/scm/api/v2/resources/{TrailerDto.java => ContributorDto.java} (95%) rename scm-core/src/main/java/sonia/scm/repository/{Trailer.java => Contributor.java} (94%) rename scm-webapp/src/main/java/sonia/scm/repository/{ChangesetDescriptionTrailerProvider.java => ChangesetDescriptionContributorProvider.java} (75%) rename scm-webapp/src/test/java/sonia/scm/repository/{ChangesetDescriptionTrailerProviderTest.java => ChangesetDescriptionContributorProviderTest.java} (62%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55e45cf6f3..bd40d8275a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased ### Added -- Show commit trailers in table on changeset details view ([#1169](https://github.com/scm-manager/scm-manager/pull/1169)) +- Show commit contributors in table on changeset details view ([#1169](https://github.com/scm-manager/scm-manager/pull/1169)) ### Fixed - Fixes configuration of jetty listener address with system property `jetty.host` ([#1173](https://github.com/scm-manager/scm-manager/pull/1173), [#1174](https://github.com/scm-manager/scm-manager/pull/1174)) diff --git a/scm-core/src/main/java/sonia/scm/api/v2/resources/ChangesetDto.java b/scm-core/src/main/java/sonia/scm/api/v2/resources/ChangesetDto.java index 5b57fa2752..bd94f9e33f 100644 --- a/scm-core/src/main/java/sonia/scm/api/v2/resources/ChangesetDto.java +++ b/scm-core/src/main/java/sonia/scm/api/v2/resources/ChangesetDto.java @@ -59,7 +59,7 @@ public class ChangesetDto extends HalRepresentation { */ private String description; - private List trailers; + private List contributors; public ChangesetDto(Links links, Embedded embedded) { super(links, embedded); diff --git a/scm-core/src/main/java/sonia/scm/api/v2/resources/TrailerDto.java b/scm-core/src/main/java/sonia/scm/api/v2/resources/ContributorDto.java similarity index 95% rename from scm-core/src/main/java/sonia/scm/api/v2/resources/TrailerDto.java rename to scm-core/src/main/java/sonia/scm/api/v2/resources/ContributorDto.java index 2d1b65c6c5..3d22db879a 100644 --- a/scm-core/src/main/java/sonia/scm/api/v2/resources/TrailerDto.java +++ b/scm-core/src/main/java/sonia/scm/api/v2/resources/ContributorDto.java @@ -31,7 +31,7 @@ import lombok.Setter; @Getter @Setter @NoArgsConstructor -public class TrailerDto { - private String trailerType; +public class ContributorDto { + private String type; private PersonDto person; } diff --git a/scm-core/src/main/java/sonia/scm/repository/Changeset.java b/scm-core/src/main/java/sonia/scm/repository/Changeset.java index e00480bc6a..e2c980db37 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Changeset.java +++ b/scm-core/src/main/java/sonia/scm/repository/Changeset.java @@ -83,7 +83,7 @@ public class Changeset extends BasicPropertiesAware implements ModelObject { /** * Trailers for this changeset like reviewers or co-authors */ - private Collection trailers; + private Collection contributors; public Changeset() {} @@ -231,8 +231,13 @@ public class Changeset extends BasicPropertiesAware implements ModelObject { return tags; } - public Collection getTrailers() { - return trailers; + /** + * Returns collection of contributors for this changeset. + * @return collection of contributors + * @since 2.1.0 + */ + public Collection getContributors() { + return contributors; } /** @@ -310,22 +315,37 @@ public class Changeset extends BasicPropertiesAware implements ModelObject { this.tags = tags; } - public void setTrailers(Collection trailers) { - this.trailers = new ArrayList<>(trailers); + /** + * Sets the collection of contributors. + * @param contributors collection of contributors + * @since 2.1.0 + */ + public void setContributors(Collection contributors) { + this.contributors = new ArrayList<>(contributors); } - public void addTrailer(Trailer trailer) { - if (trailers == null) { - trailers = new ArrayList<>(); + /** + * Adds a contributor to the list of contributors. + * @param contributor contributor to add + * @since 2.1.0 + */ + public void addContributor(Contributor contributor) { + if (contributors == null) { + contributors = new ArrayList<>(); } - trailers.add(trailer); + contributors.add(contributor); } - public void addTrailers(Collection trailers) { - if (this.trailers == null) { - this.trailers = new ArrayList<>(trailers); + /** + * Adds all contributors from the given collection to the list of contributors. + * @param contributors collection of contributor + * @since 2.1.0 + */ + public void addContributors(Collection contributors) { + if (this.contributors == null) { + this.contributors = new ArrayList<>(contributors); } else { - this.trailers.addAll(trailers); + this.contributors.addAll(contributors); } } } diff --git a/scm-core/src/main/java/sonia/scm/repository/Trailer.java b/scm-core/src/main/java/sonia/scm/repository/Contributor.java similarity index 94% rename from scm-core/src/main/java/sonia/scm/repository/Trailer.java rename to scm-core/src/main/java/sonia/scm/repository/Contributor.java index 9fb86e089a..9616695638 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Trailer.java +++ b/scm-core/src/main/java/sonia/scm/repository/Contributor.java @@ -29,7 +29,7 @@ import lombok.Value; import java.io.Serializable; @Value -public class Trailer implements Serializable { - private String trailerType; +public class Contributor implements Serializable { + private String type; private Person person; } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java index 0dca45aa35..0f08f54aaa 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java @@ -182,7 +182,7 @@ public class GitChangesetConverter implements Closeable Changeset changeset = new Changeset(id, date, author, message); if (!committerIdent.equals(authorIndent)) { - changeset.addTrailer(new Trailer("Committed-by", createPersonFor(committerIdent))); + changeset.addContributor(new Contributor("Committed-by", createPersonFor(committerIdent))); } if (parentList != null) diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java index 1b12a261f9..2a8c40db58 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java @@ -25,7 +25,6 @@ package sonia.scm.repository.spi; import com.google.common.io.Files; -import org.assertj.core.api.Assertions; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -273,7 +272,7 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase } @Test - public void shouldAppendCommitterAsTrailer() { + public void shouldAppendCommitterAsContributor() { LogCommandRequest request = new LogCommandRequest(); request.setStartChangeset("fcd0ef1831e4002ac43ea539f4094334c79ea9ec"); request.setEndChangeset("fcd0ef1831e4002ac43ea539f4094334c79ea9ec"); @@ -281,8 +280,8 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase ChangesetPagingResult changesets = createCommand().getChangesets(request); Changeset changeset = changesets.getChangesets().get(0); - assertThat(changeset.getTrailers()).hasSize(1); - assertThat(changeset.getTrailers().iterator().next().getPerson()) + assertThat(changeset.getContributors()).hasSize(1); + assertThat(changeset.getContributors().iterator().next().getPerson()) .isEqualTo(new Person("Sebastian Sdorra", "s.sdorra@ostfalia.de")); } diff --git a/scm-ui/ui-components/src/__resources__/changesets.tsx b/scm-ui/ui-components/src/__resources__/changesets.tsx index 5b235c4938..e53f6a9545 100644 --- a/scm-ui/ui-components/src/__resources__/changesets.tsx +++ b/scm-ui/ui-components/src/__resources__/changesets.tsx @@ -30,12 +30,12 @@ const one: Changeset = { date: new Date("2020-06-09T06:34:47Z"), description: "The starship Heart of Gold was the first spacecraft to make use of the Infinite Improbability Drive. The craft was stolen by then-President Zaphod Beeblebrox at the official launch of the ship, as he was supposed to be officiating the launch. Later, during the use of the Infinite Improbability Drive, the ship picked up Arthur Dent and Ford Prefect, who were floating unprotected in deep space in the same star sector, having just escaped the destruction of the same planet.\n\n", - trailers: [ + contributors: [ { - trailerType: "Committed-by", + type: "Committed-by", person: { mail: "zaphod.beeblebrox@hitchhiker.cm", name: "Zaphod Beeblebrox" } }, - { trailerType: "Co-authored-by", person: { mail: "ford.prefect@hitchhiker.com", name: "Ford Prefect" } } + { type: "Co-authored-by", person: { mail: "ford.prefect@hitchhiker.com", name: "Ford Prefect" } } ], _links: { self: { @@ -85,9 +85,9 @@ const two: Changeset = { author: { mail: "scm-admin@scm-manager.org", name: "SCM Administrator" }, date: new Date("2020-06-09T05:39:50Z"), description: 'Change heading to "Heart Of Gold"\n\n', - trailers: [ + contributors: [ { - trailerType: "Committed-by", + type: "Committed-by", person: { mail: "zaphod.beeblebrox@hitchhiker.cm", name: "Zaphod Beeblebrox" } } ], @@ -139,7 +139,7 @@ const three: Changeset = { author: { mail: "scm-admin@scm-manager.org", name: "SCM Administrator" }, date: new Date("2020-06-09T05:25:16Z"), description: "initialize repository", - trailers: [], + contributors: [], _links: { self: { href: @@ -170,10 +170,10 @@ const four: Changeset = { author: { mail: "scm-admin@scm-manager.org", name: "SCM Administrator" }, date: new Date("2020-06-09T09:23:49Z"), description: "Added design docs\n\n", - trailers: [ - { trailerType: "Co-authored-by", person: { mail: "ford.prefect@hitchhiker.com", name: "Ford Prefect" } }, - { trailerType: "Co-authored-by", person: { mail: "zaphod.beeblebrox@hitchhiker.cm", name: "Zaphod Beeblebrox" } }, - { trailerType: "Co-authored-by", person: { mail: "trillian@hitchhiker.cm", name: "Tricia Marie McMillan" } } + contributors: [ + { type: "Co-authored-by", person: { mail: "ford.prefect@hitchhiker.com", name: "Ford Prefect" } }, + { type: "Co-authored-by", person: { mail: "zaphod.beeblebrox@hitchhiker.cm", name: "Zaphod Beeblebrox" } }, + { type: "Co-authored-by", person: { mail: "trillian@hitchhiker.cm", name: "Tricia Marie McMillan" } } ], _links: { self: { diff --git a/scm-ui/ui-components/src/repos/changesets/ChangesetAuthor.tsx b/scm-ui/ui-components/src/repos/changesets/ChangesetAuthor.tsx index c9e0edef6d..7882f09ba8 100644 --- a/scm-ui/ui-components/src/repos/changesets/ChangesetAuthor.tsx +++ b/scm-ui/ui-components/src/repos/changesets/ChangesetAuthor.tsx @@ -58,28 +58,27 @@ type PersonAvatarProps = { avatar: string; }; -const PersonAvatar: FC = ({ person, avatar }) => { +const ContributorWithAvatar: FC = ({ person, avatar }) => { const [t] = useTranslation("repos"); - const img = ; if (person.mail) { return ( - - {img} + + ); } - return img; + return ; }; -const SinglePerson: FC = ({ person, displayTextOnly }) => { +const SingleContributor: FC = ({ person, displayTextOnly }) => { const [t] = useTranslation("repos"); const avatar = useAvatar(person); if (!displayTextOnly && avatar) { - return ; + return ; } if (person.mail) { return ( - + {person.name} ); @@ -93,14 +92,14 @@ type PersonsProps = { displayTextOnly?: boolean; }; -const Persons: FC = ({ persons, label, displayTextOnly }) => { +const Contributors: FC = ({ persons, label, displayTextOnly }) => { const binder = useBinder(); const [t] = useTranslation("repos"); if (persons.length === 1) { return ( <> - {t(label)} + {t(label)} ); } @@ -112,7 +111,7 @@ const Persons: FC = ({ persons, label, displayTextOnly }) => { {t(label)}{" "} {persons.map(p => ( - + ))} @@ -122,7 +121,7 @@ const Persons: FC = ({ persons, label, displayTextOnly }) => { <> {t(label)}{" "} "- " + person.name).join("\n")}> - {t("changesets.authors.more", { count: persons.length })} + {t("changeset.contributors.more", { count: persons.length })} ); @@ -133,32 +132,32 @@ const ChangesetAuthor: FC = ({ changeset }) => { const binder = useBinder(); const getCoAuthors = () => { - return filterTrailersByType("Co-authored-by"); + return filterContributorsByType("Co-authored-by"); }; const getCommitters = () => { - return filterTrailersByType("Committed-by"); + return filterContributorsByType("Committed-by"); }; - const filterTrailersByType = (trailerType: string) => { - return changeset.trailers.filter(p => p.trailerType === trailerType).map(trailer => trailer.person); + const filterContributorsByType = (type: string) => { + return changeset.contributors.filter(p => p.type === type).map(contributor => contributor.person); }; const authorLine = []; if (changeset.author) { authorLine.push( - + ); } const commiters = getCommitters(); if (commiters.length > 0) { - authorLine.push(); + authorLine.push(); } const coAuthors = getCoAuthors(); if (coAuthors.length > 0) { - authorLine.push(); + authorLine.push(); } // extensions diff --git a/scm-ui/ui-types/src/Changesets.ts b/scm-ui/ui-types/src/Changesets.ts index 84e51cad93..b76d8beca8 100644 --- a/scm-ui/ui-types/src/Changesets.ts +++ b/scm-ui/ui-types/src/Changesets.ts @@ -36,7 +36,7 @@ export type Changeset = Collection & { date: Date; author: Person; description: string; - trailers: Trailer[]; + contributors: Contributor[]; _links: Links; _embedded: { tags?: Tag[]; @@ -45,9 +45,9 @@ export type Changeset = Collection & { }; }; -export type Trailer = { +export type Contributor = { person: Person; - trailerType: string; + type: string; }; export type ParentChangeset = { diff --git a/scm-ui/ui-types/src/index.ts b/scm-ui/ui-types/src/index.ts index 8717979f60..4b7fdc694d 100644 --- a/scm-ui/ui-types/src/index.ts +++ b/scm-ui/ui-types/src/index.ts @@ -34,7 +34,7 @@ export { RepositoryType, RepositoryTypeCollection } from "./RepositoryTypes"; export { Branch, BranchRequest } from "./Branches"; -export { Changeset, Person, Trailer, ParentChangeset } from "./Changesets"; +export { Changeset, Person, Contributor, ParentChangeset } from "./Changesets"; export { Tag } from "./Tags"; diff --git a/scm-ui/ui-webapp/public/locales/de/repos.json b/scm-ui/ui-webapp/public/locales/de/repos.json index 633ba03fe7..7aba9d38c3 100644 --- a/scm-ui/ui-webapp/public/locales/de/repos.json +++ b/scm-ui/ui-webapp/public/locales/de/repos.json @@ -79,8 +79,7 @@ "errorSubtitle": "Changesets konnten nicht abgerufen werden", "noChangesets": "Keine Changesets in diesem Branch gefunden. Die Commits könnten gelöscht worden sein.", "branchSelectorLabel": "Branches", - "collapseDiffs": "Auf-/Zuklappen", - "contributors": "Liste der Mitwirkenden" + "collapseDiffs": "Auf-/Zuklappen" }, "changeset": { "description": "Beschreibung", @@ -88,15 +87,14 @@ "shortSummary": "Committet <0/> <1/>", "tags": "Tags", "diffNotSupported": "Diff des Changesets wird von diesem Repositorytyp nicht unterstützt", - "author": { - "prefix": "Verfasst von", + "contributors": { "mailto": "Mail senden an", - "label": "Autor" - }, - "coAuthor": { - "prefix": "und", - "label": "Co-Autor", - "label_plural": "Co-Autoren" + "list": "Liste der Mitwirkenden", + "authoredBy": "Verfasst von", + "committedBy": "Committed von", + "coAuthoredBy": "Co-Autoren", + "more": "{{count}} mehr", + "count": "5 Mitwirkende" }, "buttons": { "details": "Details", diff --git a/scm-ui/ui-webapp/public/locales/en/repos.json b/scm-ui/ui-webapp/public/locales/en/repos.json index c741a8a0d0..f5fb431876 100644 --- a/scm-ui/ui-webapp/public/locales/en/repos.json +++ b/scm-ui/ui-webapp/public/locales/en/repos.json @@ -79,15 +79,7 @@ "errorSubtitle": "Could not fetch changesets", "noChangesets": "No changesets found for this branch. The commits could have been removed.", "branchSelectorLabel": "Branches", - "collapseDiffs": "Collapse", - "contributors": "List of contributors", - "authors": { - "and": "and", - "authoredBy": "Authored by", - "committedBy": "committed by", - "coAuthoredBy": "co authored by", - "more": "{{count}} more" - } + "collapseDiffs": "Collapse" }, "changeset": { "description": "Description", @@ -95,19 +87,18 @@ "shortSummary": "Committed <0/> <1/>", "tags": "Tags", "diffNotSupported": "Diff of changesets is not supported by the type of repository", - "author": { - "prefix": "Authored by", - "mailto": "Send mail to", - "label": "Author" - }, - "coAuthor": { - "prefix": "and", - "label": "Co-author", - "label_plural": "Co-authors" - }, "buttons": { "details": "Details", "sources": "Sources" + }, + "contributors": { + "mailto": "Send mail to", + "list": "List of contributors", + "authoredBy": "Authored by", + "committedBy": "committed by", + "coAuthoredBy": "co authored by", + "more": "{{count}} more", + "count": "5 Contributors" } }, "repositoryForm": { diff --git a/scm-ui/ui-webapp/src/repos/components/changesets/ChangesetDetails.tsx b/scm-ui/ui-webapp/src/repos/components/changesets/ChangesetDetails.tsx index 98ae941bcf..0962c1674b 100644 --- a/scm-ui/ui-webapp/src/repos/components/changesets/ChangesetDetails.tsx +++ b/scm-ui/ui-webapp/src/repos/components/changesets/ChangesetDetails.tsx @@ -22,7 +22,7 @@ * SOFTWARE. */ import React, { FC, useState } from "react"; -import {Trans, useTranslation, WithTranslation, withTranslation} from "react-i18next"; +import { Trans, useTranslation, WithTranslation, withTranslation } from "react-i18next"; import classNames from "classnames"; import styled from "styled-components"; import { ExtensionPoint } from "@scm-manager/ui-extensions"; @@ -66,7 +66,7 @@ const BottomMarginLevel = styled(Level)` `; const countContributors = (changeset: Changeset) => { - return changeset.trailers.length + 1; + return changeset.contributors.length + 1; }; const ContributorLine = styled.div` @@ -101,12 +101,12 @@ const ContributorToggleLine = styled.p` const Contributors: FC<{ changeset: Changeset }> = ({ changeset }) => { const [t] = useTranslation("repos"); - const [open, setOpen] = useState(true); + const [open, setOpen] = useState(false); if (open) { return ( setOpen(!open)}> - {t("changesets.contributors")} + {t("changeset.contributors.list")} @@ -119,7 +119,11 @@ const Contributors: FC<{ changeset: Changeset }> = ({ changeset }) => { - ({countContributors(changeset)} Contributors) + ( + + {t("changeset.contributors.count", { count: countContributors(changeset) })} + + ) diff --git a/scm-ui/ui-webapp/src/repos/components/changesets/ContributorTable.tsx b/scm-ui/ui-webapp/src/repos/components/changesets/ContributorTable.tsx index 457ca704be..cd25900cbf 100644 --- a/scm-ui/ui-webapp/src/repos/components/changesets/ContributorTable.tsx +++ b/scm-ui/ui-webapp/src/repos/components/changesets/ContributorTable.tsx @@ -53,7 +53,7 @@ const Contributor: FC<{ person: Person }> = ({ person }) => { } if (person.mail) { return ( - + {prefix} {person.name} @@ -65,39 +65,39 @@ const Contributor: FC<{ person: Person }> = ({ person }) => { const ContributorTable: FC = ({ changeset }) => { const [t] = useTranslation("plugins"); - const collectAvailableTrailerTypes = () => { + const collectAvailableContributorTypes = () => { // @ts-ignore - return [...new Set(changeset.trailers.map(trailer => trailer.trailerType))]; + return [...new Set(changeset.contributors.map(contributor => contributor.type))]; }; - const getPersonsByTrailersType = (type: string) => { - return changeset.trailers?.filter(trailer => trailer.trailerType === type).map(t => t.person); + const getPersonsByContributorType = (type: string) => { + return changeset.contributors?.filter(contributor => contributor.type === type).map(t => t.person); }; - const getTrailersByType = () => { - const availableTrailerTypes: string[] = collectAvailableTrailerTypes(); + const getContributorsByType = () => { + const availableContributorTypes: string[] = collectAvailableContributorTypes(); - const personsByTrailerType = []; - for (const type of availableTrailerTypes) { - personsByTrailerType.push({ type, persons: getPersonsByTrailersType(type) }); + const personsByContributorType = []; + for (const type of availableContributorTypes) { + personsByContributorType.push({ type, persons: getPersonsByContributorType(type) }); } - return personsByTrailerType; + return personsByContributorType; }; return ( - {t("changeset.trailer.type.author") + ":"} + {t("changeset.contributor.type.author") + ":"} - {getTrailersByType().map(trailer => ( - - {t("changeset.trailer.type." + trailer.type) + ":"} + {getContributorsByType().map(contributor => ( + + {t("changeset.contributor.type." + contributor.type) + ":"}
- {trailer.persons.map(person => ( + {contributor.persons.map(person => ( ))} 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 fe6dbff14c..2314cd0aa3 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 @@ -26,17 +26,15 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; -import org.mapstruct.AfterMapping; import org.mapstruct.Context; import org.mapstruct.Mapper; -import org.mapstruct.MappingTarget; import org.mapstruct.ObjectFactory; import sonia.scm.repository.Branch; import sonia.scm.repository.Changeset; import sonia.scm.repository.Person; import sonia.scm.repository.Repository; import sonia.scm.repository.Tag; -import sonia.scm.repository.Trailer; +import sonia.scm.repository.Contributor; import sonia.scm.repository.api.Command; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; @@ -44,7 +42,6 @@ import sonia.scm.web.EdisonHalAppender; import javax.inject.Inject; import java.util.List; -import java.util.Scanner; import java.util.function.Function; import java.util.stream.Collectors; @@ -70,7 +67,7 @@ public abstract class DefaultChangesetToChangesetDtoMapper extends HalAppenderMa @Inject private TagCollectionToDtoMapper tagCollectionToDtoMapper; - abstract TrailerDto map(Trailer trailer); + abstract ContributorDto map(Contributor contributor); abstract PersonDto map(Person person); diff --git a/scm-webapp/src/main/java/sonia/scm/repository/ChangesetDescriptionTrailerProvider.java b/scm-webapp/src/main/java/sonia/scm/repository/ChangesetDescriptionContributorProvider.java similarity index 75% rename from scm-webapp/src/main/java/sonia/scm/repository/ChangesetDescriptionTrailerProvider.java rename to scm-webapp/src/main/java/sonia/scm/repository/ChangesetDescriptionContributorProvider.java index 5a5283ccfd..c1d0a16c22 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/ChangesetDescriptionTrailerProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/ChangesetDescriptionContributorProvider.java @@ -33,17 +33,17 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; @Extension -public class ChangesetDescriptionTrailerProvider implements ChangesetPreProcessorFactory { +public class ChangesetDescriptionContributorProvider implements ChangesetPreProcessorFactory { - private static final Collection SUPPORTED_TRAILER_TYPES = ImmutableSet.of("Co-authored-by", "Reviewed-by", "Signed-off-by", "Committed-by"); - private static final Pattern TRAILER_PATTERN = Pattern.compile("^([\\w-]*):\\W*(.*)\\W+<(.*)>\\W*$"); + private static final Collection SUPPORTED_CONTRIBUTOR_TYPES = ImmutableSet.of("Co-authored-by", "Reviewed-by", "Signed-off-by", "Committed-by"); + private static final Pattern CONTRIBUTOR_PATTERN = Pattern.compile("^([\\w-]*):\\W*(.*)\\W+<(.*)>\\W*$"); @Override public ChangesetPreProcessor createPreProcessor(Repository repository) { - return new TrailerChangesetPreProcessor(); + return new ContributorChangesetPreProcessor(); } - private static class TrailerChangesetPreProcessor implements ChangesetPreProcessor { + private static class ContributorChangesetPreProcessor implements ChangesetPreProcessor { @Override public void process(Changeset changeset) { new Worker(changeset).process(); @@ -75,20 +75,20 @@ public class ChangesetDescriptionTrailerProvider implements ChangesetPreProcesso return; } - if (foundEmptyLine && checkForTrailer(line)) { + if (foundEmptyLine && checkForContributor(line)) { return; } appendLine(scanner, line); } - private boolean checkForTrailer(String line) { - Matcher matcher = TRAILER_PATTERN.matcher(line); + private boolean checkForContributor(String line) { + Matcher matcher = CONTRIBUTOR_PATTERN.matcher(line); if (matcher.matches()) { String type = matcher.group(1); String name = matcher.group(2); String mail = matcher.group(3); - if (SUPPORTED_TRAILER_TYPES.contains(type)) { - createTrailer(type, name, mail); + if (SUPPORTED_CONTRIBUTOR_TYPES.contains(type)) { + createContributor(type, name, mail); return true; } } @@ -107,8 +107,8 @@ public class ChangesetDescriptionTrailerProvider implements ChangesetPreProcesso } } - private void createTrailer(String type, String name, String mail) { - changeset.addTrailer(new Trailer(type, new Person(name, mail))); + private void createContributor(String type, String name, String mail) { + changeset.addContributor(new Contributor(type, new Person(name, mail))); } } } diff --git a/scm-webapp/src/main/resources/locales/de/plugins.json b/scm-webapp/src/main/resources/locales/de/plugins.json index 0aa96adf14..4bf694129b 100644 --- a/scm-webapp/src/main/resources/locales/de/plugins.json +++ b/scm-webapp/src/main/resources/locales/de/plugins.json @@ -1,6 +1,6 @@ { "changeset": { - "trailer": { + "contributor": { "type": { "author": "Autor", "Reviewed-by": "Reviewer", diff --git a/scm-webapp/src/main/resources/locales/en/plugins.json b/scm-webapp/src/main/resources/locales/en/plugins.json index f42133c4af..b75eb268c6 100644 --- a/scm-webapp/src/main/resources/locales/en/plugins.json +++ b/scm-webapp/src/main/resources/locales/en/plugins.json @@ -1,6 +1,6 @@ { "changeset": { - "trailer": { + "contributor": { "type": { "author": "Author", "Reviewed-by": "Reviewers", diff --git a/scm-webapp/src/test/java/sonia/scm/repository/ChangesetDescriptionTrailerProviderTest.java b/scm-webapp/src/test/java/sonia/scm/repository/ChangesetDescriptionContributorProviderTest.java similarity index 62% rename from scm-webapp/src/test/java/sonia/scm/repository/ChangesetDescriptionTrailerProviderTest.java rename to scm-webapp/src/test/java/sonia/scm/repository/ChangesetDescriptionContributorProviderTest.java index dd43926565..2c272bba24 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/ChangesetDescriptionTrailerProviderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/repository/ChangesetDescriptionContributorProviderTest.java @@ -34,20 +34,20 @@ import java.util.Iterator; import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(MockitoExtension.class) -class ChangesetDescriptionTrailerProviderTest { +class ChangesetDescriptionContributorProviderTest { private static final Repository REPOSITORY = RepositoryTestData.createHeartOfGold(); - private final ChangesetDescriptionTrailerProvider changesetDescriptionTrailers = new ChangesetDescriptionTrailerProvider(); + private final ChangesetDescriptionContributorProvider changesetDescriptionContributors = new ChangesetDescriptionContributorProvider(); @Test void shouldReturnEmptyList() { Changeset changeset = createChangeset("zaphod beeblebrox"); - changesetDescriptionTrailers.createPreProcessor(REPOSITORY).process(changeset); - Collection trailers = changeset.getTrailers(); + changesetDescriptionContributors.createPreProcessor(REPOSITORY).process(changeset); + Collection contributors = changeset.getContributors(); - assertThat(trailers).isNullOrEmpty(); + assertThat(contributors).isNullOrEmpty(); assertThat(changeset.getDescription()).isEqualTo("zaphod beeblebrox"); } @@ -56,12 +56,12 @@ class ChangesetDescriptionTrailerProviderTest { Person person = createPerson("Arthur Dent", "dent@hitchhiker.org"); Changeset changeset = createChangeset("zaphod beeblebrox\n\nCo-authored-by: Arthur Dent "); - changesetDescriptionTrailers.createPreProcessor(REPOSITORY).process(changeset); - Collection trailers = changeset.getTrailers(); + changesetDescriptionContributors.createPreProcessor(REPOSITORY).process(changeset); + Collection contributors = changeset.getContributors(); - Trailer trailer = trailers.iterator().next(); - assertThat(trailer.getTrailerType()).isEqualTo("Co-authored-by"); - assertThat(trailer.getPerson()).isEqualTo(person); + Contributor contributor = contributors.iterator().next(); + assertThat(contributor.getType()).isEqualTo("Co-authored-by"); + assertThat(contributor.getPerson()).isEqualTo(person); assertThat(changeset.getDescription()).isEqualTo("zaphod beeblebrox\n\n"); } @@ -70,13 +70,13 @@ class ChangesetDescriptionTrailerProviderTest { Person person = createPerson("Tricia McMillan", "trillian@hitchhiker.org"); Changeset changeset = createChangeset("zaphod beeblebrox\n\nReviewed-by: Tricia McMillan "); - changesetDescriptionTrailers.createPreProcessor(REPOSITORY).process(changeset); - Collection trailers = changeset.getTrailers(); + changesetDescriptionContributors.createPreProcessor(REPOSITORY).process(changeset); + Collection contributors = changeset.getContributors(); - Trailer trailer = trailers.iterator().next(); + Contributor contributor = contributors.iterator().next(); - assertThat(trailer.getTrailerType()).isEqualTo("Reviewed-by"); - assertThat(trailer.getPerson()).isEqualTo(person); + assertThat(contributor.getType()).isEqualTo("Reviewed-by"); + assertThat(contributor.getPerson()).isEqualTo(person); assertThat(changeset.getDescription()).isEqualTo("zaphod beeblebrox\n\n"); } @@ -85,13 +85,13 @@ class ChangesetDescriptionTrailerProviderTest { Person person = createPerson("Tricia McMillan", "trillian@hitchhiker.org"); Changeset changeset = createChangeset("zaphod beeblebrox\n\n\nSigned-off-by: Tricia McMillan "); - changesetDescriptionTrailers.createPreProcessor(REPOSITORY).process(changeset); - Collection trailers = changeset.getTrailers(); + changesetDescriptionContributors.createPreProcessor(REPOSITORY).process(changeset); + Collection contributors = changeset.getContributors(); - Trailer trailer = trailers.iterator().next(); + Contributor contributor = contributors.iterator().next(); - assertThat(trailer.getTrailerType()).isEqualTo("Signed-off-by"); - assertThat(trailer.getPerson()).isEqualTo(person); + assertThat(contributor.getType()).isEqualTo("Signed-off-by"); + assertThat(contributor.getPerson()).isEqualTo(person); assertThat(changeset.getDescription()).isEqualTo("zaphod beeblebrox\n\n\n"); } @@ -100,13 +100,13 @@ class ChangesetDescriptionTrailerProviderTest { Person person = createPerson("Tricia McMillan", "trillian@hitchhiker.org"); Changeset changeset = createChangeset("zaphod beeblebrox\n\nCommitted-by: Tricia McMillan "); - changesetDescriptionTrailers.createPreProcessor(REPOSITORY).process(changeset); - Collection trailers = changeset.getTrailers(); + changesetDescriptionContributors.createPreProcessor(REPOSITORY).process(changeset); + Collection contributors = changeset.getContributors(); - Trailer trailer = trailers.iterator().next(); + Contributor contributor = contributors.iterator().next(); - assertThat(trailer.getTrailerType()).isEqualTo("Committed-by"); - assertThat(trailer.getPerson()).isEqualTo(person); + assertThat(contributor.getType()).isEqualTo("Committed-by"); + assertThat(contributor.getPerson()).isEqualTo(person); assertThat(changeset.getDescription()).isEqualTo("zaphod beeblebrox\n\n"); } @@ -116,19 +116,19 @@ class ChangesetDescriptionTrailerProviderTest { "Committed-by: Tricia McMillan \n" + "Signed-off-by: Artur Dent "); - changesetDescriptionTrailers.createPreProcessor(REPOSITORY).process(changeset); - Collection trailers = changeset.getTrailers(); + changesetDescriptionContributors.createPreProcessor(REPOSITORY).process(changeset); + Collection contributors = changeset.getContributors(); - Iterator trailerIterator = trailers.iterator(); - Trailer firstTrailer = trailerIterator.next(); - Trailer secondTrailer = trailerIterator.next(); + Iterator contributorIterator = contributors.iterator(); + Contributor firstContributor = contributorIterator.next(); + Contributor secondContributor = contributorIterator.next(); - assertThat(firstTrailer.getTrailerType()).isEqualTo("Committed-by"); - assertThat(firstTrailer.getPerson()) + assertThat(firstContributor.getType()).isEqualTo("Committed-by"); + assertThat(firstContributor.getPerson()) .isEqualTo(createPerson("Tricia McMillan", "trillian@hitchhiker.org")); - assertThat(secondTrailer.getTrailerType()).isEqualTo("Signed-off-by"); - assertThat(secondTrailer.getPerson()) + assertThat(secondContributor.getType()).isEqualTo("Signed-off-by"); + assertThat(secondContributor.getPerson()) .isEqualTo(createPerson("Artur Dent", "dent@hitchhiker.org")); assertThat(changeset.getDescription()).isEqualTo("zaphod beeblebrox\n\n"); @@ -140,10 +140,10 @@ class ChangesetDescriptionTrailerProviderTest { "Some-strange-tag: Tricia McMillan "; Changeset changeset = createChangeset(originalCommitMessage); - changesetDescriptionTrailers.createPreProcessor(REPOSITORY).process(changeset); - Collection trailers = changeset.getTrailers(); + changesetDescriptionContributors.createPreProcessor(REPOSITORY).process(changeset); + Collection contributors = changeset.getContributors(); - assertThat(trailers).isNullOrEmpty(); + assertThat(contributors).isNullOrEmpty(); assertThat(changeset.getDescription()).isEqualTo(originalCommitMessage); } @@ -153,10 +153,10 @@ class ChangesetDescriptionTrailerProviderTest { "Committed-by: Tricia McMillan"; Changeset changeset = createChangeset(originalCommitMessage); - changesetDescriptionTrailers.createPreProcessor(REPOSITORY).process(changeset); - Collection trailers = changeset.getTrailers(); + changesetDescriptionContributors.createPreProcessor(REPOSITORY).process(changeset); + Collection contributors = changeset.getContributors(); - assertThat(trailers).isNullOrEmpty(); + assertThat(contributors).isNullOrEmpty(); assertThat(changeset.getDescription()).isEqualTo(originalCommitMessage); } @@ -166,10 +166,10 @@ class ChangesetDescriptionTrailerProviderTest { "Committed-by: Tricia McMillan "; Changeset changeset = createChangeset(originalCommitMessage); - changesetDescriptionTrailers.createPreProcessor(REPOSITORY).process(changeset); - Collection trailers = changeset.getTrailers(); + changesetDescriptionContributors.createPreProcessor(REPOSITORY).process(changeset); + Collection contributors = changeset.getContributors(); - assertThat(trailers).isNotEmpty(); + assertThat(contributors).isNotEmpty(); } @Test @@ -178,15 +178,15 @@ class ChangesetDescriptionTrailerProviderTest { "Committed-by: Tricia McMillan "); Changeset changeset2 = createChangeset("message two"); - ChangesetPreProcessor preProcessor = changesetDescriptionTrailers.createPreProcessor(REPOSITORY); + ChangesetPreProcessor preProcessor = changesetDescriptionContributors.createPreProcessor(REPOSITORY); preProcessor.process(changeset1); preProcessor.process(changeset2); assertThat(changeset1.getDescription()).isEqualTo("message one\n\n"); - assertThat(changeset1.getTrailers()).isNotEmpty(); + assertThat(changeset1.getContributors()).isNotEmpty(); assertThat(changeset2.getDescription()).isEqualTo("message two"); - assertThat(changeset2.getTrailers()).isNullOrEmpty(); + assertThat(changeset2.getContributors()).isNullOrEmpty(); } private Changeset createChangeset(String commitMessage) {