Merge branch 'stable-2.15'

* stable-2.15:
  Assure that project is quoted in download command

Change-Id: I5e4647a34c09b5e940756b295857871e3e5fecfb
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 8f66485..32ebb3d 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
@@ -33,6 +33,6 @@
 
   @Override
   String getCommand(String url, String ref) {
-    return "git fetch " + url + " " + ref + " && git checkout FETCH_HEAD";
+    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 670af42..3aea2ee 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
@@ -33,6 +33,6 @@
 
   @Override
   String getCommand(String url, String ref) {
-    return "git fetch " + url + " " + ref + " && git cherry-pick FETCH_HEAD";
+    return "git fetch " + QuoteUtil.quote(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
index dac10f5..ca9ebc8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneCommand.java
@@ -20,6 +20,6 @@
 
   @Override
   public String getCommand(DownloadScheme scheme, String project) {
-    return "git clone " + scheme.getUrl(project);
+    return "git clone " + QuoteUtil.quote(scheme.getUrl(project));
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java
index 087ef50..d55a2ed 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/CloneWithCommitMsgHook.java
@@ -55,7 +55,7 @@
       return new StringBuilder()
           .append(super.getCommand(scheme, project))
           .append(" && (cd ")
-          .append(projectName)
+          .append(QuoteUtil.quote((projectName)))
           .append(" && ")
           .append(configCommand)
           .append(")")
@@ -77,11 +77,9 @@
           .append(":")
           .append(HOOK)
           .append(" ")
-          .append(projectName)
-          .append("/.git/hooks/");
-
+          .append(QuoteUtil.quote(projectName + "/.git/hooks/"));
       if (extraCommand != null) {
-        b.append(" && (cd ").append(projectName).append(" && ").append(extraCommand).append(")");
+        b.append(" && (cd ").append(QuoteUtil.quote(projectName)).append(" && ").append(extraCommand).append(")");
       }
       return b.toString();
     }
@@ -90,7 +88,7 @@
       return new StringBuilder()
           .append(super.getCommand(scheme, project))
           .append(" && (cd ")
-          .append(projectName)
+          .append(QuoteUtil.quote(projectName))
           .append(" && mkdir -p .git/hooks")
           .append(" && curl -Lo")
           .append(TARGET)
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 9ca69ce..a65b5e1 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
@@ -33,6 +33,10 @@
 
   @Override
   String getCommand(String url, String ref) {
-    return "git fetch " + url + " " + ref + " && git format-patch -1 --stdout FETCH_HEAD";
+    return "git fetch "
+        + QuoteUtil.quote(url)
+        + " "
+        + ref
+        + " && git format-patch -1 --stdout FETCH_HEAD";
   }
 }
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 5544925..d93f6b6 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
@@ -33,6 +33,6 @@
 
   @Override
   String getCommand(String url, String ref) {
-    return "git pull " + url + " " + ref;
+    return "git pull " + QuoteUtil.quote(url) + " " + ref;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/QuoteUtil.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/QuoteUtil.java
new file mode 100644
index 0000000..e3c73f8
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/QuoteUtil.java
@@ -0,0 +1,24 @@
+// Copyright (C) 2018 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;
+
+public class QuoteUtil {
+
+  private QuoteUtil() {}
+
+  public static String quote(String string) {
+    return "\"" + string + "\"";
+  }
+}
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 4322f76..b0abf9c 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
@@ -25,7 +25,7 @@
     if (scheme instanceof RepoScheme) {
       String id = trim(ref);
       if (id != null) {
-        return "repo download " + scheme.getUrl(project) + " " + id;
+        return "repo download " + QuoteUtil.quote(scheme.getUrl(project)) + " " + id;
       }
     }
     return null;