[PATCH 1 of 6 v3] hooks: add intermediate function _get_git_hook_interpreter

Thomas De Schampheleire patrickdepinguin at gmail.com
Mon Apr 8 20:14:52 UTC 2019


# HG changeset patch
# User Thomas De Schampheleire <thomas.de_schampheleire at nokia.com>
# Date 1554320638 -7200
#      Wed Apr 03 21:43:58 2019 +0200
# Branch stable
# Node ID a4ad7b50bab39a528ac147ae3f50791434313127
# Parent  953047e8c88a9c5ccaa4ddc1bb417622de37f01f
hooks: add intermediate function _get_git_hook_interpreter

The logic to determine the right interpreter for Git hooks is about to
change and possibly become more complex.
Split it off in a separate function so such changes do not require extra
code duplication and preserve the readability of the code.

diff --git a/kallithea/model/scm.py b/kallithea/model/scm.py
--- a/kallithea/model/scm.py
+++ b/kallithea/model/scm.py
@@ -720,6 +720,18 @@ class ScmModel(object):
 
         return choices, hist_l
 
+    def _get_git_hook_interpreter(self):
+        """Return a suitable interpreter for Git hooks.
+
+        Return a suitable string to be written in the POSIX #! shebang line for
+        Git hook scripts so they invoke Kallithea code with the right Python
+        interpreter and in the right environment.
+
+        FIXME This may not work on Windows and may need a shell wrapper script.
+        To be revisited later...
+        """
+        return sys.executable or 'python2'
+
     def install_git_hooks(self, repo, force_create=False):
         """
         Creates a kallithea hook inside a git repository
@@ -734,11 +746,11 @@ class ScmModel(object):
         if not os.path.isdir(loc):
             os.makedirs(loc)
 
-        tmpl_post = "#!/usr/bin/env %s\n" % sys.executable or 'python2'
+        tmpl_post = "#!/usr/bin/env %s\n" % self._get_git_hook_interpreter()
         tmpl_post += pkg_resources.resource_string(
             'kallithea', os.path.join('config', 'post_receive_tmpl.py')
         )
-        tmpl_pre = "#!/usr/bin/env %s\n" % sys.executable or 'python2'
+        tmpl_pre = "#!/usr/bin/env %s\n" % self._get_git_hook_interpreter()
         tmpl_pre += pkg_resources.resource_string(
             'kallithea', os.path.join('config', 'pre_receive_tmpl.py')
         )


More information about the kallithea-general mailing list