mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-01 19:15:52 +01:00
Improve committer accuracy
Changes made by the SCM-Manager, like those through the editor and pull requests, now more accurately define the committer on the underlying changeset. Committed-by: Eduard Heimbuch <eduard.heimbuch@cloudogu.com> Co-authored-by: Eduard Heimbuch <eduard.heimbuch@cloudogu.com>
This commit is contained in:
committed by
SCM-Manager
parent
8eb2687e10
commit
7e83d34fc0
2
gradle/changelog/committers.yaml
Normal file
2
gradle/changelog/committers.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
- type: changed
|
||||||
|
description: Improve committer accuracy
|
||||||
@@ -232,7 +232,7 @@ class AbstractGitCommand {
|
|||||||
if (!status.isClean() || isInMerge()) {
|
if (!status.isClean() || isInMerge()) {
|
||||||
return of(clone.commit()
|
return of(clone.commit()
|
||||||
.setAuthor(authorToUse.getName(), authorToUse.getMail())
|
.setAuthor(authorToUse.getName(), authorToUse.getMail())
|
||||||
.setCommitter("SCM-Manager", "noreply@scm-manager.org")
|
.setCommitter(authorToUse.getName(), authorToUse.getMail())
|
||||||
.setMessage(message)
|
.setMessage(message)
|
||||||
.setSign(sign)
|
.setSign(sign)
|
||||||
.setSigningKey(sign ? "SCM-MANAGER-DEFAULT-KEY" : null)
|
.setSigningKey(sign ? "SCM-MANAGER-DEFAULT-KEY" : null)
|
||||||
|
|||||||
@@ -24,6 +24,9 @@
|
|||||||
|
|
||||||
package sonia.scm.repository.spi;
|
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.Git;
|
||||||
import org.eclipse.jgit.api.errors.GitAPIException;
|
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
@@ -39,6 +42,7 @@ import sonia.scm.ScmConstraintViolationException;
|
|||||||
import sonia.scm.repository.GitTestHelper;
|
import sonia.scm.repository.GitTestHelper;
|
||||||
import sonia.scm.repository.Person;
|
import sonia.scm.repository.Person;
|
||||||
import sonia.scm.repository.RepositoryHookType;
|
import sonia.scm.repository.RepositoryHookType;
|
||||||
|
import sonia.scm.user.User;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -55,6 +59,8 @@ import static org.mockito.Mockito.verify;
|
|||||||
|
|
||||||
public class GitModifyCommandTest extends GitModifyCommandTestBase {
|
public class GitModifyCommandTest extends GitModifyCommandTestBase {
|
||||||
|
|
||||||
|
private static final String REALM = "AdminRealm";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getZippedRepositoryResource() {
|
protected String getZippedRepositoryResource() {
|
||||||
return "sonia/scm/repository/spi/scm-git-spi-move-test.zip";
|
return "sonia/scm/repository/spi/scm-git-spi-move-test.zip";
|
||||||
@@ -75,6 +81,8 @@ public class GitModifyCommandTest extends GitModifyCommandTestBase {
|
|||||||
RevCommit lastCommit = getLastCommit(git);
|
RevCommit lastCommit = getLastCommit(git);
|
||||||
assertThat(lastCommit.getFullMessage()).isEqualTo("Make some change");
|
assertThat(lastCommit.getFullMessage()).isEqualTo("Make some change");
|
||||||
assertThat(lastCommit.getAuthorIdent().getName()).isEqualTo("Dirk Gently");
|
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());
|
assertThat(newRef).isEqualTo(lastCommit.toObjectId().name());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -528,4 +536,11 @@ public class GitModifyCommandTest extends GitModifyCommandTestBase {
|
|||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ModifyCommandRequest prepareModifyCommandRequestWithoutAuthorEmail() {
|
||||||
|
ModifyCommandRequest request = new ModifyCommandRequest();
|
||||||
|
request.setAuthor(new Person("Dirk Gently", ""));
|
||||||
|
request.setCommitMessage("Make some change");
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
private String commitChanges(SVNClientManager clientManager, File workingDirectory, String commitMessage) {
|
||||||
try {
|
try {
|
||||||
clientManager.setAuthenticationManager(SVNWCUtil.createDefaultAuthenticationManager(getCurrentUserName(), new char[0]));
|
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) {
|
private void modifyWorkingDirectory(ModifyCommandRequest request, SVNClientManager clientManager, File workingDirectory) {
|
||||||
for (ModifyCommandRequest.PartialRequest partialRequest : request.getRequests()) {
|
for (ModifyCommandRequest.PartialRequest partialRequest : request.getRequests()) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
package sonia.scm.repository.spi;
|
package sonia.scm.repository.spi;
|
||||||
|
|
||||||
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
|
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
|
||||||
|
import org.apache.shiro.subject.PrincipalCollection;
|
||||||
import org.apache.shiro.subject.Subject;
|
import org.apache.shiro.subject.Subject;
|
||||||
import org.apache.shiro.util.ThreadContext;
|
import org.apache.shiro.util.ThreadContext;
|
||||||
import org.junit.After;
|
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.NoneCachingWorkingCopyPool;
|
||||||
import sonia.scm.repository.work.WorkdirProvider;
|
import sonia.scm.repository.work.WorkdirProvider;
|
||||||
import sonia.scm.repository.work.WorkingCopy;
|
import sonia.scm.repository.work.WorkingCopy;
|
||||||
|
import sonia.scm.user.User;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -75,7 +77,10 @@ public class SvnModifyCommandTest extends AbstractSvnCommandTestBase {
|
|||||||
@Before
|
@Before
|
||||||
public void initSecurityManager() {
|
public void initSecurityManager() {
|
||||||
Subject subject = mock(Subject.class);
|
Subject subject = mock(Subject.class);
|
||||||
|
PrincipalCollection principalCollection = mock(PrincipalCollection.class);
|
||||||
when(subject.getPrincipal()).thenReturn("alThor");
|
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);
|
ThreadContext.bind(subject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user