Use plain sh for the pre-commit script

Bash is currently a dependency of pre-commit. It is only used in the
pre-commit script, and the only bash-specific feature that is used is a
single array.

Use the `args` array instead, which works on plain sh (e.g.: POSIX sh).
This change drops bash as a runtime dependency.

Tested with busybox sh(ash) and OpenBSD's sh(ksh).
This commit is contained in:
Hugo Osvaldo Barrera 2025-03-03 10:33:59 +01:00
parent 7b88c63ae6
commit b748138ed6
2 changed files with 7 additions and 13 deletions

View file

@ -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)