Show More
@@ -20,7 +20,7 b' fixes' | |||||
20 | - fixed git protocol issues with repos-groups |
|
20 | - fixed git protocol issues with repos-groups | |
21 | - fixed git remote repos validator that prevented from cloning remote git repos |
|
21 | - fixed git remote repos validator that prevented from cloning remote git repos | |
22 | - fixes #370 ending slashes fixes for repo and groups |
|
22 | - fixes #370 ending slashes fixes for repo and groups | |
23 |
|
|
23 | - fixes #368 improved git-protocol detection to handle other clients | |
24 | - fixes #366 When Setting Repository Group To Blank Repo Group Wont Be |
|
24 | - fixes #366 When Setting Repository Group To Blank Repo Group Wont Be | |
25 | Moved To Root |
|
25 | Moved To Root | |
26 |
|
26 |
@@ -80,24 +80,20 b' from webob.exc import HTTPNotFound, HTTP' | |||||
80 | log = logging.getLogger(__name__) |
|
80 | log = logging.getLogger(__name__) | |
81 |
|
81 | |||
82 |
|
82 | |||
83 |
GIT_PROTO_PAT = re.compile(r'git-upload-pack|git-receive-pack |
|
83 | GIT_PROTO_PAT = re.compile(r'^/(.+)/(info/refs|git-upload-pack|git-receive-pack)') | |
84 |
|
84 | |||
85 |
|
85 | |||
86 | def is_git(environ): |
|
86 | def is_git(environ): | |
87 | """Returns True if request's target is git server. |
|
87 | path_info = environ['PATH_INFO'] | |
88 | ``HTTP_USER_AGENT`` would then have git client version given. |
|
88 | isgit_path = GIT_PROTO_PAT.match(path_info) | |
89 |
|
89 | log.debug('is a git path %s pathinfo : %s' % (isgit_path, path_info)) | ||
90 | :param environ: |
|
90 | return isgit_path | |
91 | """ |
|
|||
92 | http_user_agent = environ.get('HTTP_USER_AGENT') |
|
|||
93 | if http_user_agent and http_user_agent.startswith('git'): |
|
|||
94 | return True |
|
|||
95 | return False |
|
|||
96 |
|
91 | |||
97 |
|
92 | |||
98 | class SimpleGit(BaseVCSController): |
|
93 | class SimpleGit(BaseVCSController): | |
99 |
|
94 | |||
100 | def _handle_request(self, environ, start_response): |
|
95 | def _handle_request(self, environ, start_response): | |
|
96 | ||||
101 | if not is_git(environ): |
|
97 | if not is_git(environ): | |
102 | return self.application(environ, start_response) |
|
98 | return self.application(environ, start_response) | |
103 |
|
99 | |||
@@ -222,13 +218,7 b' class SimpleGit(BaseVCSController):' | |||||
222 | """ |
|
218 | """ | |
223 | try: |
|
219 | try: | |
224 | environ['PATH_INFO'] = self._get_by_id(environ['PATH_INFO']) |
|
220 | environ['PATH_INFO'] = self._get_by_id(environ['PATH_INFO']) | |
225 |
repo_name = |
|
221 | repo_name = GIT_PROTO_PAT.match(environ['PATH_INFO']).group(1) | |
226 | repo_name = GIT_PROTO_PAT.split(repo_name) |
|
|||
227 | if repo_name: |
|
|||
228 | repo_name = repo_name[0] |
|
|||
229 |
|
||||
230 | if repo_name.endswith('/'): |
|
|||
231 | repo_name = repo_name.rstrip('/') |
|
|||
232 | except: |
|
222 | except: | |
233 | log.error(traceback.format_exc()) |
|
223 | log.error(traceback.format_exc()) | |
234 | raise |
|
224 | raise | |
@@ -239,8 +229,7 b' class SimpleGit(BaseVCSController):' | |||||
239 | return User.get_by_username(username) |
|
229 | return User.get_by_username(username) | |
240 |
|
230 | |||
241 | def __get_action(self, environ): |
|
231 | def __get_action(self, environ): | |
242 | """ |
|
232 | """Maps git request commands into a pull or push command. | |
243 | Maps git request commands into a pull or push command. |
|
|||
244 |
|
233 | |||
245 | :param environ: |
|
234 | :param environ: | |
246 | """ |
|
235 | """ |
General Comments 0
You need to be logged in to leave comments.
Login now