Merge branch 'stable-2.8'
* stable-2.8:
Always show repo download command if repo download scheme is enabled
Conflicts:
src/main/java/com/googlesource/gerrit/plugins/download/command/RepoCommand.java
Change-Id: I8115a26a7959cc7766b1ff61f15b211f9a59bd35
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 3f6da18..14ff781 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/Module.java
@@ -14,45 +14,15 @@
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.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.FormatPatchCommand;
-import com.googlesource.gerrit.plugins.download.command.PullCommand;
-import com.googlesource.gerrit.plugins.download.command.RepoCommand;
-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;
+import com.googlesource.gerrit.plugins.download.command.DownloadCommandsModule;
+import com.googlesource.gerrit.plugins.download.scheme.SchemeModule;
class Module extends AbstractModule {
@Override
protected void configure() {
- 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);
-
- 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);
+ install(new DownloadCommandsModule());
+ install(new SchemeModule());
}
}
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 349e56a..b415813 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
@@ -16,19 +16,17 @@
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 CheckoutCommand extends GitDownloadCommand {
+class CheckoutCommand extends GitDownloadCommand {
@Inject
CheckoutCommand(DownloadConfig downloadConfig) {
super(downloadConfig, CHECKOUT);
}
@Override
- public String getCommand(String url, String ref) {
+ 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 a357aa8..5490848 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
@@ -16,19 +16,17 @@
import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand.CHERRY_PICK;
-import com.google.gerrit.extensions.annotations.Listen;
import com.google.gerrit.server.config.DownloadConfig;
import com.google.inject.Inject;
-@Listen
-public class CherryPickCommand extends GitDownloadCommand {
+class CherryPickCommand extends GitDownloadCommand {
@Inject
CherryPickCommand(DownloadConfig downloadConfig) {
super(downloadConfig, CHERRY_PICK);
}
@Override
- public String getCommand(String url, String ref) {
+ 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/DownloadCommandsModule.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/DownloadCommandsModule.java
new file mode 100644
index 0000000..22ca5d3
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/DownloadCommandsModule.java
@@ -0,0 +1,44 @@
+// 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 com.google.gerrit.extensions.annotations.Exports;
+import com.google.gerrit.extensions.config.DownloadCommand;
+import com.google.inject.AbstractModule;
+
+public class DownloadCommandsModule extends AbstractModule {
+ @Override
+ protected void configure() {
+ 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"))
+ .to(RepoCommand.class);
+ }
+}
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 aefa23f..67e1d17 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
@@ -16,19 +16,17 @@
import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand.FORMAT_PATCH;
-import com.google.gerrit.extensions.annotations.Listen;
import com.google.gerrit.server.config.DownloadConfig;
import com.google.inject.Inject;
-@Listen
-public class FormatPatchCommand extends GitDownloadCommand {
+class FormatPatchCommand extends GitDownloadCommand {
@Inject
FormatPatchCommand(DownloadConfig downloadConfig) {
super(downloadConfig, FORMAT_PATCH);
}
@Override
- public String getCommand(String url, String ref) {
+ 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 61e3fbd..a290856 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,12 +21,13 @@
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
import com.google.gerrit.server.config.DownloadConfig;
-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;
+import com.googlesource.gerrit.plugins.download.scheme.RepoScheme;
-public abstract class GitDownloadCommand extends DownloadCommand {
+import org.eclipse.jgit.transport.URIish;
+
+import java.net.URISyntaxException;
+
+abstract class GitDownloadCommand extends DownloadCommand {
private final boolean commandAllowed;
GitDownloadCommand(
@@ -38,23 +39,27 @@
@Override
public final String getCommand(DownloadScheme scheme, String project,
String ref) {
- if (!commandAllowed) {
- return null;
- }
-
- if (scheme instanceof SshScheme
- || scheme instanceof HttpScheme
- || scheme instanceof AnonymousHttpScheme
- || scheme instanceof GitScheme) {
+ if (commandAllowed && isRecognizedScheme(scheme)) {
String url = scheme.getUrl(project);
- if (url != null) {
+ if (url != null && isValidUrl(url)) {
return getCommand(url, ref);
- } else
- return null;
- } else {
- return null;
+ }
+ }
+ return null;
+ }
+
+ private static boolean isRecognizedScheme(DownloadScheme scheme) {
+ return !(scheme instanceof RepoScheme);
+ }
+
+ private static boolean isValidUrl(String url) {
+ try {
+ new URIish(url);
+ return true;
+ } catch (URISyntaxException e) {
+ return false;
}
}
- public abstract String getCommand(String url, String ref);
+ 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 d86a630..b70ff56 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
@@ -16,19 +16,17 @@
import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand.PULL;
-import com.google.gerrit.extensions.annotations.Listen;
import com.google.gerrit.server.config.DownloadConfig;
import com.google.inject.Inject;
-@Listen
-public class PullCommand extends GitDownloadCommand {
+class PullCommand extends GitDownloadCommand {
@Inject
PullCommand(DownloadConfig downloadConfig) {
super(downloadConfig, PULL);
}
@Override
- public String getCommand(String url, String ref) {
+ String getCommand(String url, String ref) {
return "git pull " + url + " " + 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 905b0b6..1ea2cf0 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
@@ -71,6 +71,11 @@
return false;
}
+ @Override
+ public boolean isAuthSupported() {
+ 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/GitScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/GitScheme.java
index 77b12b0..e185fdc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/GitScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/GitScheme.java
@@ -56,6 +56,11 @@
return false;
}
+ @Override
+ public boolean isAuthSupported() {
+ 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 b97a1bd..af75046 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
@@ -86,6 +86,11 @@
return true;
}
+ @Override
+ public boolean isAuthSupported() {
+ 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 7397b0a..e5a0110 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
@@ -16,14 +16,11 @@
import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadScheme.REPO_DOWNLOAD;
-import com.google.gerrit.extensions.annotations.Listen;
import com.google.gerrit.extensions.config.DownloadScheme;
import com.google.gerrit.server.config.DownloadConfig;
import com.google.inject.Inject;
-@Listen
public class RepoScheme extends DownloadScheme {
-
private final boolean schemeAllowed;
@Inject
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SchemeModule.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SchemeModule.java
new file mode 100644
index 0000000..9a42fcc
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SchemeModule.java
@@ -0,0 +1,44 @@
+// 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.scheme;
+
+import com.google.gerrit.extensions.annotations.Exports;
+import com.google.gerrit.extensions.config.DownloadScheme;
+import com.google.inject.AbstractModule;
+
+public class SchemeModule extends AbstractModule {
+ @Override
+ protected void configure() {
+ 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);
+ }
+}
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 5e3c0da..8253b66 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
@@ -18,7 +18,6 @@
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;
@@ -31,7 +30,6 @@
import java.net.URL;
import java.util.List;
-@Listen
public class SshScheme extends DownloadScheme {
private final String sshdAddress;
private final Provider<CurrentUser> userProvider;
@@ -81,6 +79,11 @@
return true;
}
+ @Override
+ public boolean isAuthSupported() {
+ return true;
+ }
+
private static String ensureSlash(String in) {
if (in != null && !in.endsWith("/")) {
return in + "/";