File tree Expand file tree Collapse file tree 4 files changed +51
-5
lines changed
Expand file tree Collapse file tree 4 files changed +51
-5
lines changed Original file line number Diff line number Diff line change 11import multiprocessing
22import os
33import random
4+ import re
45from typing import Any
56from typing import List
67from typing import Optional
1011from typing import TYPE_CHECKING
1112
1213import pre_commit .constants as C
14+ from pre_commit import parse_shebang
1315from pre_commit .hook import Hook
1416from pre_commit .prefix import Prefix
1517from pre_commit .util import cmd_output_b
2022
2123FIXED_RANDOM_SEED = 1542676187
2224
25+ SHIMS_RE = re .compile (r'[/\\]shims[/\\]' )
26+
27+
28+ def exe_exists (exe : str ) -> bool :
29+ # 1. exe exists
30+ # 2. it does not have /shims/ as a path segment
31+ # 3. it is not in the home directory
32+ found = parse_shebang .find_executable (exe )
33+ homedir = os .path .expanduser ('~' )
34+ if found is None : # exe exists
35+ return False
36+ elif SHIMS_RE .search (found ): # it is not in a /shims/ directory
37+ return False
38+ elif os .path .commonpath ((homedir , found )) == homedir : # not in homedir
39+ return False
40+ else :
41+ return True
42+
2343
2444def run_setup_cmd (prefix : Prefix , cmd : Tuple [str , ...]) -> None :
2545 cmd_output_b (* cmd , cwd = prefix .prefix_dir )
Original file line number Diff line number Diff line change 77from typing import Tuple
88
99import pre_commit .constants as C
10- from pre_commit import parse_shebang
1110from pre_commit .envcontext import envcontext
1211from pre_commit .envcontext import PatchesT
1312from pre_commit .envcontext import UNSET
@@ -30,7 +29,7 @@ def get_default_version() -> str:
3029 return C .DEFAULT
3130 # if node is already installed, we can save a bunch of setup time by
3231 # using the installed version
33- elif all (parse_shebang . find_executable (exe ) for exe in ('node' , 'npm' )):
32+ elif all (helpers . exe_exists (exe ) for exe in ('node' , 'npm' )):
3433 return 'system'
3534 else :
3635 return C .DEFAULT
Original file line number Diff line number Diff line change 88from typing import Tuple
99
1010import pre_commit .constants as C
11- from pre_commit import parse_shebang
1211from pre_commit .envcontext import envcontext
1312from pre_commit .envcontext import PatchesT
1413from pre_commit .envcontext import UNSET
2625
2726@functools .lru_cache (maxsize = 1 )
2827def get_default_version () -> str :
29- if all (parse_shebang . find_executable (exe ) for exe in ('ruby' , 'gem' )):
28+ if all (helpers . exe_exists (exe ) for exe in ('ruby' , 'gem' )):
3029 return 'system'
3130 else :
3231 return C .DEFAULT
Original file line number Diff line number Diff line change 11import multiprocessing
2- import os
2+ import os . path
33import sys
44from unittest import mock
55
66import pytest
77
88import pre_commit .constants as C
9+ from pre_commit import parse_shebang
910from pre_commit .languages import helpers
1011from pre_commit .prefix import Prefix
1112from pre_commit .util import CalledProcessError
1213from testing .auto_namedtuple import auto_namedtuple
1314
1415
16+ @pytest .fixture
17+ def find_exe_mck ():
18+ with mock .patch .object (parse_shebang , 'find_executable' ) as mck :
19+ yield mck
20+
21+
22+ def test_exe_exists_does_not_exist (find_exe_mck ):
23+ find_exe_mck .return_value = None
24+ assert helpers .exe_exists ('ruby' ) is False
25+
26+
27+ def test_exe_exists_exists (find_exe_mck ):
28+ find_exe_mck .return_value = '/usr/bin/ruby'
29+ assert helpers .exe_exists ('ruby' ) is True
30+
31+
32+ def test_exe_exists_false_if_shim (find_exe_mck ):
33+ find_exe_mck .return_value = '/foo/shims/ruby'
34+ assert helpers .exe_exists ('ruby' ) is False
35+
36+
37+ def test_exe_exists_false_if_homedir (find_exe_mck ):
38+ find_exe_mck .return_value = '/home/me/somedir/ruby'
39+ with mock .patch .object (os .path , 'expanduser' , return_value = '/home/me' ):
40+ assert helpers .exe_exists ('ruby' ) is False
41+
42+
1543def test_basic_get_default_version ():
1644 assert helpers .basic_get_default_version () == C .DEFAULT
1745
You can’t perform that action at this time.
0 commit comments