Merge branch 'stable-2.16' into stable-3.0
* stable-2.16:
Add method to push changes directly to given replica
Adapt the hereby merged UsedAt import addition to the c.g.g.common
package, differing from downstream c.g.g.server.
Change-Id: Ib630eb2be5a1167fddb949ee464b35bcf3f8db05
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
index 8030d28..4b25c8f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
@@ -17,6 +17,7 @@
import com.google.auto.value.AutoValue;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Queues;
+import com.google.gerrit.common.UsedAt;
import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
import com.google.gerrit.extensions.events.HeadUpdatedListener;
import com.google.gerrit.extensions.events.LifecycleListener;
@@ -139,17 +140,36 @@
Project.NameKey project = new Project.NameKey(projectName);
for (Destination cfg : config.getDestinations(FilterType.ALL)) {
- if (cfg.wouldPushProject(project) && cfg.wouldPushRef(refName)) {
- for (URIish uri : cfg.getURIs(project, null)) {
- replicationTasksStorage.persist(
- new ReplicateRefUpdate(projectName, refName, uri, cfg.getRemoteConfigName()));
- cfg.schedule(project, refName, uri, state);
- }
- }
+ pushReference(cfg, project, refName, state);
}
state.markAllPushTasksScheduled();
}
+ @UsedAt(UsedAt.Project.COLLABNET)
+ public void pushReference(Destination cfg, Project.NameKey project, String refName) {
+ pushReference(cfg, project, refName, null);
+ }
+
+ private void pushReference(
+ Destination cfg, Project.NameKey project, String refName, ReplicationState state) {
+ boolean withoutState = state == null;
+ if (withoutState) {
+ state = new ReplicationState(new GitUpdateProcessing(dispatcher.get()));
+ }
+
+ if (cfg.wouldPushProject(project) && cfg.wouldPushRef(refName)) {
+ for (URIish uri : cfg.getURIs(project, null)) {
+ replicationTasksStorage.persist(
+ new ReplicateRefUpdate(project.get(), refName, uri, cfg.getRemoteConfigName()));
+ cfg.schedule(project, refName, uri, state);
+ }
+ }
+
+ if (withoutState) {
+ state.markAllPushTasksScheduled();
+ }
+ }
+
private void firePendingEvents() {
replaying = true;
try {