Parcourir la source

Allow arguments in local client binary path overrides.

Jelmer Vernooij il y a 9 ans
Parent
commit
e5e210fe72
3 fichiers modifiés avec 14 ajouts et 4 suppressions
  1. 3 0
      NEWS
  2. 3 2
      dulwich/client.py
  3. 8 2
      dulwich/tests/test_client.py

+ 3 - 0
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

+ 3 - 2
dulwich/client.py

@@ -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),

+ 8 - 2
dulwich/tests/test_client.py

@@ -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):