Merge "Use SchemaFactory instead of Provider in DbGroupMemberAuditListener"
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 bc2a46e..f50b8cd 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
@@ -316,7 +316,7 @@
     } finally {
       db.rollback();
     }
-    indexer.index(db, c);
+    indexer.index(db, updatedChange);
     if (runHooks) {
       hooks.doPatchsetCreatedHook(updatedChange, patchSet, db);
     }
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 7d603b1..112b1a8 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
@@ -921,16 +921,18 @@
       throws OrmException, IOException {
     logDebug("Setting change {} merged", c.getId());
     ChangeUpdate update = null;
+    PatchSetApproval submitter;
+    PatchSet merged;
     try {
       db.changes().beginTransaction(c.getId());
 
       // We must pull the patchset out of commits, because the patchset ID is
       // modified when using the cherry-pick merge strategy.
       CodeReviewCommit commit = commits.get(c.getId());
-      PatchSet.Id merged = commit.change().currentPatchSetId();
-      c = setMergedPatchSet(c.getId(), merged);
-      PatchSetApproval submitter =
-          approvalsUtil.getSubmitter(db, commit.notes(), merged);
+      PatchSet.Id mergedId = commit.change().currentPatchSetId();
+      merged = db.patchSets().get(mergedId);
+      c = setMergedPatchSet(c.getId(), mergedId);
+      submitter = approvalsUtil.getSubmitter(db, commit.notes(), mergedId);
       ChangeControl control = commit.getControl();
       update = updateFactory.create(control, c.getLastUpdatedOn());
 
@@ -941,23 +943,21 @@
         cmUtil.addChangeMessage(db, update, msg);
       }
       db.commit();
-
-      sendMergedEmail(c, submitter);
-      indexer.index(db, c);
-      if (submitter != null) {
-        try {
-          hooks.doChangeMergedHook(c,
-              accountCache.get(submitter.getAccountId()).getAccount(),
-              db.patchSets().get(merged), db);
-        } catch (OrmException ex) {
-          logError("Cannot run hook for submitted patch set " + c.getId(), ex);
-        }
-      }
     } finally {
       db.rollback();
     }
-    indexer.index(db, c);
     update.commit();
+    sendMergedEmail(c, submitter);
+    indexer.index(db, c);
+    if (submitter != null) {
+      try {
+        hooks.doChangeMergedHook(c,
+            accountCache.get(submitter.getAccountId()).getAccount(),
+            merged, db);
+      } catch (OrmException ex) {
+        logError("Cannot run hook for submitted patch set " + c.getId(), ex);
+      }
+    }
   }
 
   private Change setMergedPatchSet(Change.Id changeId, final PatchSet.Id merged)