changeset 7631:98deccab042c stable

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.
author Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
date Wed, 10 Apr 2019 21:54:50 +0200
parents 953047e8c88a
children dd88fd3a45cc
files kallithea/model/scm.py
diffstat 1 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/model/scm.py	Mon Apr 01 20:06:41 2019 +0200
+++ b/kallithea/model/scm.py	Wed Apr 10 21:54:50 2019 +0200
@@ -720,6 +720,17 @@
 
         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.
+        return (sys.executable
+                or 'python2')
+
     def install_git_hooks(self, repo, force_create=False):
         """
         Creates a kallithea hook inside a git repository
@@ -734,11 +745,11 @@
         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')
         )