diff --git a/gradle/changelog/committers.yaml b/gradle/changelog/committers.yaml new file mode 100644 index 0000000000..502190760e --- /dev/null +++ b/gradle/changelog/committers.yaml @@ -0,0 +1,2 @@ +- type: changed + description: Improve committer accuracy diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java index 8bd6df8162..8e29829238 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java @@ -232,7 +232,7 @@ class AbstractGitCommand { if (!status.isClean() || isInMerge()) { return of(clone.commit() .setAuthor(authorToUse.getName(), authorToUse.getMail()) - .setCommitter("SCM-Manager", "noreply@scm-manager.org") + .setCommitter(authorToUse.getName(), authorToUse.getMail()) .setMessage(message) .setSign(sign) .setSigningKey(sign ? "SCM-MANAGER-DEFAULT-KEY" : null) diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java index 006c4315cb..b388c24167 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java @@ -24,6 +24,9 @@ package sonia.scm.repository.spi; +import com.github.sdorra.shiro.SubjectAware; +import org.apache.shiro.subject.SimplePrincipalCollection; +import org.apache.shiro.subject.Subject; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.ObjectId; @@ -39,6 +42,7 @@ import sonia.scm.ScmConstraintViolationException; import sonia.scm.repository.GitTestHelper; import sonia.scm.repository.Person; import sonia.scm.repository.RepositoryHookType; +import sonia.scm.user.User; import java.io.File; import java.io.IOException; @@ -55,6 +59,8 @@ import static org.mockito.Mockito.verify; public class GitModifyCommandTest extends GitModifyCommandTestBase { + private static final String REALM = "AdminRealm"; + @Override protected String getZippedRepositoryResource() { return "sonia/scm/repository/spi/scm-git-spi-move-test.zip"; @@ -75,6 +81,8 @@ public class GitModifyCommandTest extends GitModifyCommandTestBase { RevCommit lastCommit = getLastCommit(git); assertThat(lastCommit.getFullMessage()).isEqualTo("Make some change"); assertThat(lastCommit.getAuthorIdent().getName()).isEqualTo("Dirk Gently"); + assertThat(lastCommit.getCommitterIdent().getName()).isEqualTo("Dirk Gently"); + assertThat(lastCommit.getCommitterIdent().getEmailAddress()).isEqualTo("dirk@holistic.det"); assertThat(newRef).isEqualTo(lastCommit.toObjectId().name()); } } @@ -528,4 +536,11 @@ public class GitModifyCommandTest extends GitModifyCommandTestBase { return request; } + private ModifyCommandRequest prepareModifyCommandRequestWithoutAuthorEmail() { + ModifyCommandRequest request = new ModifyCommandRequest(); + request.setAuthor(new Person("Dirk Gently", "")); + request.setCommitMessage("Make some change"); + return request; + } + } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModifyCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModifyCommand.java index 56a820a93d..667b140f87 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModifyCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModifyCommand.java @@ -91,6 +91,14 @@ public class SvnModifyCommand implements ModifyCommand { } } + private String getCurrentUserName() { + if (SecurityUtils.getSubject() != null && SecurityUtils.getSubject().getPrincipal() != null) { + return SecurityUtils.getSubject().getPrincipal().toString(); + } else { + return "SCM-Manager"; + } + } + private String commitChanges(SVNClientManager clientManager, File workingDirectory, String commitMessage) { try { clientManager.setAuthenticationManager(SVNWCUtil.createDefaultAuthenticationManager(getCurrentUserName(), new char[0])); @@ -110,14 +118,6 @@ public class SvnModifyCommand implements ModifyCommand { } } - private String getCurrentUserName() { - if (SecurityUtils.getSubject() != null && SecurityUtils.getSubject().getPrincipal() != null) { - return SecurityUtils.getSubject().getPrincipal().toString(); - } else { - return "SCM-Manager"; - } - } - private void modifyWorkingDirectory(ModifyCommandRequest request, SVNClientManager clientManager, File workingDirectory) { for (ModifyCommandRequest.PartialRequest partialRequest : request.getRequests()) { try { diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java index c42a150b22..8128a1e5f2 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; import org.junit.After; @@ -41,6 +42,7 @@ import sonia.scm.repository.api.FileLockedException; import sonia.scm.repository.work.NoneCachingWorkingCopyPool; import sonia.scm.repository.work.WorkdirProvider; import sonia.scm.repository.work.WorkingCopy; +import sonia.scm.user.User; import java.io.File; import java.io.IOException; @@ -75,7 +77,10 @@ public class SvnModifyCommandTest extends AbstractSvnCommandTestBase { @Before public void initSecurityManager() { Subject subject = mock(Subject.class); + PrincipalCollection principalCollection = mock(PrincipalCollection.class); when(subject.getPrincipal()).thenReturn("alThor"); + when(subject.getPrincipals()).thenReturn(principalCollection); + when(principalCollection.oneByType(User.class)).thenReturn(new User("galaxy", "quest", "galaxy@quest.com")); ThreadContext.bind(subject); }