diff options
author | David Ostrovsky <david.ostrovsky@gmail.com> | 2021-02-02 10:20:59 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-02-02 10:20:59 +0000 |
commit | 7ff918346e870793a0bb8599600de620ab68d715 (patch) | |
tree | fa135554cfd594e94763c3f535b5582e4540b4f6 | |
parent | 9852457a0ce6768c9cbc5a2c852b59a071c794aa (diff) | |
parent | 91b6fce59003544615a07b19bc64ecd589d09000 (diff) |
Merge "Move ensureChangeIdIsCorrect from PutMessage to ChangeUtil" into stable-2.16
-rw-r--r-- | java/com/google/gerrit/server/ChangeUtil.java | 38 | ||||
-rw-r--r-- | java/com/google/gerrit/server/restapi/change/PutMessage.java | 27 |
2 files changed, 39 insertions, 26 deletions
diff --git a/java/com/google/gerrit/server/ChangeUtil.java b/java/com/google/gerrit/server/ChangeUtil.java index a13f105b0a..393833cc89 100644 --- a/java/com/google/gerrit/server/ChangeUtil.java +++ b/java/com/google/gerrit/server/ChangeUtil.java @@ -19,16 +19,23 @@ import static java.util.Comparator.comparingInt; import com.google.common.collect.Maps; import com.google.common.collect.Ordering; import com.google.common.io.BaseEncoding; +import com.google.gerrit.common.FooterConstants; +import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; +import com.google.gerrit.server.util.CommitMessageUtil; import com.google.inject.Singleton; import java.io.IOException; import java.security.SecureRandom; +import java.util.List; import java.util.Map; import java.util.Random; +import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.revwalk.RevCommit; @Singleton public class ChangeUtil { @@ -112,6 +119,37 @@ public class ChangeUtil { id); } + /** + * Make sure that the change commit message has a correct footer. + * + * @param requireChangeId true if Change-Id is a mandatory footer for the project + * @param currentChangeId current Change-Id value before the commit message is updated + * @param newCommitMessage new commit message for the change + * @throws ResourceConflictException if the new commit message has a missing or invalid Change-Id + * @throws BadRequestException if the new commit message is null or empty + */ + public static void ensureChangeIdIsCorrect( + boolean requireChangeId, String currentChangeId, String newCommitMessage) + throws ResourceConflictException, BadRequestException { + RevCommit revCommit = + RevCommit.parse( + Constants.encode("tree " + ObjectId.zeroId().name() + "\n\n" + newCommitMessage)); + + // Check that the commit message without footers is not empty + CommitMessageUtil.checkAndSanitizeCommitMessage(revCommit.getShortMessage()); + + List<String> changeIdFooters = revCommit.getFooterLines(FooterConstants.CHANGE_ID); + if (requireChangeId && changeIdFooters.isEmpty()) { + throw new ResourceConflictException("missing Change-Id footer"); + } + if (!changeIdFooters.isEmpty() && !changeIdFooters.get(0).equals(currentChangeId)) { + throw new ResourceConflictException("wrong Change-Id footer"); + } + if (changeIdFooters.size() > 1) { + throw new ResourceConflictException("multiple Change-Id footers"); + } + } + public static String status(Change c) { return c != null ? c.getStatus().name().toLowerCase() : "deleted"; } diff --git a/java/com/google/gerrit/server/restapi/change/PutMessage.java b/java/com/google/gerrit/server/restapi/change/PutMessage.java index bcd0e9e455..c0071fbfa5 100644 --- a/java/com/google/gerrit/server/restapi/change/PutMessage.java +++ b/java/com/google/gerrit/server/restapi/change/PutMessage.java @@ -14,7 +14,6 @@ package com.google.gerrit.server.restapi.change; -import com.google.gerrit.common.FooterConstants; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.CommitMessageInput; import com.google.gerrit.extensions.restapi.AuthException; @@ -50,11 +49,9 @@ import com.google.inject.Provider; import com.google.inject.Singleton; import java.io.IOException; import java.sql.Timestamp; -import java.util.List; import java.util.TimeZone; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.CommitBuilder; -import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.PersonIdent; @@ -116,7 +113,7 @@ public class PutMessage String sanitizedCommitMessage = CommitMessageUtil.checkAndSanitizeCommitMessage(input.message); ensureCanEditCommitMessage(resource.getNotes()); - ensureChangeIdIsCorrect( + ChangeUtil.ensureChangeIdIsCorrect( projectCache.checkedGet(resource.getProject()).is(BooleanProjectConfig.REQUIRE_CHANGE_ID), resource.getChange().getKey().get(), sanitizedCommitMessage); @@ -196,26 +193,4 @@ public class PutMessage throw new AuthException("modifying commit message not permitted", denied); } } - - private static void ensureChangeIdIsCorrect( - boolean requireChangeId, String currentChangeId, String newCommitMessage) - throws ResourceConflictException, BadRequestException { - RevCommit revCommit = - RevCommit.parse( - Constants.encode("tree " + ObjectId.zeroId().name() + "\n\n" + newCommitMessage)); - - // Check that the commit message without footers is not empty - CommitMessageUtil.checkAndSanitizeCommitMessage(revCommit.getShortMessage()); - - List<String> changeIdFooters = revCommit.getFooterLines(FooterConstants.CHANGE_ID); - if (requireChangeId && changeIdFooters.isEmpty()) { - throw new ResourceConflictException("missing Change-Id footer"); - } - if (!changeIdFooters.isEmpty() && !changeIdFooters.get(0).equals(currentChangeId)) { - throw new ResourceConflictException("wrong Change-Id footer"); - } - if (changeIdFooters.size() > 1) { - throw new ResourceConflictException("multiple Change-Id footers"); - } - } } |