Merge "Fix cases where replication is waiting indefinitely"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
index 6117abf..f2b362e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
@@ -591,7 +591,7 @@
       if (inFlightOp != null) {
         return RunwayStatus.denied(inFlightOp.getId());
       }
-      op.setRefs(replicationTasksStorage.get().start(op));
+      op.notifyNotAttempted(op.setStartedRefs(replicationTasksStorage.get().start(op)));
       inFlight.put(op.getURI(), op);
     }
     return RunwayStatus.allowed();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
index ebe169c..404d4bd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
@@ -52,6 +52,7 @@
 import com.jcraft.jsch.JSchException;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -301,10 +302,26 @@
     }
   }
 
-  void setRefs(Set<String> refs) {
+  Set<String> setStartedRefs(Set<String> startedRefs) {
+    Set<String> notAttemptedRefs = Sets.difference(delta, startedRefs);
     pushAllRefs = false;
     delta.clear();
-    addRefs(refs);
+    addRefs(startedRefs);
+    return notAttemptedRefs;
+  }
+
+  void notifyNotAttempted(Set<String> notAttemptedRefs) {
+    notAttemptedRefs.forEach(
+        ref ->
+            Arrays.asList(getStatesByRef(ref))
+                .forEach(
+                    state ->
+                        state.notifyRefReplicated(
+                            projectName.get(),
+                            ref,
+                            uri,
+                            RefPushResult.NOT_ATTEMPTED,
+                            RemoteRefUpdate.Status.UP_TO_DATE)));
   }
 
   void addState(String ref, ReplicationState state) {