Use default value for remote.NAME.fetch
Mimic the behaviour of replicaton plugin which uses `refs/*:refs/*` as
default value for `remote.NAME.fetch`.
Change-Id: Iec2b0402103f1dee861626eacb79838f0cdb07a7
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/SourceConfigParser.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/SourceConfigParser.java
index 67ac6f1..26a754a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/SourceConfigParser.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/SourceConfigParser.java
@@ -19,14 +19,17 @@
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.server.config.GerritIsReplica;
import com.google.inject.Inject;
+import com.google.inject.Provider;
import com.googlesource.gerrit.plugins.replication.ConfigParser;
import com.googlesource.gerrit.plugins.replication.RemoteConfiguration;
+import com.googlesource.gerrit.plugins.replication.ReplicationConfig;
import java.net.URISyntaxException;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.transport.RemoteConfig;
import org.eclipse.jgit.transport.URIish;
@@ -35,10 +38,13 @@
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
private boolean isReplica;
+ private Provider<ReplicationConfig> replicationConfigProvider;
@Inject
- SourceConfigParser(@GerritIsReplica Boolean isReplica) {
+ SourceConfigParser(
+ @GerritIsReplica Boolean isReplica, Provider<ReplicationConfig> replicationConfigProvider) {
this.isReplica = isReplica;
+ this.replicationConfigProvider = replicationConfigProvider;
}
/* (non-Javadoc)
@@ -86,13 +92,14 @@
for (String name : names) {
try {
final RemoteConfig remoteConfig = new RemoteConfig(cfg, name);
- if (!isReplica || !remoteConfig.getFetchRefSpecs().isEmpty()) {
- result.add(remoteConfig);
- } else {
- logger.atFine().log(
- "Skip loading of remote [remote \"%s\"], since it has no 'fetch' configuration",
- name);
+ if (remoteConfig.getFetchRefSpecs().isEmpty()) {
+ remoteConfig.setFetchRefSpecs(
+ List.of(
+ new RefSpec()
+ .setSourceDestination("refs/*", "refs/*")
+ .setForceUpdate(replicationConfigProvider.get().isDefaultForceUpdate())));
}
+ result.add(remoteConfig);
} catch (URISyntaxException e) {
throw new ConfigInvalidException(
String.format("remote %s has invalid URL in %s", name, cfg));
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index a934dfb..ed0c5e7 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -127,6 +127,10 @@
the replication plugin. When the reload takes place, pending replication
events based on old settings are discarded. By default, false.
+gerrit.defaultForceUpdate
+: If true, the default fetch refspec will be set to use forced update to
+ the local repository when no refspec is given. By default, false.
+
replication.lockErrorMaxRetries
: Number of times to retry a replication operation if a lock
error is detected.
@@ -443,6 +447,9 @@
> **NOT having** a `fetch` configuration for a remote, will also enable
> the standard _push_ replication for that remote.
+ Default: refs/*:refs/*, with the force fetch set to
+ `gerrit.defaultForceUpdate`
+
[2]: #example_file
remote.NAME.timeout