diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeMessagesUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeMessagesUtil.java index 13b289fb04..263eca4cd2 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeMessagesUtil.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeMessagesUtil.java @@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; import com.google.common.annotations.VisibleForTesting; +import com.google.gerrit.common.Nullable; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.ChangeMessage; import com.google.gerrit.reviewdb.client.PatchSet; @@ -43,22 +44,50 @@ import java.util.Objects; */ @Singleton public class ChangeMessagesUtil { - public static ChangeMessage newMessage(BatchUpdate.ChangeContext ctx, - String body) throws OrmException { + public final static String TAG_ABANDON = + "autogenerated:gerrit:abandon"; + public final static String TAG_CHERRY_PICK_CHANGE = + "autogenerated:gerrit:cherryPickChange"; + public final static String TAG_DELETE_ASSIGNEE = + "autogenerated:gerrit:deleteAssignee"; + public final static String TAG_DELETE_REVIEWER = + "autogenerated:gerrit:deleteReviewer"; + public final static String TAG_DELETE_VOTE = + "autogenerated:gerrit:deleteVote"; + public final static String TAG_MERGED = + "autogenerated:gerrit:merged"; + public final static String TAG_MOVE = + "autogenerated:gerrit:move"; + public final static String TAG_RESTORE = + "autogenerated:gerrit:restore"; + public final static String TAG_REVERT = + "autogenerated:gerrit:revert"; + public final static String TAG_SET_ASSIGNEE = + "autogenerated:gerrit:setAssignee"; + public final static String TAG_SET_HASHTAGS = + "autogenerated:gerrit:setHashtag"; + public final static String TAG_SET_TOPIC = + "autogenerated:gerrit:setTopic"; + public final static String TAG_UPLOADED_PATCH_SET = + "autogenerated:gerrit:newPatchSet"; + + public static ChangeMessage newMessage( BatchUpdate.ChangeContext ctx, + String body, @Nullable String tag) throws OrmException { return newMessage( ctx.getDb(), ctx.getChange().currentPatchSetId(), - ctx.getUser(), ctx.getWhen(), body); + ctx.getUser(), ctx.getWhen(), body, tag); } public static ChangeMessage newMessage( ReviewDb db, PatchSet.Id psId, CurrentUser user, Timestamp when, - String body) throws OrmException { + String body, @Nullable String tag) throws OrmException { checkNotNull(psId); Account.Id accountId = user.isInternalUser() ? null : user.getAccountId(); ChangeMessage m = new ChangeMessage( new ChangeMessage.Key(psId.getParentKey(), ChangeUtil.messageUUID(db)), accountId, when, psId); m.setMessage(body); + m.setTag(tag); user.updateRealAccountId(m::setRealAuthor); return m; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Abandon.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Abandon.java index f9b614383d..9c67fe076a 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Abandon.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Abandon.java @@ -202,7 +202,8 @@ public class Abandon implements RestModifyView, msg.append(msgTxt.trim()); } - return ChangeMessagesUtil.newMessage(ctx, msg.toString()); + return ChangeMessagesUtil.newMessage( + ctx, msg.toString(), ChangeMessagesUtil.TAG_ABANDON); } @Override diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java index bc9b04bac6..975f459dbd 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java @@ -365,7 +365,7 @@ public class ChangeInserter extends BatchUpdate.InsertChangeOp { if (message != null) { changeMessage = ChangeMessagesUtil.newMessage( db, patchSet.getId(), ctx.getUser(), patchSet.getCreatedOn(), - message); + message, ChangeMessagesUtil.TAG_UPLOADED_PATCH_SET); cmUtil.addChangeMessage(db, update, changeMessage); } return true; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java index 1a18357506..21ba93b2c1 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java @@ -290,7 +290,8 @@ public class CherryPickChange { .append(" as commit ") .append(cherryPickCommit.name()); ChangeMessage changeMessage = ChangeMessagesUtil.newMessage( - ctx.getDb(), psId, ctx.getUser(), ctx.getWhen(), sb.toString()); + ctx.getDb(), psId, ctx.getUser(), ctx.getWhen(), sb.toString(), + ChangeMessagesUtil.TAG_CHERRY_PICK_CHANGE); cmUtil.addChangeMessage(ctx.getDb(), ctx.getUpdate(psId), changeMessage); return true; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteAssignee.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteAssignee.java index 70c2ae727c..f07ee25bf7 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteAssignee.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteAssignee.java @@ -115,7 +115,8 @@ public class DeleteAssignee implements RestModifyView { private void addMessage(BatchUpdate.ChangeContext ctx, ChangeUpdate update, Account deleted) throws OrmException { ChangeMessage cmsg = ChangeMessagesUtil.newMessage( - ctx, "Assignee deleted: " + deleted.getName(anonymousCowardName)); + ctx, "Assignee deleted: " + deleted.getName(anonymousCowardName), + ChangeMessagesUtil.TAG_DELETE_ASSIGNEE); cmUtil.addChangeMessage(ctx.getDb(), update, cmsg); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteReviewer.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteReviewer.java index 12fc22a0fa..2882a29737 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteReviewer.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteReviewer.java @@ -184,7 +184,8 @@ public class DeleteReviewer ChangeUpdate update = ctx.getUpdate(currPs.getId()); update.removeReviewer(reviewerId); - changeMessage = ChangeMessagesUtil.newMessage(ctx, msg.toString()); + changeMessage = ChangeMessagesUtil.newMessage(ctx, msg.toString(), + ChangeMessagesUtil.TAG_DELETE_REVIEWER); cmUtil.addChangeMessage(ctx.getDb(), update, changeMessage); return true; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteVote.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteVote.java index 0f97c370e0..aab40e027b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteVote.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteVote.java @@ -175,7 +175,8 @@ public class DeleteVote msg.append(" by ") .append(userFactory.create(accountId).getNameEmail()) .append("\n"); - changeMessage = ChangeMessagesUtil.newMessage(ctx, msg.toString()); + changeMessage = ChangeMessagesUtil.newMessage(ctx, msg.toString(), + ChangeMessagesUtil.TAG_DELETE_VOTE); cmUtil.addChangeMessage(ctx.getDb(), ctx.getUpdate(psId), changeMessage); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Move.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Move.java index 954392c1e2..4a3f45a345 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Move.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Move.java @@ -176,7 +176,8 @@ public class Move implements RestModifyView { msgBuf.append(input.message); } ChangeMessage cmsg = - ChangeMessagesUtil.newMessage(ctx, msgBuf.toString()); + ChangeMessagesUtil.newMessage( + ctx, msgBuf.toString(), ChangeMessagesUtil.TAG_MOVE); cmUtil.addChangeMessage(ctx.getDb(), update, cmsg); return true; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java index ea281f8303..2b31c716b4 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java @@ -225,7 +225,8 @@ public class PatchSetInserter extends BatchUpdate.Op { if (message != null) { changeMessage = ChangeMessagesUtil.newMessage( - db, patchSet.getId(), ctx.getUser(), ctx.getWhen(), message); + db, patchSet.getId(), ctx.getUser(), ctx.getWhen(), message, + ChangeMessagesUtil.TAG_UPLOADED_PATCH_SET); changeMessage.setMessage(message); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java index 2d0fab3e77..c930c82905 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java @@ -953,8 +953,7 @@ public class PostReview implements RestModifyView message = ChangeMessagesUtil.newMessage( ctx.getDb(), psId, user, ctx.getWhen(), - "Patch Set " + psId.get() + ":" + buf); - message.setTag(in.tag); + "Patch Set " + psId.get() + ":" + buf, in.tag); cmUtil.addChangeMessage(ctx.getDb(), ctx.getUpdate(psId), message); return true; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishDraftPatchSet.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishDraftPatchSet.java index 66e17fefe5..ba2700500b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishDraftPatchSet.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishDraftPatchSet.java @@ -254,7 +254,8 @@ public class PublishDraftPatchSet implements RestModifyView, change.setTopic(Strings.emptyToNull(newTopicName)); update.setTopic(change.getTopic()); - ChangeMessage cmsg = ChangeMessagesUtil.newMessage(ctx, summary); + ChangeMessage cmsg = ChangeMessagesUtil.newMessage(ctx, summary, + ChangeMessagesUtil.TAG_SET_TOPIC); cmUtil.addChangeMessage(ctx.getDb(), update, cmsg); return true; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Restore.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Restore.java index 09ab9d5055..a1972f9d24 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Restore.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Restore.java @@ -130,7 +130,8 @@ public class Restore implements RestModifyView, msg.append("\n\n"); msg.append(input.message.trim()); } - return ChangeMessagesUtil.newMessage(ctx, msg.toString()); + return ChangeMessagesUtil.newMessage(ctx, msg.toString(), + ChangeMessagesUtil.TAG_RESTORE); } @Override diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Revert.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Revert.java index 4bd9825ae4..ab318c169b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Revert.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Revert.java @@ -274,7 +274,8 @@ public class Revert implements RestModifyView, Change change = ctx.getChange(); PatchSet.Id patchSetId = change.currentPatchSetId(); ChangeMessage changeMessage = ChangeMessagesUtil.newMessage(ctx, - "Created a revert of this change as I" + computedChangeId.name()); + "Created a revert of this change as I" + computedChangeId.name(), + ChangeMessagesUtil.TAG_REVERT); cmUtil.addChangeMessage(ctx.getDb(), ctx.getUpdate(patchSetId), changeMessage); return true; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetAssigneeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetAssigneeOp.java index 43c1dee598..44275ab861 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetAssigneeOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetAssigneeOp.java @@ -131,7 +131,8 @@ public class SetAssigneeOp extends BatchUpdate.Op { msg.append(" to: "); msg.append(newAssignee.getName(anonymousCowardName)); } - ChangeMessage cmsg = ChangeMessagesUtil.newMessage(ctx, msg.toString()); + ChangeMessage cmsg = ChangeMessagesUtil.newMessage(ctx, msg.toString(), + ChangeMessagesUtil.TAG_SET_ASSIGNEE); cmUtil.addChangeMessage(ctx.getDb(), update, cmsg); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetHashtagsOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetHashtagsOp.java index 2b1c97c723..3b2117d18e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetHashtagsOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetHashtagsOp.java @@ -136,7 +136,8 @@ public class SetHashtagsOp extends BatchUpdate.Op { StringBuilder msg = new StringBuilder(); appendHashtagMessage(msg, "added", toAdd); appendHashtagMessage(msg, "removed", toRemove); - ChangeMessage cmsg = ChangeMessagesUtil.newMessage(ctx, msg.toString()); + ChangeMessage cmsg = ChangeMessagesUtil.newMessage(ctx, msg.toString(), + ChangeMessagesUtil.TAG_SET_HASHTAGS); cmUtil.addChangeMessage(ctx.getDb(), update, cmsg); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java index 005a91f400..0062694957 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java @@ -755,6 +755,7 @@ public class MergeOp implements AutoCloseable { ChangeMessage msg = ChangeMessagesUtil.newMessage( ctx.getDb(), change.currentPatchSetId(), internalUserFactory.create(), change.getLastUpdatedOn(), + ChangeMessagesUtil.TAG_MERGED, "Project was deleted."); cmUtil.addChangeMessage(ctx.getDb(), ctx.getUpdate(change.currentPatchSetId()), msg); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergedByPushOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergedByPushOp.java index a63baec25b..48bdd13a25 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergedByPushOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergedByPushOp.java @@ -150,7 +150,8 @@ public class MergedByPushOp extends BatchUpdate.Op { } msgBuf.append("."); ChangeMessage msg = ChangeMessagesUtil.newMessage( - ctx.getDb(), psId, ctx.getUser(), ctx.getWhen(), msgBuf.toString()); + ctx.getDb(), psId, ctx.getUser(), ctx.getWhen(), msgBuf.toString(), + ChangeMessagesUtil.TAG_MERGED); cmUtil.addChangeMessage(ctx.getDb(), update, msg); PatchSetApproval submitter = ApprovalsUtil.newApproval( diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReplaceOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReplaceOp.java index 1a5999c7a8..cb1d1d4d99 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReplaceOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReplaceOp.java @@ -285,7 +285,7 @@ public class ReplaceOp extends BatchUpdate.Op { message.append("\n").append(reviewMessage); } msg = ChangeMessagesUtil.newMessage(ctx.getDb(), patchSetId, ctx.getUser(), - ctx.getWhen(), message.toString()); + ctx.getWhen(), message.toString(), ChangeMessagesUtil.TAG_UPLOADED_PATCH_SET); cmUtil.addChangeMessage(ctx.getDb(), update, msg); if (mergedByPushOp == null) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyOp.java index fdce19b6a2..8a303a7a64 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyOp.java @@ -450,7 +450,8 @@ abstract class SubmitStrategyOp extends BatchUpdate.Op { private ChangeMessage message(ChangeContext ctx, PatchSet.Id psId, String body) throws OrmException { return ChangeMessagesUtil.newMessage( - ctx.getDb(), psId, ctx.getUser(), ctx.getWhen(), body); + ctx.getDb(), psId, ctx.getUser(), ctx.getWhen(), body, + ChangeMessagesUtil.TAG_MERGED); } private void setMerged(ChangeContext ctx, ChangeMessage msg) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java index bd2042392c..59ce93b40f 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java @@ -104,12 +104,11 @@ class ChangeNotesParser { abstract PatchSet.Id psId(); abstract Account.Id accountId(); abstract String label(); - @Nullable abstract String tag(); private static ApprovalKey create(PatchSet.Id psId, Account.Id accountId, - String label, @Nullable String tag) { + String label) { return new AutoValue_ChangeNotesParser_ApprovalKey( - psId, accountId, label, tag); + psId, accountId, label); } } @@ -740,7 +739,7 @@ class ChangeNotesParser { psa.setRealAccountId(realAccountId); } ApprovalKey k = - ApprovalKey.create(psId, effectiveAccountId, l.label(), tag); + ApprovalKey.create(psId, effectiveAccountId, l.label()); if (!approvals.containsKey(k)) { approvals.put(k, psa); } @@ -789,7 +788,7 @@ class ChangeNotesParser { if (!Objects.equals(realAccountId, committerId)) { remove.setRealAccountId(realAccountId); } - ApprovalKey k = ApprovalKey.create(psId, effectiveAccountId, label, tag); + ApprovalKey k = ApprovalKey.create(psId, effectiveAccountId, label); if (!approvals.containsKey(k)) { approvals.put(k, remove); } diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java index d750bc4dbb..92ba426b24 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java @@ -139,10 +139,8 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { ImmutableListMultimap approvals = notes.getApprovals(); - assertThat(approvals).hasSize(2); + assertThat(approvals).hasSize(1); assertThat(approvals.entries().asList().get(0).getValue().getTag()) - .isEqualTo(tag1); - assertThat(approvals.entries().asList().get(1).getValue().getTag()) .isEqualTo(tag2); }