# HG changeset patch # User Marcin Kuzminski # Date 2012-02-27 06:46:52 # Node ID 320806ff6be21d7a8f4adcb36bb6fa494309372f # Parent 6aa328b903a54cc856c35ddc44587e8ae839d89f fixes git-protocol with diff --git a/docs/changelog.rst b/docs/changelog.rst --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -17,6 +17,7 @@ news fixes +++++ +- fixed git protocol issues with repos-groups 1.3.1 (**2012-02-27**) ---------------------- 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 @@ -25,6 +25,7 @@ # along with this program. If not, see . import os +import re import logging import traceback @@ -79,6 +80,9 @@ from webob.exc import HTTPNotFound, HTTP log = logging.getLogger(__name__) +GIT_PROTO_PAT = re.compile(r'git-upload-pack|git-receive-pack|info\/refs') + + def is_git(environ): """Returns True if request's target is git server. ``HTTP_USER_AGENT`` would then have git client version given. @@ -219,12 +223,16 @@ class SimpleGit(BaseVCSController): try: environ['PATH_INFO'] = self._get_by_id(environ['PATH_INFO']) repo_name = '/'.join(environ['PATH_INFO'].split('/')[1:]) + repo_name = GIT_PROTO_PAT.split(repo_name) + if repo_name: + repo_name = repo_name[0] + if repo_name.endswith('/'): repo_name = repo_name.rstrip('/') except: log.error(traceback.format_exc()) raise - repo_name = repo_name.split('/')[0] + return repo_name def __get_user(self, username):