summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Kelly <doug.kelly@garmin.com>2013-11-07 15:05:18 -0600
committerDoug Kelly <doug.kelly@garmin.com>2013-11-07 15:05:18 -0600
commit74fe27fe922bdd37f26157f0e52b50009d32ccb8 (patch)
treef50a723b7271fdc803c81c9e999e7d58ee1e4aae
parent8fd6799da8e2e2cfa362ad8d66708f366e4a7870 (diff)
Update patch status before skipping duplicate emails
isDuplicate() was added in 2.6 to prevent sending duplicate emails on merge failures, however this causes the makeNew() flag to be ignored if there's already a duplicate message. This prevents the duplicate email, but keeps the change from getting stuck in the merge queue. Bug: Issue 2244 Change-Id: Ib0b9b10d40256d9b4bfdbba79aab23207987e7f4
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java4
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java20
2 files changed, 11 insertions, 13 deletions
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 c63bf5d3a7..d774077502 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
@@ -126,7 +126,6 @@ public class Submit implements RestModifyView<RevisionResource, Input> {
// If the merge was attempted and it failed the system usually
// writes a comment as a ChangeMessage and sets status to NEW.
// Find the relevant message and report that as the conflict.
- final Timestamp before = rsrc.getChange().getLastUpdatedOn();
ChangeMessage msg = Iterables.getFirst(Iterables.filter(
Lists.reverse(dbProvider.get().changeMessages()
.byChange(change.getId())
@@ -134,8 +133,7 @@ public class Submit implements RestModifyView<RevisionResource, Input> {
new Predicate<ChangeMessage>() {
@Override
public boolean apply(ChangeMessage input) {
- return input.getAuthor() == null
- && input.getWrittenOn().getTime() >= before.getTime();
+ return input.getAuthor() == null;
}
}), null);
if (msg != null) {
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 dace0ae90b..e93fe7e446 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
@@ -1045,16 +1045,6 @@ public class MergeOp {
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>() {
@@ -1079,6 +1069,16 @@ public class MergeOp {
}
}
+ 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());