Allow arguments in local client binary path overrides.
authorJelmer Vernooij <jelmer@jelmer.uk>
Sun, 6 Sep 2015 22:07:33 +0000 (22:07 +0000)
committerJelmer Vernooij <jelmer@jelmer.uk>
Sun, 6 Sep 2015 22:07:33 +0000 (22:07 +0000)
NEWS
dulwich/client.py
dulwich/tests/test_client.py

diff --git a/NEWS b/NEWS
index 1ebcf2d19e9defb2dfe7eed6102ef8236cb4b1a9..a9de48bc6244c13de78dbbf75700a5c1438f9025 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -23,6 +23,9 @@
 
   * Avoid recursion limit issues resolving deltas. (William Grant, #81)
 
+  * Allow arguments in local client binary path overrides.
+    (Jelmer Vernooij)
+
 0.10.1  2015-03-25
 
  BUG FIXES
index d48761fb38939d0c224cb47fc6ee92756f4ceea5..ada7d2c60c85bf2a7d789d0ebe6caf099d054318 100644 (file)
@@ -42,6 +42,7 @@ from contextlib import closing
 from io import BytesIO, BufferedReader
 import dulwich
 import select
+import shlex
 import socket
 import subprocess
 import sys
@@ -976,13 +977,13 @@ class SSHGitClient(TraditionalGitClient):
 
     def _get_cmd_path(self, cmd):
         cmd = cmd.decode('ascii')
-        return self.alternative_paths.get(cmd, 'git-' + cmd)
+        return shlex.split(self.alternative_paths.get(cmd, 'git-' + cmd))
 
     def _connect(self, cmd, path):
         if path.startswith("/~"):
             path = path[1:]
         con = get_ssh_vendor().run_command(
-            self.host, [self._get_cmd_path(cmd), path],
+            self.host, self._get_cmd_path(cmd) + [path],
             port=self.port, username=self.username)
         return (Protocol(con.read, con.write, con.close,
                          report_activity=self._report_activity),
index 38195632ef54fbade61950466d94bc45512183c9..095866b99fced4f6d914d96e9587e1abcf8c75d5 100644 (file)
@@ -527,13 +527,19 @@ class SSHGitClientTests(TestCase):
         client.get_ssh_vendor = self.real_vendor
 
     def test_default_command(self):
-        self.assertEqual('git-upload-pack',
+        self.assertEqual(['git-upload-pack'],
                 self.client._get_cmd_path(b'upload-pack'))
 
     def test_alternative_command_path(self):
         self.client.alternative_paths['upload-pack'] = (
             '/usr/lib/git/git-upload-pack')
-        self.assertEqual('/usr/lib/git/git-upload-pack',
+        self.assertEqual(['/usr/lib/git/git-upload-pack'],
+            self.client._get_cmd_path(b'upload-pack'))
+
+    def test_alternative_command_path_spaces(self):
+        self.client.alternative_paths['upload-pack'] = (
+            '/usr/lib/git/git-upload-pack -ibla')
+        self.assertEqual(['/usr/lib/git/git-upload-pack', '-ibla'],
             self.client._get_cmd_path(b'upload-pack'))
 
     def test_connect(self):