diff --git a/rhodecode/apps/ssh_support/lib/backends/base.py b/rhodecode/apps/ssh_support/lib/backends/base.py --- a/rhodecode/apps/ssh_support/lib/backends/base.py +++ b/rhodecode/apps/ssh_support/lib/backends/base.py @@ -118,6 +118,7 @@ class VcsServer(object): if extras: scm_data.update(extras) os.putenv("RC_SCM_DATA", json.dumps(scm_data)) + return scm_data def get_root_store(self): root_store = self.store diff --git a/rhodecode/apps/ssh_support/lib/backends/git.py b/rhodecode/apps/ssh_support/lib/backends/git.py --- a/rhodecode/apps/ssh_support/lib/backends/git.py +++ b/rhodecode/apps/ssh_support/lib/backends/git.py @@ -16,10 +16,11 @@ # RhodeCode Enterprise Edition, including its added features, Support services, # and proprietary license terms, please see https://rhodecode.com/licenses/ -import os import sys import logging +import subprocess +from vcsserver import hooks from .base import VcsServer log = logging.getLogger(__name__) @@ -50,9 +51,22 @@ class GitTunnelWrapper(object): if exit_code: return exit_code - self.server.update_environment(action=action, extras=extras) + scm_extras = self.server.update_environment(action=action, extras=extras) + + hook_response = hooks.git_pre_pull(scm_extras) + pre_pull_messages = hook_response.output + sys.stdout.write(pre_pull_messages) + self.create_hooks_env() - return os.system(self.command()) + result = subprocess.run(self.command(), shell=True) + result = result.returncode + + # Upload-pack == clone + if action == "pull": + hook_response = hooks.git_post_pull(scm_extras) + post_pull_messages = hook_response.output + sys.stderr.write(post_pull_messages) + return result class GitServer(VcsServer):