瀏覽代碼

Replace "which" calls with the portable find_executable function

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 9 年之前
父節點
當前提交
d2fb146913
共有 3 個文件被更改,包括 9 次插入9 次删除
  1. 3 3
      compose/cli/errors.py
  2. 3 3
      compose/cli/main.py
  3. 3 3
      tests/unit/cli/errors_test.py

+ 3 - 3
compose/cli/errors.py

@@ -4,6 +4,7 @@ from __future__ import unicode_literals
 import contextlib
 import logging
 import socket
+from distutils.spawn import find_executable
 from textwrap import dedent
 
 from docker.errors import APIError
@@ -13,7 +14,6 @@ from requests.exceptions import SSLError
 from requests.packages.urllib3.exceptions import ReadTimeoutError
 
 from ..const import API_VERSION_TO_ENGINE_VERSION
-from .utils import call_silently
 from .utils import is_docker_for_mac_installed
 from .utils import is_mac
 from .utils import is_ubuntu
@@ -90,11 +90,11 @@ def exit_with_error(msg):
 
 
 def get_conn_error_message(url):
-    if call_silently(['which', 'docker']) != 0:
+    if find_executable('docker') is None:
         return docker_not_found_msg("Couldn't connect to Docker daemon.")
     if is_docker_for_mac_installed():
         return conn_error_docker_for_mac
-    if call_silently(['which', 'docker-machine']) == 0:
+    if find_executable('docker-machine') is not None:
         return conn_error_docker_machine
     return conn_error_generic.format(url=url)
 

+ 3 - 3
compose/cli/main.py

@@ -10,6 +10,7 @@ import pipes
 import re
 import subprocess
 import sys
+from distutils.spawn import find_executable
 from inspect import getdoc
 from operator import attrgetter
 
@@ -1063,9 +1064,8 @@ def exit_if(condition, message, exit_code):
 
 
 def call_docker(args):
-    try:
-        executable_path = subprocess.check_output(["which", "docker"]).strip()
-    except subprocess.CalledProcessError:
+    executable_path = find_executable('docker')
+    if not executable_path:
         raise UserError(errors.docker_not_found_msg("Couldn't find `docker` binary."))
 
     args = [executable_path] + args

+ 3 - 3
tests/unit/cli/errors_test.py

@@ -16,9 +16,9 @@ def mock_logging():
         yield mock_log
 
 
-def patch_call_silently(side_effect):
+def patch_find_executable(side_effect):
     return mock.patch(
-        'compose.cli.errors.call_silently',
+        'compose.cli.errors.find_executable',
         autospec=True,
         side_effect=side_effect)
 
@@ -27,7 +27,7 @@ class TestHandleConnectionErrors(object):
 
     def test_generic_connection_error(self, mock_logging):
         with pytest.raises(errors.ConnectionError):
-            with patch_call_silently([0, 1]):
+            with patch_find_executable(['/bin/docker', None]):
                 with handle_connection_errors(mock.Mock()):
                     raise ConnectionError()