1{ lib, fetchPypi, buildPythonPackage, pythonOlder
2, aspy-yaml
3, cached-property
4, cfgv
5, futures
6, identify
7, importlib-metadata
8, importlib-resources
9, isPy27
10, nodeenv
11, python
12, six
13, toml
14, virtualenv
15}:
16
17buildPythonPackage rec {
18 pname = "pre-commit";
19 version = "2.7.1";
20 disabled = isPy27;
21
22 src = fetchPypi {
23 inherit version;
24 pname = "pre_commit";
25 sha256 = "0w2a104yhbw1z92rcwpq0gdjsxvr2bwx5ry5xhlf2psnfkjx6ky5";
26 };
27
28 patches = [
29 ./hook-tmpl-use-the-hardcoded-path-to-pre-commit.patch
30 ./languages-use-the-hardcoded-path-to-python-binaries.patch
31 ];
32
33 propagatedBuildInputs = [
34 aspy-yaml
35 cached-property
36 cfgv
37 identify
38 nodeenv
39 six
40 toml
41 virtualenv
42 ] ++ lib.optional (pythonOlder "3.8") importlib-metadata
43 ++ lib.optional (pythonOlder "3.7") importlib-resources;
44
45 # slow and impure
46 doCheck = false;
47
48 preFixup = ''
49 substituteInPlace $out/${python.sitePackages}/pre_commit/resources/hook-tmpl \
50 --subst-var-by pre-commit $out
51 substituteInPlace $out/${python.sitePackages}/pre_commit/languages/python.py \
52 --subst-var-by virtualenv ${virtualenv}
53 substituteInPlace $out/${python.sitePackages}/pre_commit/languages/node.py \
54 --subst-var-by nodeenv ${nodeenv}
55 '';
56
57 meta = with lib; {
58 description = "A framework for managing and maintaining multi-language pre-commit hooks";
59 homepage = "https://pre-commit.com/";
60 license = licenses.mit;
61 maintainers = with maintainers; [ borisbabic ];
62 };
63}