mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-17 08:14:42 +04:00
Pick a better python shebang for hook executable
This commit is contained in:
parent
748c2ad273
commit
de942894ff
2 changed files with 33 additions and 0 deletions
|
|
@ -8,6 +8,7 @@ import sys
|
||||||
|
|
||||||
from pre_commit import git
|
from pre_commit import git
|
||||||
from pre_commit import output
|
from pre_commit import output
|
||||||
|
from pre_commit.languages import python
|
||||||
from pre_commit.repository import repositories
|
from pre_commit.repository import repositories
|
||||||
from pre_commit.util import cmd_output
|
from pre_commit.util import cmd_output
|
||||||
from pre_commit.util import make_executable
|
from pre_commit.util import make_executable
|
||||||
|
|
@ -43,6 +44,16 @@ def is_our_script(filename):
|
||||||
return any(h in contents for h in (CURRENT_HASH,) + PRIOR_HASHES)
|
return any(h in contents for h in (CURRENT_HASH,) + PRIOR_HASHES)
|
||||||
|
|
||||||
|
|
||||||
|
def shebang():
|
||||||
|
if sys.platform == 'win32':
|
||||||
|
py = 'python'
|
||||||
|
else:
|
||||||
|
py = python.get_default_version()
|
||||||
|
if py == 'default':
|
||||||
|
py = 'python'
|
||||||
|
return '#!/usr/bin/env {}'.format(py)
|
||||||
|
|
||||||
|
|
||||||
def install(
|
def install(
|
||||||
runner, store, overwrite=False, hooks=False, hook_type='pre-commit',
|
runner, store, overwrite=False, hooks=False, hook_type='pre-commit',
|
||||||
skip_on_missing_conf=False,
|
skip_on_missing_conf=False,
|
||||||
|
|
@ -84,6 +95,8 @@ def install(
|
||||||
before, rest = contents.split(TEMPLATE_START)
|
before, rest = contents.split(TEMPLATE_START)
|
||||||
to_template, after = rest.split(TEMPLATE_END)
|
to_template, after = rest.split(TEMPLATE_END)
|
||||||
|
|
||||||
|
before = before.replace('#!/usr/bin/env python', shebang())
|
||||||
|
|
||||||
hook_file.write(before + TEMPLATE_START)
|
hook_file.write(before + TEMPLATE_START)
|
||||||
for line in to_template.splitlines():
|
for line in to_template.splitlines():
|
||||||
var = line.split()[0]
|
var = line.split()[0]
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,9 @@ from pre_commit.commands.install_uninstall import install
|
||||||
from pre_commit.commands.install_uninstall import install_hooks
|
from pre_commit.commands.install_uninstall import install_hooks
|
||||||
from pre_commit.commands.install_uninstall import is_our_script
|
from pre_commit.commands.install_uninstall import is_our_script
|
||||||
from pre_commit.commands.install_uninstall import PRIOR_HASHES
|
from pre_commit.commands.install_uninstall import PRIOR_HASHES
|
||||||
|
from pre_commit.commands.install_uninstall import shebang
|
||||||
from pre_commit.commands.install_uninstall import uninstall
|
from pre_commit.commands.install_uninstall import uninstall
|
||||||
|
from pre_commit.languages import python
|
||||||
from pre_commit.runner import Runner
|
from pre_commit.runner import Runner
|
||||||
from pre_commit.util import cmd_output
|
from pre_commit.util import cmd_output
|
||||||
from pre_commit.util import make_executable
|
from pre_commit.util import make_executable
|
||||||
|
|
@ -45,6 +47,24 @@ def test_is_previous_pre_commit(tmpdir):
|
||||||
assert is_our_script(f.strpath)
|
assert is_our_script(f.strpath)
|
||||||
|
|
||||||
|
|
||||||
|
def test_shebang_windows():
|
||||||
|
with mock.patch.object(sys, 'platform', 'win32'):
|
||||||
|
assert shebang() == '#!/usr/bin/env python'
|
||||||
|
|
||||||
|
|
||||||
|
def test_shebang_otherwise():
|
||||||
|
with mock.patch.object(sys, 'platform', 'posix'):
|
||||||
|
assert 'default' not in shebang()
|
||||||
|
|
||||||
|
|
||||||
|
def test_shebang_returns_default():
|
||||||
|
with mock.patch.object(sys, 'platform', 'posix'):
|
||||||
|
with mock.patch.object(
|
||||||
|
python, 'get_default_version', return_value='default',
|
||||||
|
):
|
||||||
|
assert shebang() == '#!/usr/bin/env python'
|
||||||
|
|
||||||
|
|
||||||
def test_install_pre_commit(tempdir_factory, store):
|
def test_install_pre_commit(tempdir_factory, store):
|
||||||
path = git_dir(tempdir_factory)
|
path = git_dir(tempdir_factory)
|
||||||
runner = Runner(path, C.CONFIG_FILE)
|
runner = Runner(path, C.CONFIG_FILE)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue