diff --git a/pre_commit/commands/install_uninstall.py b/pre_commit/commands/install_uninstall.py index d19e0d47..be22b056 100644 --- a/pre_commit/commands/install_uninstall.py +++ b/pre_commit/commands/install_uninstall.py @@ -94,17 +94,10 @@ def _install_hook_script( before, rest = contents.split(TEMPLATE_START) _, after = rest.split(TEMPLATE_END) - # on windows always use `/bin/sh` since `bash` might not be on PATH - # though we use bash-specific features `sh` on windows is actually - # bash in "POSIXLY_CORRECT" mode which still supports the features we - # use: subshells / arrays - if sys.platform == 'win32': # pragma: win32 cover - hook_file.write('#!/bin/sh\n') - hook_file.write(before + TEMPLATE_START) hook_file.write(f'INSTALL_PYTHON={shlex.quote(sys.executable)}\n') args_s = shlex.join(args) - hook_file.write(f'ARGS=({args_s})\n') + hook_file.write(f"ARGS='{args_s}'\n") hook_file.write(TEMPLATE_END + after) make_executable(hook_path) diff --git a/pre_commit/resources/hook-tmpl b/pre_commit/resources/hook-tmpl index 53d29f95..beb483cf 100755 --- a/pre_commit/resources/hook-tmpl +++ b/pre_commit/resources/hook-tmpl @@ -1,19 +1,20 @@ -#!/usr/bin/env bash +#!/bin/sh # File generated by pre-commit: https://pre-commit.com # ID: 138fd403232d2ddd5efb44317e38bf03 # start templated INSTALL_PYTHON='' -ARGS=(hook-impl) +ARGS="hook-impl" # end templated HERE="$(cd "$(dirname "$0")" && pwd)" -ARGS+=(--hook-dir "$HERE" -- "$@") +set -- $ARGS --hook-dir "$HERE" -- "$@" if [ -x "$INSTALL_PYTHON" ]; then - exec "$INSTALL_PYTHON" -mpre_commit "${ARGS[@]}" + exec "$INSTALL_PYTHON" -mpre_commit "$@" + elif command -v pre-commit > /dev/null; then - exec pre-commit "${ARGS[@]}" + exec pre-commit "$@" else echo '`pre-commit` not found. Did you forget to activate your virtualenv?' 1>&2 exit 1