diff --git a/rhodecode/lib/middleware/simplegit.py b/rhodecode/lib/middleware/simplegit.py --- a/rhodecode/lib/middleware/simplegit.py +++ b/rhodecode/lib/middleware/simplegit.py @@ -76,7 +76,8 @@ class SimpleGit(simplevcs.SimpleVCS): return 'pull' def _create_wsgi_app(self, repo_path, repo_name, config): - return self.scm_app.create_git_wsgi_app(repo_path, repo_name, config) + return self.scm_app.create_git_wsgi_app( + repo_path, repo_name, config, self.SCM) def _create_config(self, extras, repo_name): extras['git_update_server_info'] = utils2.str2bool( diff --git a/rhodecode/lib/middleware/simplehg.py b/rhodecode/lib/middleware/simplehg.py --- a/rhodecode/lib/middleware/simplehg.py +++ b/rhodecode/lib/middleware/simplehg.py @@ -71,7 +71,8 @@ class SimpleHg(simplevcs.SimpleVCS): return 'pull' def _create_wsgi_app(self, repo_path, repo_name, config): - return self.scm_app.create_hg_wsgi_app(repo_path, repo_name, config) + return self.scm_app.create_hg_wsgi_app( + repo_path, repo_name, config, self.SCM) def _create_config(self, extras, repo_name): config = utils.make_db_config(repo=repo_name) diff --git a/rhodecode/lib/middleware/utils/scm_app.py b/rhodecode/lib/middleware/utils/scm_app.py --- a/rhodecode/lib/middleware/utils/scm_app.py +++ b/rhodecode/lib/middleware/utils/scm_app.py @@ -34,7 +34,7 @@ HG_REMOTE_WSGI = None GIT_REMOTE_WSGI = None -def create_git_wsgi_app(repo_path, repo_name, config): +def create_git_wsgi_app(repo_path, repo_name, config, backend): """ Return a WSGI app backed by a remote app to handle Git. @@ -45,10 +45,10 @@ def create_git_wsgi_app(repo_path, repo_ log.error('Pyro server has not been initialized yet') return wsgi_app_caller_client.RemoteAppCaller( - factory, repo_path, repo_name, config) + factory, backend, repo_path, repo_name, config) -def create_hg_wsgi_app(repo_path, repo_name, config): +def create_hg_wsgi_app(repo_path, repo_name, config, backend): """ Return a WSGI app backed by a remote app to handle Mercurial. @@ -60,4 +60,4 @@ def create_hg_wsgi_app(repo_path, repo_n log.error('Pyro server has not been initialized yet') return wsgi_app_caller_client.RemoteAppCaller( - factory, repo_path, repo_name, config) + factory, backend, repo_path, repo_name, config) diff --git a/rhodecode/lib/middleware/utils/scm_app_http.py b/rhodecode/lib/middleware/utils/scm_app_http.py --- a/rhodecode/lib/middleware/utils/scm_app_http.py +++ b/rhodecode/lib/middleware/utils/scm_app_http.py @@ -37,14 +37,14 @@ import rhodecode log = logging.getLogger(__name__) -def create_git_wsgi_app(repo_path, repo_name, config): +def create_git_wsgi_app(repo_path, repo_name, config, backend): url = _vcs_streaming_url() + 'git/' - return VcsHttpProxy(url, repo_path, repo_name, config, 'git') + return VcsHttpProxy(url, repo_path, repo_name, config, backend) -def create_hg_wsgi_app(repo_path, repo_name, config): +def create_hg_wsgi_app(repo_path, repo_name, config, backend): url = _vcs_streaming_url() + 'hg/' - return VcsHttpProxy(url, repo_path, repo_name, config, 'hg') + return VcsHttpProxy(url, repo_path, repo_name, config, backend) def _vcs_streaming_url(): diff --git a/rhodecode/lib/middleware/utils/wsgi_app_caller_client.py b/rhodecode/lib/middleware/utils/wsgi_app_caller_client.py --- a/rhodecode/lib/middleware/utils/wsgi_app_caller_client.py +++ b/rhodecode/lib/middleware/utils/wsgi_app_caller_client.py @@ -56,16 +56,18 @@ class RemoteAppCaller(object): It first cleans the environment, so as to reduce the data transferred. """ - def __init__(self, remote_wsgi, *args, **kwargs): + def __init__(self, remote_wsgi, backend, *args, **kwargs): """ :param remote_wsgi: The remote wsgi object that creates a WSGIAppCaller. This object has to have a handle method, with the signature: handle(environ, start_response, *args, **kwargs) + :param backend: Key (str) of the SCM backend that is in use. :param args: args to be passed to the app creation :param kwargs: kwargs to be passed to the app creation """ self._remote_wsgi = remote_wsgi + self._backend = backend self._args = args self._kwargs = kwargs @@ -92,6 +94,10 @@ class RemoteAppCaller(object): data, status, headers = self._remote_wsgi.handle( clean_environ, input_data, *self._args, **self._kwargs) + # Add custom response header to indicate that this is a VCS response + # and which backend is used. + headers.append(('X-RhodeCode-Backend', self._backend)) + log.debug("Got result from proxy, returning to WSGI container") start_response(status, headers) diff --git a/rhodecode/tests/lib/middleware/mock_scm_app.py b/rhodecode/tests/lib/middleware/mock_scm_app.py --- a/rhodecode/tests/lib/middleware/mock_scm_app.py +++ b/rhodecode/tests/lib/middleware/mock_scm_app.py @@ -27,11 +27,11 @@ for testing purposes. import mock -def create_git_wsgi_app(repo_path, repo_name, config): +def create_git_wsgi_app(repo_path, repo_name, config, backend): return mock_git_wsgi -def create_hg_wsgi_app(repo_path, repo_name, config): +def create_hg_wsgi_app(repo_path, repo_name, config, backend): return mock_hg_wsgi