Merge "Add concept of auto generated messages to Gerrit (backend)"

This commit is contained in:
Wyatt Allen
2016-10-28 23:43:29 +00:00
committed by Gerrit Code Review
22 changed files with 72 additions and 31 deletions

View File

@@ -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;
}

View File

@@ -202,7 +202,8 @@ public class Abandon implements RestModifyView<ChangeResource, AbandonInput>,
msg.append(msgTxt.trim());
}
return ChangeMessagesUtil.newMessage(ctx, msg.toString());
return ChangeMessagesUtil.newMessage(
ctx, msg.toString(), ChangeMessagesUtil.TAG_ABANDON);
}
@Override

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -115,7 +115,8 @@ public class DeleteAssignee implements RestModifyView<ChangeResource, Input> {
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);
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -176,7 +176,8 @@ public class Move implements RestModifyView<ChangeResource, MoveInput> {
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;

View File

@@ -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);
}

View File

@@ -953,8 +953,7 @@ public class PostReview implements RestModifyView<RevisionResource, ReviewInput>
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;
}

View File

@@ -254,7 +254,8 @@ public class PublishDraftPatchSet implements RestModifyView<RevisionResource, In
throws EmailException, OrmException {
ChangeMessage msg = ChangeMessagesUtil.newMessage(
ctx.getDb(), psId, ctx.getUser(), ctx.getWhen(),
"Uploaded patch set " + psId.get() + ".");
"Uploaded patch set " + psId.get() + ".",
ChangeMessagesUtil.TAG_UPLOADED_PATCH_SET);
ReplacePatchSetSender cm =
replacePatchSetFactory.create(ctx.getProject(), change.getId());
cm.setFrom(ctx.getAccountId());

View File

@@ -114,7 +114,8 @@ public class PutTopic implements RestModifyView<ChangeResource, Input>,
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;
}

View File

@@ -130,7 +130,8 @@ public class Restore implements RestModifyView<ChangeResource, RestoreInput>,
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

View File

@@ -274,7 +274,8 @@ public class Revert implements RestModifyView<ChangeResource, RevertInput>,
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;

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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(

View File

@@ -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) {

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -139,10 +139,8 @@ public class ChangeNotesTest extends AbstractChangeNotesTest {
ImmutableListMultimap<PatchSet.Id, PatchSetApproval> 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);
}