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:
		@@ -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());
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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()));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user