Extract committer as trailer in git

This commit is contained in:
René Pfeuffer
2020-06-08 12:21:17 +02:00
parent 1ce2772a35
commit cf02192315
2 changed files with 24 additions and 3 deletions

View File

@@ -171,8 +171,8 @@ public class GitChangesetConverter implements Closeable
long date = GitUtil.getCommitTime(commit); long date = GitUtil.getCommitTime(commit);
PersonIdent authorIndent = commit.getAuthorIdent(); PersonIdent authorIndent = commit.getAuthorIdent();
Person author = new Person(authorIndent.getName(), PersonIdent committerIdent = commit.getCommitterIdent();
authorIndent.getEmailAddress()); Person author = createPersonFor(authorIndent);
String message = commit.getFullMessage(); String message = commit.getFullMessage();
if (message != null) if (message != null)
@@ -181,6 +181,9 @@ public class GitChangesetConverter implements Closeable
} }
Changeset changeset = new Changeset(id, date, author, message); 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) if (parentList != null)
{ {
@@ -201,6 +204,9 @@ public class GitChangesetConverter implements Closeable
return changeset; return changeset;
} }
public Person createPersonFor(PersonIdent personIndent) {
return new Person(personIndent.getName(), personIndent.getEmailAddress());
}
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------

View File

@@ -34,6 +34,7 @@ import sonia.scm.repository.Changeset;
import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.ChangesetPagingResult;
import sonia.scm.repository.GitRepositoryConfig; import sonia.scm.repository.GitRepositoryConfig;
import sonia.scm.repository.Modifications; import sonia.scm.repository.Modifications;
import sonia.scm.repository.Person;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -271,6 +272,20 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase
assertEquals("master", changesets.getBranchName()); 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 { private void setRepositoryHeadReference(String s) throws IOException {
Files.write(s, repositoryHeadReferenceFile(), defaultCharset()); Files.write(s, repositoryHeadReferenceFile(), defaultCharset());
} }