EmailReviewComments: Take ChangeNotes as input instead of Change

Internally EmailReviewComments needs the change ID and the project
name, both can be retrieved from ChangesNotes without loading the
change data.

Change-Id: Ib15fd2dbd80573693191c11956c10caa9fc56ef0
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2016-02-01 14:49:14 +01:00
parent dfb1bdfdca
commit 2adc9c55a0
4 changed files with 21 additions and 19 deletions

View File

@@ -85,7 +85,7 @@ public final class StoredValues {
PatchSetInfoFactory patchInfoFactory =
env.getArgs().getPatchSetInfoFactory();
try {
return patchInfoFactory.get(change, ps);
return patchInfoFactory.get(change.getProject(), ps);
} catch (PatchSetInfoNotAvailableException e) {
throw new SystemException(e.getMessage());
}

View File

@@ -18,7 +18,6 @@ import static com.google.gerrit.server.PatchLineCommentsUtil.PLC_ORDER;
import com.google.gerrit.extensions.api.changes.ReviewInput.NotifyHandling;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.ChangeMessage;
import com.google.gerrit.reviewdb.client.PatchLineComment;
import com.google.gerrit.reviewdb.client.PatchSet;
@@ -26,6 +25,7 @@ import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.git.SendEmailExecutor;
import com.google.gerrit.server.mail.CommentSender;
import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.patch.PatchSetInfoFactory;
import com.google.gerrit.server.util.RequestContext;
import com.google.gerrit.server.util.ThreadLocalRequestContext;
@@ -49,7 +49,7 @@ public class EmailReviewComments implements Runnable, RequestContext {
interface Factory {
EmailReviewComments create(
NotifyHandling notify,
Change change,
ChangeNotes notes,
PatchSet patchSet,
Account.Id authorId,
ChangeMessage message,
@@ -63,7 +63,7 @@ public class EmailReviewComments implements Runnable, RequestContext {
private final ThreadLocalRequestContext requestContext;
private final NotifyHandling notify;
private final Change change;
private final ChangeNotes notes;
private final PatchSet patchSet;
private final Account.Id authorId;
private final ChangeMessage message;
@@ -78,7 +78,7 @@ public class EmailReviewComments implements Runnable, RequestContext {
SchemaFactory<ReviewDb> schemaFactory,
ThreadLocalRequestContext requestContext,
@Assisted NotifyHandling notify,
@Assisted Change change,
@Assisted ChangeNotes notes,
@Assisted PatchSet patchSet,
@Assisted Account.Id authorId,
@Assisted ChangeMessage message,
@@ -89,7 +89,7 @@ public class EmailReviewComments implements Runnable, RequestContext {
this.schemaFactory = schemaFactory;
this.requestContext = requestContext;
this.notify = notify;
this.change = change;
this.notes = notes;
this.patchSet = patchSet;
this.authorId = authorId;
this.message = message;
@@ -105,9 +105,10 @@ public class EmailReviewComments implements Runnable, RequestContext {
RequestContext old = requestContext.setContext(this);
try {
CommentSender cm = commentSenderFactory.create(change.getId());
CommentSender cm = commentSenderFactory.create(notes.getChangeId());
cm.setFrom(authorId);
cm.setPatchSet(patchSet, patchSetInfoFactory.get(change, patchSet));
cm.setPatchSet(patchSet,
patchSetInfoFactory.get(notes.getProjectName(), patchSet));
cm.setChangeMessage(message);
cm.setPatchLineComments(comments);
cm.setNotify(notify);

View File

@@ -65,6 +65,7 @@ import com.google.gerrit.server.git.BatchUpdate;
import com.google.gerrit.server.git.BatchUpdate.ChangeContext;
import com.google.gerrit.server.git.BatchUpdate.Context;
import com.google.gerrit.server.git.UpdateException;
import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.notedb.ChangeUpdate;
import com.google.gerrit.server.patch.PatchListCache;
import com.google.gerrit.server.project.ChangeControl;
@@ -341,7 +342,7 @@ public class PostReview implements RestModifyView<RevisionResource, ReviewInput>
private final ReviewInput in;
private IdentifiedUser user;
private Change change;
private ChangeNotes notes;
private PatchSet ps;
private ChangeMessage message;
private List<PatchLineComment> comments = new ArrayList<>();
@@ -357,14 +358,15 @@ public class PostReview implements RestModifyView<RevisionResource, ReviewInput>
public boolean updateChange(ChangeContext ctx)
throws OrmException, ResourceConflictException {
user = ctx.getUser().asIdentifiedUser();
change = ctx.getChange();
notes = ctx.getNotes();
ps = psUtil.get(ctx.getDb(), ctx.getNotes(), psId);
boolean dirty = false;
dirty |= insertComments(ctx);
dirty |= updateLabels(ctx);
dirty |= insertMessage(ctx);
if (change.getLastUpdatedOn().before(ctx.getWhen())) {
change.setLastUpdatedOn(ctx.getWhen());
Change c = notes.getChange();
if (c.getLastUpdatedOn().before(ctx.getWhen())) {
c.setLastUpdatedOn(ctx.getWhen());
}
if (dirty) {
ctx.saveChange();
@@ -380,14 +382,14 @@ public class PostReview implements RestModifyView<RevisionResource, ReviewInput>
if (in.notify.compareTo(NotifyHandling.NONE) > 0) {
email.create(
in.notify,
change,
notes,
ps,
user.getAccountId(),
message,
comments).sendAsync();
}
try {
hooks.doCommentAddedHook(change, user.getAccount(), ps,
hooks.doCommentAddedHook(notes.getChange(), user.getAccount(), ps,
message.getMessage(), categories, ctx.getDb());
} catch (OrmException e) {
log.warn("ChangeHook.doCommentAddedHook delivery failed", e);

View File

@@ -15,9 +15,9 @@
package com.google.gerrit.server.patch;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.PatchSetInfo;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.RevId;
import com.google.gerrit.reviewdb.client.UserIdentity;
import com.google.gerrit.reviewdb.server.ReviewDb;
@@ -78,16 +78,15 @@ public class PatchSetInfoFactory {
throws PatchSetInfoNotAvailableException {
try {
PatchSet patchSet = psUtil.get(db, notes, psId);
Change change = db.changes().get(psId.getParentKey());
return get(change, patchSet);
return get(notes.getProjectName(), patchSet);
} catch (OrmException e) {
throw new PatchSetInfoNotAvailableException(e);
}
}
public PatchSetInfo get(Change change, PatchSet patchSet)
public PatchSetInfo get(Project.NameKey project, PatchSet patchSet)
throws PatchSetInfoNotAvailableException {
try (Repository repo = repoManager.openRepository(change.getProject());
try (Repository repo = repoManager.openRepository(project);
RevWalk rw = new RevWalk(repo)) {
final RevCommit src =
rw.parseCommit(ObjectId.fromString(patchSet.getRevision().get()));