set author from subject if not available in request for MergeCommandBuilder and ModifyCommandBuilder

This commit is contained in:
Eduard Heimbuch
2019-10-02 11:34:42 +02:00
parent 6417ab57e8
commit d1f7362ab1
3 changed files with 35 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ import com.google.common.base.Preconditions;
import sonia.scm.repository.Person;
import sonia.scm.repository.spi.MergeCommand;
import sonia.scm.repository.spi.MergeCommandRequest;
import sonia.scm.repository.util.AuthorUtil;
/**
* Use this {@link MergeCommandBuilder} to merge two branches of a repository ({@link #executeMerge()}) or to check if
@@ -126,6 +127,7 @@ public class MergeCommandBuilder {
* @return The result of the merge.
*/
public MergeCommandResult executeMerge() {
AuthorUtil.setAuthorIfNotAvailable(request);
Preconditions.checkArgument(request.isValid(), "revision to merge and target revision is required");
return mergeCommand.merge(request);
}

View File

@@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory;
import sonia.scm.repository.Person;
import sonia.scm.repository.spi.ModifyCommand;
import sonia.scm.repository.spi.ModifyCommandRequest;
import sonia.scm.repository.util.AuthorUtil;
import sonia.scm.repository.util.WorkdirProvider;
import sonia.scm.util.IOUtil;
@@ -110,6 +111,7 @@ public class ModifyCommandBuilder {
* @return The revision of the new commit.
*/
public String execute() {
AuthorUtil.setAuthorIfNotAvailable(request);
try {
Preconditions.checkArgument(request.isValid(), "commit message, branch and at least one request are required");
return command.execute(request);

View File

@@ -0,0 +1,31 @@
package sonia.scm.repository.util;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import sonia.scm.repository.Person;
import sonia.scm.repository.spi.MergeCommandRequest;
import sonia.scm.repository.spi.ModifyCommandRequest;
import sonia.scm.user.User;
public class AuthorUtil {
public static void setAuthorIfNotAvailable(ModifyCommandRequest request) {
if (request.getAuthor() == null) {
request.setAuthor(createAuthorFromSubject());
}
}
public static void setAuthorIfNotAvailable(MergeCommandRequest request) {
if (request.getAuthor() == null) {
request.setAuthor(createAuthorFromSubject());
}
}
private static Person createAuthorFromSubject() {
Subject subject = SecurityUtils.getSubject();
User user = subject.getPrincipals().oneByType(User.class);
String name = user.getDisplayName();
String email = user.getMail();
return new Person(name, email);
}
}