From d1f7362ab110e8d69cabf7a0567de627db0d33a3 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Wed, 2 Oct 2019 11:34:42 +0200 Subject: [PATCH] set author from subject if not available in request for MergeCommandBuilder and ModifyCommandBuilder --- .../repository/api/MergeCommandBuilder.java | 2 ++ .../repository/api/ModifyCommandBuilder.java | 2 ++ .../sonia/scm/repository/util/AuthorUtil.java | 31 +++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 scm-core/src/main/java/sonia/scm/repository/util/AuthorUtil.java diff --git a/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java index 8fcfc937e5..0a2267e888 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java @@ -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); } diff --git a/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java index 1eed0697cb..87d868c04a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java @@ -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); diff --git a/scm-core/src/main/java/sonia/scm/repository/util/AuthorUtil.java b/scm-core/src/main/java/sonia/scm/repository/util/AuthorUtil.java new file mode 100644 index 0000000000..263bba8ddb --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/util/AuthorUtil.java @@ -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); + } +}