diff options
-rw-r--r-- | src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java | 12 | ||||
-rw-r--r-- | src/main/resources/Documentation/config.md | 13 |
2 files changed, 25 insertions, 0 deletions
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 7b8975e..a52050e 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java @@ -14,6 +14,7 @@ package com.googlesource.gerrit.plugins.replication; +import com.google.common.base.Objects; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; @@ -70,6 +71,7 @@ class Destination { private final ProjectControl.Factory projectControlFactory; private final GitRepositoryManager gitManager; private final boolean replicatePermissions; + private final String remoteNameStyle; private volatile WorkQueue.Executor pool; private final PerThreadRequestScope.Scoper threadScoper; @@ -91,6 +93,8 @@ class Destination { poolName = "ReplicateTo-" + rc.getName(); replicatePermissions = cfg.getBoolean("remote", rc.getName(), "replicatePermissions", true); + remoteNameStyle = Objects.firstNonNull( + cfg.getString("remote", rc.getName(), "remoteNameStyle"), "slash"); final CurrentUser remoteUser; String[] authGroupNames = cfg.getStringList("remote", rc.getName(), "authGroup"); @@ -345,6 +349,14 @@ class Destination { if (needsUrlEncoding(uri)) { name = encode(name); } + if (remoteNameStyle.equals("dash")) { + name = name.replace("/", "-"); + } else if(remoteNameStyle.equals("underscore")) { + name = name.replace("/", "_"); + } else if (!remoteNameStyle.equals("slash")) { + ReplicationQueue.log.debug(String.format( + "Unknown remoteNameStyle: %s, falling back to slash", remoteNameStyle)); + } String replacedPath = ReplicationQueue.replaceName(uri.getPath(), name); if (replacedPath != null) { uri = uri.setPath(replacedPath); diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md index 4b8c6c6..fd90581 100644 --- a/src/main/resources/Documentation/config.md +++ b/src/main/resources/Documentation/config.md @@ -216,6 +216,19 @@ remote.NAME.mirror By default, false, do not remove remote branches. +remote.NAME.remoteNameStyle +: Slashes in the `${name}` placeholder are replaced with either + dashes or underscores. + + Github and Gitorious do not permit slashes "/" in repository + names and changes this to dashes "-" at repository creation + time. If set to "dash," this changes slashes to dashes in the + repository name. If set to "underscore", this changes slashes + to underscores in the repository name. + + By default, "slash," remote name will contain slashes as they + do in Gerrit. + File `secure.config` -------------------- |