<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El sáb., 6 abr. 2019 a las 20:25, Thomas De Schampheleire (<<a href="mailto:patrickdepinguin@gmail.com">patrickdepinguin@gmail.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"><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" target="_blank">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" target="_blank">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></div></blockquote><div><br></div><div>Hm, I now realize that it's actually dulwich and not git that is invoked, but as far as I can see it is just invoking the hook via subprocess, so I think the conclusion remains.<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"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div></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>
</blockquote></div></div>