about summary refs log tree commit diff
path: root/pkgs/tools/misc/pre-commit
diff options
context:
space:
mode:
authorPhillip Cloud <417981+cpcloud@users.noreply.github.com>2021-12-04 09:21:29 -0500
committerRobert Schütz <github@dotlambda.de>2021-12-09 16:13:49 -0800
commit5c22c16c24056bcb060baa0b40aaed3120b517f0 (patch)
tree558986080e2bb4a2fa71e0360835eb8d59ebfeee /pkgs/tools/misc/pre-commit
parent4f6066e5abf0c1a1e73556b33c31c65354ee8fdf (diff)
pre-commit: move out of python3packages
Diffstat (limited to 'pkgs/tools/misc/pre-commit')
-rw-r--r--pkgs/tools/misc/pre-commit/default.nix57
-rw-r--r--pkgs/tools/misc/pre-commit/hook-tmpl.patch15
-rw-r--r--pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch26
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))