mirror of
https://github.com/pypa/pip
synced 2023-12-13 21:30:23 +01:00
Merged pull request #265 from pnasrat/issue-233-find_command-pathext.
Correct handling of default pathext case
This commit is contained in:
commit
98947e0016
|
@ -76,7 +76,8 @@ def find_command(cmd, paths=None, pathext=None):
|
||||||
paths = [paths]
|
paths = [paths]
|
||||||
# check if there are funny path extensions for executables, e.g. Windows
|
# check if there are funny path extensions for executables, e.g. Windows
|
||||||
if pathext is None:
|
if pathext is None:
|
||||||
pathext = os.environ.get('PATHEXT', '.COM;.EXE;.BAT;.CMD')
|
default_pathext = os.pathsep.join([ '.COM', '.EXE', '.BAT', '.CMD' ])
|
||||||
|
pathext = os.environ.get('PATHEXT', default_pathext)
|
||||||
pathext = [ext for ext in pathext.lower().split(os.pathsep)]
|
pathext = [ext for ext in pathext.lower().split(os.pathsep)]
|
||||||
# don't use extensions if the command ends with one of them
|
# don't use extensions if the command ends with one of them
|
||||||
if os.path.splitext(cmd)[1].lower() in pathext:
|
if os.path.splitext(cmd)[1].lower() in pathext:
|
||||||
|
|
|
@ -6,8 +6,9 @@ import sys
|
||||||
from os.path import abspath, join, curdir, pardir
|
from os.path import abspath, join, curdir, pardir
|
||||||
|
|
||||||
from nose import SkipTest
|
from nose import SkipTest
|
||||||
|
from mock import Mock, patch
|
||||||
|
|
||||||
from pip.util import rmtree
|
from pip.util import rmtree, find_command
|
||||||
|
|
||||||
from tests.test_pip import (here, reset_env, run_pip, pyversion, mkdir,
|
from tests.test_pip import (here, reset_env, run_pip, pyversion, mkdir,
|
||||||
src_folder, write_file)
|
src_folder, write_file)
|
||||||
|
@ -521,6 +522,26 @@ def test_find_command_folder_in_path():
|
||||||
mkdir(path_one/'foo')
|
mkdir(path_one/'foo')
|
||||||
mkdir('path_two'); path_two = env.scratch_path/'path_two'
|
mkdir('path_two'); path_two = env.scratch_path/'path_two'
|
||||||
write_file(path_two/'foo', '# nothing')
|
write_file(path_two/'foo', '# nothing')
|
||||||
from pip.util import find_command
|
|
||||||
found_path = find_command('foo', map(str, [path_one, path_two]))
|
found_path = find_command('foo', map(str, [path_one, path_two]))
|
||||||
assert found_path == path_two/'foo'
|
assert found_path == path_two/'foo'
|
||||||
|
|
||||||
|
@patch('os.path.isfile')
|
||||||
|
def test_find_command_trys_all_pathext(mock_isfile):
|
||||||
|
"""
|
||||||
|
If no pathext should check default list of extensions, if file does not
|
||||||
|
exist.
|
||||||
|
"""
|
||||||
|
mock_isfile.return_value = False
|
||||||
|
# Patching os.pathsep failed on type checking
|
||||||
|
old_sep = os.pathsep
|
||||||
|
os.pathsep = ':'
|
||||||
|
|
||||||
|
found_path = find_command('foo', 'path_one')
|
||||||
|
|
||||||
|
paths = [ 'path_one/foo.com', 'path_one/foo.exe', 'path_one/foo.bat',
|
||||||
|
'path_one/foo.cmd', 'path_one/foo' ]
|
||||||
|
expected = [ ((p,),) for p in paths ]
|
||||||
|
assert found_path is None, "Should not find path"
|
||||||
|
assert mock_isfile.call_args_list == expected, "%s" % (mock_isfile.call_args_list,)
|
||||||
|
|
||||||
|
os.pathsep = old_sep
|
||||||
|
|
Loading…
Reference in a new issue