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 6e19e10d6f..51c18449f2 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 @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- @@ -171,8 +171,8 @@ public class GitChangesetConverter implements Closeable long date = GitUtil.getCommitTime(commit); PersonIdent authorIndent = commit.getAuthorIdent(); - Person author = new Person(authorIndent.getName(), - authorIndent.getEmailAddress()); + PersonIdent committerIdent = commit.getCommitterIdent(); + Person author = createPersonFor(authorIndent); String message = commit.getFullMessage(); if (message != null) @@ -181,6 +181,9 @@ public class GitChangesetConverter implements Closeable } Changeset changeset = new Changeset(id, date, author, message); + if (!committerIdent.equals(authorIndent)) { + changeset.addTrailers(Collections.singleton(new Trailer("Committed-by", createPersonFor(committerIdent)))); + } if (parentList != null) { @@ -201,6 +204,9 @@ public class GitChangesetConverter implements Closeable return changeset; } + public Person createPersonFor(PersonIdent personIndent) { + return new Person(personIndent.getName(), personIndent.getEmailAddress()); + } //~--- fields --------------------------------------------------------------- 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 61c2009405..1b12a261f9 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 @@ -34,6 +34,7 @@ import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.GitRepositoryConfig; import sonia.scm.repository.Modifications; +import sonia.scm.repository.Person; import java.io.File; import java.io.IOException; @@ -271,6 +272,20 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase assertEquals("master", changesets.getBranchName()); } + @Test + public void shouldAppendCommitterAsTrailer() { + LogCommandRequest request = new LogCommandRequest(); + request.setStartChangeset("fcd0ef1831e4002ac43ea539f4094334c79ea9ec"); + request.setEndChangeset("fcd0ef1831e4002ac43ea539f4094334c79ea9ec"); + + ChangesetPagingResult changesets = createCommand().getChangesets(request); + Changeset changeset = changesets.getChangesets().get(0); + + assertThat(changeset.getTrailers()).hasSize(1); + assertThat(changeset.getTrailers().iterator().next().getPerson()) + .isEqualTo(new Person("Sebastian Sdorra", "s.sdorra@ostfalia.de")); + } + private void setRepositoryHeadReference(String s) throws IOException { Files.write(s, repositoryHeadReferenceFile(), defaultCharset()); }