Adapt to new API in Gerrit core
Change-Id: I8cd6954e30f8baa7f6cda2400b85bf75b88f8c27
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/Module.java b/src/main/java/com/googlesource/gerrit/plugins/download/Module.java
index b578a51..3f6da18 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/Module.java
@@ -14,19 +14,18 @@
package com.googlesource.gerrit.plugins.download;
+import com.google.gerrit.extensions.annotations.Exports;
import com.google.gerrit.extensions.config.DownloadCommand;
import com.google.gerrit.extensions.config.DownloadScheme;
-import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.inject.AbstractModule;
import com.googlesource.gerrit.plugins.download.command.CheckoutCommand;
import com.googlesource.gerrit.plugins.download.command.CherryPickCommand;
-import com.googlesource.gerrit.plugins.download.command.CloneCommand;
import com.googlesource.gerrit.plugins.download.command.FormatPatchCommand;
import com.googlesource.gerrit.plugins.download.command.PullCommand;
import com.googlesource.gerrit.plugins.download.command.RepoCommand;
-import com.googlesource.gerrit.plugins.download.scheme.AnonymousGitScheme;
import com.googlesource.gerrit.plugins.download.scheme.AnonymousHttpScheme;
+import com.googlesource.gerrit.plugins.download.scheme.GitScheme;
import com.googlesource.gerrit.plugins.download.scheme.HttpScheme;
import com.googlesource.gerrit.plugins.download.scheme.RepoScheme;
import com.googlesource.gerrit.plugins.download.scheme.SshScheme;
@@ -34,17 +33,26 @@
class Module extends AbstractModule {
@Override
protected void configure() {
- DynamicSet.bind(binder(), DownloadScheme.class).to(AnonymousHttpScheme.class);
- DynamicSet.bind(binder(), DownloadScheme.class).to(AnonymousGitScheme.class);
- DynamicSet.bind(binder(), DownloadScheme.class).to(HttpScheme.class);
- DynamicSet.bind(binder(), DownloadScheme.class).to(RepoScheme.class);
- DynamicSet.bind(binder(), DownloadScheme.class).to(SshScheme.class);
+ bind(DownloadScheme.class).annotatedWith(Exports.named("anonymous http"))
+ .to(AnonymousHttpScheme.class);
+ bind(DownloadScheme.class).annotatedWith(Exports.named("git"))
+ .to(GitScheme.class);
+ bind(DownloadScheme.class).annotatedWith(Exports.named("http"))
+ .to(HttpScheme.class);
+ bind(DownloadScheme.class).annotatedWith(Exports.named("repo"))
+ .to(RepoScheme.class);
+ bind(DownloadScheme.class).annotatedWith(Exports.named("ssh"))
+ .to(SshScheme.class);
- DynamicSet.bind(binder(), DownloadCommand.class).to(CloneCommand.class);
- DynamicSet.bind(binder(), DownloadCommand.class).to(CheckoutCommand.class);
- DynamicSet.bind(binder(), DownloadCommand.class).to(CherryPickCommand.class);
- DynamicSet.bind(binder(), DownloadCommand.class).to(FormatPatchCommand.class);
- DynamicSet.bind(binder(), DownloadCommand.class).to(PullCommand.class);
- DynamicSet.bind(binder(), DownloadCommand.class).to(RepoCommand.class);
+ bind(DownloadCommand.class).annotatedWith(Exports.named("Checkout"))
+ .to(CheckoutCommand.class);
+ bind(DownloadCommand.class).annotatedWith(Exports.named("Cherry-Pick"))
+ .to(CherryPickCommand.class);
+ bind(DownloadCommand.class).annotatedWith(Exports.named("Format-Patch"))
+ .to(FormatPatchCommand.class);
+ bind(DownloadCommand.class).annotatedWith(Exports.named("Pull"))
+ .to(PullCommand.class);
+ bind(DownloadCommand.class).annotatedWith(Exports.named("Repo-Download"))
+ .to(RepoCommand.class);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/CheckoutCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/CheckoutCommand.java
index d0c70ba..349e56a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/CheckoutCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/CheckoutCommand.java
@@ -28,7 +28,7 @@
}
@Override
- public String getCommand(String url) {
- return "git fetch " + url + " ${ref} && git checkout FETCH_HEAD";
+ public String getCommand(String url, String ref) {
+ return "git fetch " + url + " " + ref + " && git checkout FETCH_HEAD";
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/CherryPickCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/CherryPickCommand.java
index a28bd0d..a357aa8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/CherryPickCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/CherryPickCommand.java
@@ -28,7 +28,7 @@
}
@Override
- public String getCommand(String url) {
- return "git fetch " + url + " ${ref} && git cherry-pick FETCH_HEAD";
+ public String getCommand(String url, String ref) {
+ return "git fetch " + url + " " + ref + " && git cherry-pick FETCH_HEAD";
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneCommand.java
deleted file mode 100644
index 1fd3431..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneCommand.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (C) 2013 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.googlesource.gerrit.plugins.download.command;
-
-import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand.CHECKOUT;
-
-import com.google.gerrit.extensions.annotations.Listen;
-import com.google.gerrit.server.config.DownloadConfig;
-import com.google.inject.Inject;
-
-@Listen
-public class CloneCommand extends GitDownloadCommand {
- @Inject
- CloneCommand(DownloadConfig downloadConfig) {
- super(downloadConfig, CHECKOUT);
- }
-
- @Override
- public String getName() {
- return "clone";
- }
-
- @Override
- public String getCommand(String url) {
- return "git clone " + url;
- }
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/FormatPatchCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/FormatPatchCommand.java
index c02d15a..aefa23f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/FormatPatchCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/FormatPatchCommand.java
@@ -28,7 +28,7 @@
}
@Override
- public String getCommand(String url) {
- return "git fetch " + url + " ${ref} && git format-patch -1 --stdout FETCH_HEAD";
+ public String getCommand(String url, String ref) {
+ return "git fetch " + url + " " + ref + " && git format-patch -1 --stdout FETCH_HEAD";
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/GitDownloadCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/GitDownloadCommand.java
index 184ed2a..61e3fbd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/GitDownloadCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/GitDownloadCommand.java
@@ -21,43 +21,23 @@
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
import com.google.gerrit.server.config.DownloadConfig;
-import com.googlesource.gerrit.plugins.download.scheme.AnonymousGitScheme;
import com.googlesource.gerrit.plugins.download.scheme.AnonymousHttpScheme;
+import com.googlesource.gerrit.plugins.download.scheme.GitScheme;
import com.googlesource.gerrit.plugins.download.scheme.HttpScheme;
import com.googlesource.gerrit.plugins.download.scheme.SshScheme;
public abstract class GitDownloadCommand extends DownloadCommand {
- private final AccountGeneralPreferences.DownloadCommand cmd;
private final boolean commandAllowed;
GitDownloadCommand(
DownloadConfig downloadConfig, AccountGeneralPreferences.DownloadCommand cmd) {
- this.cmd = cmd;
this.commandAllowed = downloadConfig.getDownloadCommands().contains(cmd)
|| downloadConfig.getDownloadCommands().contains(DEFAULT_DOWNLOADS);
}
@Override
- public String getName() {
- return upperUnderscoreToUpperHyphen(cmd.name());
- }
-
- /** Converts UPPER_UNDERSCORE to Upper-Hyphen */
- private static String upperUnderscoreToUpperHyphen(String upperUnderscore) {
- StringBuilder upperHyphen = new StringBuilder(upperUnderscore.length());
- String[] words = upperUnderscore.split("_");
- for (int i = 0, l = words.length; i < l; ++i) {
- if (i > 0) {
- upperHyphen.append("-");
- }
- upperHyphen.append(Character.toUpperCase(words[i].charAt(0))).append(
- words[i].substring(1).toLowerCase());
- }
- return upperHyphen.toString();
- }
-
- @Override
- public final String getCommand(DownloadScheme scheme, String project) {
+ public final String getCommand(DownloadScheme scheme, String project,
+ String ref) {
if (!commandAllowed) {
return null;
}
@@ -65,12 +45,16 @@
if (scheme instanceof SshScheme
|| scheme instanceof HttpScheme
|| scheme instanceof AnonymousHttpScheme
- || scheme instanceof AnonymousGitScheme) {
- return getCommand(scheme.getUrl(project));
+ || scheme instanceof GitScheme) {
+ String url = scheme.getUrl(project);
+ if (url != null) {
+ return getCommand(url, ref);
+ } else
+ return null;
} else {
return null;
}
}
- public abstract String getCommand(String url);
+ public abstract String getCommand(String url, String ref);
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/PullCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/PullCommand.java
index 07933f6..d86a630 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/PullCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/PullCommand.java
@@ -28,7 +28,7 @@
}
@Override
- public String getCommand(String url) {
- return "git pull " + url + " ${ref}";
+ public String getCommand(String url, String ref) {
+ return "git pull " + url + " " + ref;
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/RepoCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/RepoCommand.java
index d96ab90..26a40ec 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/RepoCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/RepoCommand.java
@@ -16,7 +16,6 @@
import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand.REPO_DOWNLOAD;
-import com.google.common.base.CaseFormat;
import com.google.gerrit.extensions.config.DownloadCommand;
import com.google.gerrit.extensions.config.DownloadScheme;
import com.google.gerrit.server.config.DownloadConfig;
@@ -33,16 +32,11 @@
}
@Override
- public String getName() {
- return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, REPO_DOWNLOAD.name());
- }
-
- @Override
- public String getCommand(DownloadScheme scheme, String project) {
+ public String getCommand(DownloadScheme scheme, String project, String ref) {
if (!commandAllowed || !(scheme instanceof RepoScheme)) {
return null;
}
- return scheme.getUrl(project) + " ${ref}";
+ return scheme.getUrl(project) + " " + ref;
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/AnonymousHttpScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/AnonymousHttpScheme.java
index fbb9545..905b0b6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/AnonymousHttpScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/AnonymousHttpScheme.java
@@ -44,11 +44,6 @@
}
@Override
- public String getName() {
- return "Anonymous HTTP";
- }
-
- @Override
public String getUrl(String project) {
if (!isEnabled()) {
return null;
@@ -71,6 +66,11 @@
return schemeAllowed && (gitHttpUrl != null || canonicalWebUrl != null);
}
+ @Override
+ public boolean isAuthRequired() {
+ return false;
+ }
+
private static String ensureSlash(String in) {
if (in != null && !in.endsWith("/")) {
return in + "/";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/AnonymousGitScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/GitScheme.java
similarity index 91%
rename from src/main/java/com/googlesource/gerrit/plugins/download/scheme/AnonymousGitScheme.java
rename to src/main/java/com/googlesource/gerrit/plugins/download/scheme/GitScheme.java
index 4350165..77b12b0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/AnonymousGitScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/GitScheme.java
@@ -24,13 +24,13 @@
import org.eclipse.jgit.lib.Config;
-public class AnonymousGitScheme extends DownloadScheme {
+public class GitScheme extends DownloadScheme {
private final String gitDaemonUrl;
private final boolean schemeAllowed;
@Inject
- public AnonymousGitScheme(@GerritServerConfig Config cfg,
+ public GitScheme(@GerritServerConfig Config cfg,
DownloadConfig downloadConfig) {
this.gitDaemonUrl =
ensureSlash(cfg.getString("gerrit", null, "canonicalGitUrl"));
@@ -39,11 +39,6 @@
}
@Override
- public String getName() {
- return "Anonymous GIT";
- }
-
- @Override
public String getUrl(String project) {
StringBuilder r = new StringBuilder();
r.append(gitDaemonUrl);
@@ -56,6 +51,11 @@
return schemeAllowed && gitDaemonUrl != null;
}
+ @Override
+ public boolean isAuthRequired() {
+ return false;
+ }
+
private static String ensureSlash(String in) {
if (in != null && !in.endsWith("/")) {
return in + "/";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/HttpScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/HttpScheme.java
index a69c556..b97a1bd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/HttpScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/HttpScheme.java
@@ -19,6 +19,7 @@
import com.google.gerrit.common.Nullable;
import com.google.gerrit.extensions.config.DownloadScheme;
+import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.config.CanonicalWebUrl;
import com.google.gerrit.server.config.DownloadConfig;
import com.google.gerrit.server.config.GerritServerConfig;
@@ -31,26 +32,24 @@
private final String gitHttpUrl;
private final String canonicalWebUrl;
+ private final Provider<CurrentUser> userProvider;
private final boolean schemeAllowed;
@Inject
public HttpScheme(@GerritServerConfig Config cfg,
- @CanonicalWebUrl @Nullable Provider<String> provider,
+ @CanonicalWebUrl @Nullable Provider<String> urlProvider,
+ Provider<CurrentUser> userProvider,
DownloadConfig downloadConfig) {
this.gitHttpUrl = ensureSlash(cfg.getString("gerrit", null, "gitHttpUrl"));
- this.canonicalWebUrl = provider != null ? provider.get() : null;
+ this.canonicalWebUrl = urlProvider != null ? urlProvider.get() : null;
+ this.userProvider = userProvider;
this.schemeAllowed = downloadConfig.getDownloadSchemes().contains(HTTP)
|| downloadConfig.getDownloadSchemes().contains(DEFAULT_DOWNLOADS);
}
@Override
- public String getName() {
- return "HTTP";
- }
-
- @Override
public String getUrl(String project) {
- if (!isEnabled()) {
+ if (!isEnabled() || !userProvider.get().isIdentifiedUser()) {
return null;
}
@@ -66,7 +65,8 @@
}
String host = base.substring(p + 3, s);
r.append(base.substring(0, p + 3));
- r.append("${username}@");
+ r.append(userProvider.get().getUserName());
+ r.append("@");
r.append(host);
r.append(base.substring(s));
} else {
@@ -81,6 +81,11 @@
return schemeAllowed && (gitHttpUrl != null || canonicalWebUrl != null);
}
+ @Override
+ public boolean isAuthRequired() {
+ return true;
+ }
+
private static String ensureSlash(String in) {
if (in != null && !in.endsWith("/")) {
return in + "/";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/RepoScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/RepoScheme.java
index f6ef690..388a7b4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/RepoScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/RepoScheme.java
@@ -32,20 +32,17 @@
}
@Override
- public String getName() {
- return "REPO";
- }
-
- @Override
public String getUrl(String project) {
- final StringBuilder r = new StringBuilder();
- r.append("repo download ");
- r.append(project);
- return r.toString();
+ return "repo download " + project;
}
@Override
public boolean isEnabled() {
return schemeAllowed;
}
+
+ @Override
+ public boolean isAuthRequired() {
+ return false;
+ }
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java
index e1db802..5e3c0da 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java
@@ -17,56 +17,55 @@
import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadScheme.DEFAULT_DOWNLOADS;
import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadScheme.SSH;
+import com.google.gerrit.common.Nullable;
import com.google.gerrit.extensions.annotations.Listen;
import com.google.gerrit.extensions.config.DownloadScheme;
+import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.config.CanonicalWebUrl;
import com.google.gerrit.server.config.DownloadConfig;
import com.google.gerrit.server.ssh.SshAdvertisedAddresses;
import com.google.inject.Inject;
+import com.google.inject.Provider;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.List;
@Listen
public class SshScheme extends DownloadScheme {
- private final String sshUrl;
private final String sshdAddress;
+ private final Provider<CurrentUser> userProvider;
private final boolean schemeAllowed;
@Inject
SshScheme(@SshAdvertisedAddresses List<String> sshAddresses,
- DownloadConfig downloadConfig) {
- this.sshUrl =
- !sshAddresses.isEmpty() ? ensureSlash(sshAddresses.get(0)) : null;
- if (sshUrl != null) {
- String sshAddr = sshUrl;
- StringBuilder r = new StringBuilder();
- r.append("ssh://${username}@");
- if (sshAddr.startsWith("*:") || "".equals(sshAddr)) {
- r.append("${hostname}");
+ @CanonicalWebUrl @Nullable Provider<String> urlProvider,
+ Provider<CurrentUser> userProvider, DownloadConfig downloadConfig) {
+ String sshAddr = !sshAddresses.isEmpty() ? sshAddresses.get(0) : null;
+ if (sshAddr != null && (sshAddr.startsWith("*:") || "".equals(sshAddr))
+ && urlProvider != null) {
+ try {
+ sshAddr = (new URL(urlProvider.get())).getHost() + sshAddr.substring(1);
+ } catch (MalformedURLException e) {
+ // ignore, then this scheme will be disabled
}
- if (sshAddr.startsWith("*")) {
- sshAddr = sshAddr.substring(1);
- }
- r.append(sshAddr);
- sshdAddress = r.toString();
- } else {
- sshdAddress = null;
}
+ this.sshdAddress = sshAddr;
+ this.userProvider = userProvider;
this.schemeAllowed = downloadConfig.getDownloadSchemes().contains(SSH)
|| downloadConfig.getDownloadSchemes().contains(DEFAULT_DOWNLOADS);
}
@Override
- public String getName() {
- return "SSH";
- }
-
- @Override
public String getUrl(String project) {
- if (!isEnabled()) {
+ if (!isEnabled() || !userProvider.get().isIdentifiedUser()) {
return null;
}
StringBuilder r = new StringBuilder();
+ r.append("ssh://");
+ r.append(userProvider.get().getUserName());
+ r.append("@");
r.append(ensureSlash(sshdAddress));
r.append(project);
return r.toString();
@@ -74,7 +73,12 @@
@Override
public boolean isEnabled() {
- return schemeAllowed && sshUrl != null;
+ return schemeAllowed && sshdAddress != null;
+ }
+
+ @Override
+ public boolean isAuthRequired() {
+ return true;
}
private static String ensureSlash(String in) {
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
index 0afeb99..e4eae75 100644
--- a/src/main/resources/Documentation/about.md
+++ b/src/main/resources/Documentation/about.md
@@ -39,9 +39,6 @@
Command to fetch a patch set and cherry-pick it onto the current
commit.
-* `Clone`:
-Command to clone a project.
-
* `Format-Patch`:
Command to fetch a patch set and feed it into the `format-patch`
command.