From 1882d20155ba10982e76856c0433de7690a574b4 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sat, 1 Feb 2020 10:05:42 -0800 Subject: [PATCH] pre-commit: installed git hook should have full path to binary (#77638) pre-commit currently install impure Git hooks that look for the `pre-commit` binary in PATH. If the user has `pre-commit` loaded via a nix-shell instead of having it installed then GUI editors, such as Intellij, won't be able to use Git commit because the hook fails trying to look for the `pre-commit` binary in PATH. This patch updates the hook template to use the hardcoded path to the `pre-commit` binary if it was found, fallback to using the one from PATH. --- .../python-modules/pre-commit/default.nix | 10 ++++++++ ...use-the-hardcoded-path-to-pre-commit.patch | 25 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 pkgs/development/python-modules/pre-commit/hook-tmpl-use-the-hardcoded-path-to-pre-commit.patch diff --git a/pkgs/development/python-modules/pre-commit/default.nix b/pkgs/development/python-modules/pre-commit/default.nix index d3808bbb9110..963aa19653b5 100644 --- a/pkgs/development/python-modules/pre-commit/default.nix +++ b/pkgs/development/python-modules/pre-commit/default.nix @@ -7,6 +7,7 @@ , importlib-metadata , importlib-resources , nodeenv +, python , six , toml , virtualenv @@ -22,6 +23,10 @@ buildPythonApplication rec { sha256 = "0l5qg1cw4a0670m96s0ryy5mqz5aslfrrnwpriqgmrnsgdixhj4g"; }; + patches = [ + ./hook-tmpl-use-the-hardcoded-path-to-pre-commit.patch + ]; + propagatedBuildInputs = [ aspy-yaml cached-property @@ -38,6 +43,11 @@ buildPythonApplication rec { # slow and impure doCheck = false; + preFixup = '' + substituteInPlace $out/${python.sitePackages}/pre_commit/resources/hook-tmpl \ + --subst-var-by pre-commit $out + ''; + meta = with lib; { description = "A framework for managing and maintaining multi-language pre-commit hooks"; homepage = https://pre-commit.com/; diff --git a/pkgs/development/python-modules/pre-commit/hook-tmpl-use-the-hardcoded-path-to-pre-commit.patch b/pkgs/development/python-modules/pre-commit/hook-tmpl-use-the-hardcoded-path-to-pre-commit.patch new file mode 100644 index 000000000000..23115bbbd20f --- /dev/null +++ b/pkgs/development/python-modules/pre-commit/hook-tmpl-use-the-hardcoded-path-to-pre-commit.patch @@ -0,0 +1,25 @@ +From d9e6999e32112602ec276634cb004eda3ca64ec3 Mon Sep 17 00:00:00 2001 +From: "Wael M. Nasreddine" +Date: Mon, 13 Jan 2020 11:04:58 -0800 +Subject: [PATCH] hook-tmpl: use the hardcoded path to pre-commit, if found + +--- + pre_commit/resources/hook-tmpl | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/pre_commit/resources/hook-tmpl b/pre_commit/resources/hook-tmpl +index 213d16e..3a99211 100755 +--- a/pre_commit/resources/hook-tmpl ++++ b/pre_commit/resources/hook-tmpl +@@ -107,6 +107,8 @@ def _exe() -> Tuple[str, ...]: + except OSError: + pass + ++ if os.path.isfile('@pre-commit@/bin/pre-commit') and os.access('@pre-commit@/bin/pre-commit', os.X_OK): ++ return ('@pre-commit@/bin/pre-commit', 'run') + if distutils.spawn.find_executable('pre-commit'): + return ('pre-commit', 'run') + +-- +2.23.1 +