Add a checkout+branch command
Bug: Issue 11609
Change-Id: Ic8307132782e42b58a1652b8975176730b2f86c0
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/BranchCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/BranchCommand.java
new file mode 100644
index 0000000..e38ccd4
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/BranchCommand.java
@@ -0,0 +1,49 @@
+// Copyright 2020 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.extensions.client.GeneralPreferencesInfo.DownloadCommand.CHECKOUT;
+
+import com.google.gerrit.server.config.DownloadConfig;
+import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.inject.Inject;
+import org.eclipse.jgit.lib.Config;
+
+class BranchCommand extends GitDownloadCommand {
+ @Inject
+ BranchCommand(
+ @GerritServerConfig Config cfg,
+ DownloadConfig downloadConfig,
+ GitRepositoryManager repoManager) {
+ super(cfg, downloadConfig, CHECKOUT, repoManager);
+ }
+
+ @Override
+ String getCommand(String url, String ref, String id) {
+ return "git fetch "
+ + QuoteUtil.quote(url)
+ + " "
+ + ref
+ + " && git checkout -b CL-"
+ + id.replaceAll("/", "-")
+ + " FETCH_HEAD";
+ }
+
+ @Override
+ String getRepoCommand(String url, String id) {
+ return "repo download -b CL-" + id.replaceAll("/", "-") + " " + QuoteUtil.quote(url) + " " + id;
+ }
+}
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 34ca19c..bc3ede6 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
@@ -32,7 +32,7 @@
}
@Override
- String getCommand(String url, String ref) {
+ String getCommand(String url, String ref, String id) {
return "git fetch " + QuoteUtil.quote(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 0e964be..4856e83 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
@@ -32,7 +32,7 @@
}
@Override
- String getCommand(String url, String ref) {
+ String getCommand(String url, String ref, String id) {
return "git fetch " + QuoteUtil.quote(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
index 7ab47f2..2f64b71 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/DownloadCommandsModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/DownloadCommandsModule.java
@@ -23,6 +23,8 @@
protected void configure() {
bind(DownloadCommand.class).annotatedWith(Exports.named("Checkout")).to(CheckoutCommand.class);
+ bind(DownloadCommand.class).annotatedWith(Exports.named("Branch")).to(BranchCommand.class);
+
bind(DownloadCommand.class)
.annotatedWith(Exports.named("Cherry Pick"))
.to(CherryPickCommand.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 a65b5e1..eb3ec3a 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
@@ -32,7 +32,7 @@
}
@Override
- String getCommand(String url, String ref) {
+ String getCommand(String url, String ref, String id) {
return "git fetch "
+ QuoteUtil.quote(url)
+ " "
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 e47a31a..f85ffb4 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
@@ -61,20 +61,25 @@
@Override
public final String getCommand(DownloadScheme scheme, String project, String ref) {
if (commandAllowed) {
+ String id = refToId(ref);
+ if (id == null) {
+ return null;
+ }
+
String url = scheme.getUrl(project);
+ if (url == null) {
+ return null;
+ }
+
if (scheme instanceof RepoScheme) {
- String id = refToId(ref);
- if (id != null) {
- return getRepoCommand(url, id);
+ return getRepoCommand(url, id);
+ }
+ if (isValidUrl(url)) {
+ if (checkForHiddenChangeRefs) {
+ ref = resolveRef(project, ref);
}
- } else {
- if (url != null && isValidUrl(url)) {
- if (checkForHiddenChangeRefs) {
- ref = resolveRef(project, ref);
- }
- if (ref != null) {
- return getCommand(url, ref);
- }
+ if (ref != null) {
+ return getCommand(url, ref, id);
}
}
}
@@ -134,7 +139,12 @@
}
}
- abstract String getCommand(String url, String ref);
+ /**
+ * @param url The project URL this change is for.
+ * @param ref Git named ref to this CL/patchset.
+ * @param id The CL/PS numbers.
+ */
+ abstract String getCommand(String url, String ref, String id);
/**
* @param url The project URL this change is for.
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 d93f6b6..97b4c6e 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
@@ -32,7 +32,7 @@
}
@Override
- String getCommand(String url, String ref) {
+ String getCommand(String url, String ref, String id) {
return "git pull " + QuoteUtil.quote(url) + " " + ref;
}
}