Merge branch 'stable-2.6' into stable-2.7

* stable-2.6:
  Catch missing LDAP accounts in group membership
  Update patch status before skipping duplicate emails

Conflicts:
	gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java

Change-Id: If7173d50f09fa799e1cdd02e68b88aab00f1a1d9
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java
index 7d0ad24..63ef2e6 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/Helper.java
@@ -198,7 +198,13 @@
       final HashMap<String, String> params = new HashMap<String, String>();
 
       if (account == null) {
-        account = findAccount(schema, ctx, username);
+        try {
+          account = findAccount(schema, ctx, username);
+        } catch (AccountException e) {
+          LdapRealm.log.warn("Account " + username +
+              " not found, assuming empty group membership");
+          return Collections.emptySet();
+        }
       }
       for (String name : schema.groupMemberQueryList.get(0).getParameters()) {
         params.put(name, account.get(name));
@@ -215,7 +221,13 @@
 
     if (schema.accountMemberField != null) {
       if (account == null) {
-        account = findAccount(schema, ctx, username);
+        try {
+          account = findAccount(schema, ctx, username);
+        } catch (AccountException e) {
+          LdapRealm.log.warn("Account " + username +
+              " not found, assuming empty group membership");
+          return Collections.emptySet();
+        }
       }
 
       final Attribute groupAtt = account.getAll(schema.accountMemberField);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java
index 2b51b0a..78202fc 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java
@@ -143,7 +143,6 @@
    */
   public ChangeMessage getConflictMessage(RevisionResource rsrc)
       throws OrmException {
-    final Timestamp before = rsrc.getChange().getLastUpdatedOn();
     ChangeMessage msg = Iterables.getFirst(Iterables.filter(
       Lists.reverse(dbProvider.get().changeMessages()
           .byChange(rsrc.getChange().getId())
@@ -151,8 +150,7 @@
       new Predicate<ChangeMessage>() {
         @Override
         public boolean apply(ChangeMessage input) {
-          return input.getAuthor() == null
-              && input.getWrittenOn().getTime() >= before.getTime();
+          return input.getAuthor() == null;
         }
       }), null);
     return msg;
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 3a9eaa3..3afbdd6 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
@@ -1047,16 +1047,6 @@
 
   private void sendMergeFail(final Change c, final ChangeMessage msg,
       final boolean makeNew) {
-    if (isDuplicate(msg)) {
-      return;
-    }
-
-    try {
-      db.changeMessages().insert(Collections.singleton(msg));
-    } catch (OrmException err) {
-      log.warn("Cannot record merge failure message", err);
-    }
-
     if (makeNew) {
       try {
         db.changes().atomicUpdate(c.getId(), new AtomicUpdate<Change>() {
@@ -1081,6 +1071,16 @@
       }
     }
 
+    if (isDuplicate(msg)) {
+      return;
+    }
+
+    try {
+      db.changeMessages().insert(Collections.singleton(msg));
+    } catch (OrmException err) {
+      log.warn("Cannot record merge failure message", err);
+    }
+
     PatchSetApproval submitter = null;
     try {
       submitter = getSubmitter(db, c.currentPatchSetId());