<div dir="ltr"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El jue., 4 abr. 2019 a las 0:41, Mads Kiilerich (<<a href="mailto:mads@kiilerich.com">mads@kiilerich.com</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 4/3/19 10:28 PM, Thomas De Schampheleire wrote:<br>
> # HG changeset patch<br>
> # User Thomas De Schampheleire <<a href="mailto:thomas.de_schampheleire@nokia.com" target="_blank">thomas.de_schampheleire@nokia.com</a>><br>
> # Date 1554320638 -7200<br>
> #      Wed Apr 03 21:43:58 2019 +0200<br>
> # Branch stable<br>
> # Node ID 8d7e20c6980cd4e27eeafa15f574d929d836dd76<br>
> # Parent  953047e8c88a9c5ccaa4ddc1bb417622de37f01f<br>
> hooks: add intermediate function _get_python_executable<br>
><br>
> ... to avoid code duplication.<br>
<br>
<br>
(and to give a place where we easily can tweak the heurstics)<br>
<br>
<br>
> diff --git a/kallithea/model/scm.py b/kallithea/model/scm.py<br>
> --- a/kallithea/model/scm.py<br>
> +++ b/kallithea/model/scm.py<br>
> @@ -720,6 +720,10 @@ class ScmModel(object):<br>
>   <br>
>           return choices, hist_l<br>
>   <br>
> +    def _get_python_executable(self):<br>
> +        """Return a Python executable for use in hooks."""<br>
<br>
<br>
Perhaps clarify "suitable to be written in the posix #! line for Git <br>
hook scripts so they invoke Kallithea code with the right interpreter <br>
and in the right environment".<br>
<br>
<br>
> +        return sys.executable or 'python2'<br>
> +<br>
>       def install_git_hooks(self, repo, force_create=False):<br>
>           """<br>
>           Creates a kallithea hook inside a git repository<br>
> @@ -734,11 +738,11 @@ class ScmModel(object):<br>
>           if not os.path.isdir(loc):<br>
>               os.makedirs(loc)<br>
>   <br>
> -        tmpl_post = "#!/usr/bin/env %s\n" % sys.executable or 'python2'<br>
> +        tmpl_post = "#!/usr/bin/env %s\n" % self._get_python_executable()<br>
<br>
<br>
Also, can you remind me (and perhaps clarify in code): #! paths are only <br>
used on posix. How does this work on Windows? Or is that covered by <br>
tribal "Don't use Git on Windows" knowledge? Especially: With git having <br>
one hardcoded executable name for each hook, how does it generally work <br>
finding the right hook script interpreter when Windows doesn't use #! paths?<br></blockquote><div><br></div><div>After some searching, it seems that git hooks on windows magically work with #!/bin/bash, and that to get python hooks working you should create a shell wrapper script.</div><div>See <a href="https://stackoverflow.com/questions/9308119/git-cannot-execute-python-script-as-hook">https://stackoverflow.com/questions/9308119/git-cannot-execute-python-script-as-hook</a></div><div>So if this is correct (I was too lazy to test it now) then git hooks don't work yet on windows anyway. We could treat it as a future feature to implement, but as there is no-one that requested it yet, I guess it's not a very high priority.<br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
(Also, AFAIK, /usr/bin/env is really mainly for searching in PATH so we <br>
don't have to specify full path. If we specify full paths, it thus seems <br>
a bit wrong to use env? That is an old thing that we don't have to care <br>
about now, but perhaps keep it in mind if it pops up now.)<br></blockquote><div><br></div><div>Yes, but if we fallback to 'python2' then we actually need 'env'. So, maybe we should do something like self.get_python_executable() or sys.executable or '/usr/bin/env python2'.<br></div></div></div></div>