diff options
author | Phillip Cloud <417981+cpcloud@users.noreply.github.com> | 2021-12-04 09:21:29 -0500 |
---|---|---|
committer | Robert Schütz <github@dotlambda.de> | 2021-12-09 16:13:49 -0800 |
commit | 5c22c16c24056bcb060baa0b40aaed3120b517f0 (patch) | |
tree | 558986080e2bb4a2fa71e0360835eb8d59ebfeee /pkgs/tools/misc/pre-commit | |
parent | 4f6066e5abf0c1a1e73556b33c31c65354ee8fdf (diff) |
pre-commit: move out of python3packages
Diffstat (limited to 'pkgs/tools/misc/pre-commit')
3 files changed, 98 insertions, 0 deletions
diff --git a/pkgs/tools/misc/pre-commit/default.nix b/pkgs/tools/misc/pre-commit/default.nix new file mode 100644 index 0000000000000..41d3ecf17872c --- /dev/null +++ b/pkgs/tools/misc/pre-commit/default.nix @@ -0,0 +1,57 @@ +{ lib, python3Packages }: + +with python3Packages; +buildPythonPackage rec { + pname = "pre-commit"; + version = "2.16.0"; + format = "setuptools"; + + disabled = pythonOlder "3.6"; + + src = fetchPypi { + inherit version; + pname = "pre_commit"; + sha256 = "sha256-/piXysgwqnFk29AqTnuQyuSWMEUc6IRkvKc9tIa6n2U="; + }; + + patches = [ + ./languages-use-the-hardcoded-path-to-python-binaries.patch + ./hook-tmpl.patch + ]; + + propagatedBuildInputs = [ + cfgv + identify + nodeenv + pyyaml + toml + virtualenv + ] ++ lib.optional (pythonOlder "3.8") [ + importlib-metadata + ] ++ lib.optional (pythonOlder "3.7") [ + importlib-resources + ]; + + # slow and impure + doCheck = false; + + preFixup = '' + substituteInPlace $out/${python.sitePackages}/pre_commit/resources/hook-tmpl \ + --subst-var-by pre-commit $out + substituteInPlace $out/${python.sitePackages}/pre_commit/languages/python.py \ + --subst-var-by virtualenv ${virtualenv} + substituteInPlace $out/${python.sitePackages}/pre_commit/languages/node.py \ + --subst-var-by nodeenv ${nodeenv} + ''; + + pythonImportsCheck = [ + "pre_commit" + ]; + + meta = with lib; { + description = "A framework for managing and maintaining multi-language pre-commit hooks"; + homepage = "https://pre-commit.com/"; + license = licenses.mit; + maintainers = with maintainers; [ borisbabic ]; + }; +} diff --git a/pkgs/tools/misc/pre-commit/hook-tmpl.patch b/pkgs/tools/misc/pre-commit/hook-tmpl.patch new file mode 100644 index 0000000000000..1d5fd17274baa --- /dev/null +++ b/pkgs/tools/misc/pre-commit/hook-tmpl.patch @@ -0,0 +1,15 @@ +diff --git a/pre_commit/resources/hook-tmpl b/pre_commit/resources/hook-tmpl +index 53d29f9..66a8ad3 100755 +--- a/pre_commit/resources/hook-tmpl ++++ b/pre_commit/resources/hook-tmpl +@@ -10,9 +10,7 @@ ARGS=(hook-impl) + HERE="$(cd "$(dirname "$0")" && pwd)" + ARGS+=(--hook-dir "$HERE" -- "$@") + +-if [ -x "$INSTALL_PYTHON" ]; then +- exec "$INSTALL_PYTHON" -mpre_commit "${ARGS[@]}" +-elif command -v pre-commit > /dev/null; then ++if command -v pre-commit > /dev/null; then + exec pre-commit "${ARGS[@]}" + else + echo '`pre-commit` not found. Did you forget to activate your virtualenv?' 1>&2 diff --git a/pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch b/pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch new file mode 100644 index 0000000000000..6d274aae3c073 --- /dev/null +++ b/pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch @@ -0,0 +1,26 @@ +diff --git a/pre_commit/languages/node.py b/pre_commit/languages/node.py +index 26f4919..4885ec1 100644 +--- a/pre_commit/languages/node.py ++++ b/pre_commit/languages/node.py +@@ -82,7 +82,7 @@ def install_environment( + envdir = fr'\\?\{os.path.normpath(envdir)}' + with clean_path_on_failure(envdir): + cmd = [ +- sys.executable, '-mnodeenv', '--prebuilt', '--clean-src', envdir, ++ '@nodeenv@/bin/nodeenv', '--prebuilt', '--clean-src', envdir, + ] + if version != C.DEFAULT: + cmd.extend(['-n', version]) +diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py +index 43b7280..f0f2338 100644 +--- a/pre_commit/languages/python.py ++++ b/pre_commit/languages/python.py +@@ -192,7 +192,7 @@ def install_environment( + additional_dependencies: Sequence[str], + ) -> None: + envdir = prefix.path(helpers.environment_dir(ENVIRONMENT_DIR, version)) +- venv_cmd = [sys.executable, '-mvirtualenv', envdir] ++ venv_cmd = ['@virtualenv@/bin/virtualenv', envdir] + python = norm_version(version) + if python is not None: + venv_cmd.extend(('-p', python)) |