Show More
@@ -26,6 +26,7 b" It's implemented with basic auth functio" | |||
|
26 | 26 | import os |
|
27 | 27 | import logging |
|
28 | 28 | import importlib |
|
29 | import re | |
|
29 | 30 | from functools import wraps |
|
30 | 31 | |
|
31 | 32 | from paste.httpheaders import REMOTE_USER, AUTH_TYPE |
@@ -104,6 +105,31 b' class SimpleVCS(object):' | |||
|
104 | 105 | auth_ret_code_detection) |
|
105 | 106 | self.ip_addr = '0.0.0.0' |
|
106 | 107 | |
|
108 | def set_repo_names(self, environ): | |
|
109 | """ | |
|
110 | This will populate the attributes acl_repo_name, url_repo_name and | |
|
111 | vcs_repo_name on the current instance. | |
|
112 | """ | |
|
113 | # TODO: martinb: Move to class or module scope. | |
|
114 | pr_regex = re.compile( | |
|
115 | '(?P<base_name>(?:[\w-]+)(?:/[\w-]+)*)/' | |
|
116 | '(?P<repo_name>[\w-]+)' | |
|
117 | '/pull-request/(?P<pr_id>\d+)/repository') | |
|
118 | ||
|
119 | self.url_repo_name = self._get_repository_name(environ) | |
|
120 | match = pr_regex.match(self.url_repo_name) | |
|
121 | ||
|
122 | if match: | |
|
123 | match_dict = match.groupdict() | |
|
124 | self.acl_repo_name = '{base_name}/{repo_name}'.format(**match_dict) | |
|
125 | self.vcs_repo_name = '{base_name}/.__shadow_{repo_name}_pr-{pr_id}'.format( | |
|
126 | **match_dict) | |
|
127 | self.pr_id = match_dict.get('pr_id') | |
|
128 | else: | |
|
129 | self.acl_repo_name = self.url_repo_name | |
|
130 | self.vcs_repo_name = self.url_repo_name | |
|
131 | self.pr_id = None | |
|
132 | ||
|
107 | 133 | @property |
|
108 | 134 | def repo_name(self): |
|
109 | 135 | # TODO: johbo: Remove, switch to correct repo name attribute |
@@ -175,52 +175,37 b' class VCSMiddleware(object):' | |||
|
175 | 175 | # translate the _REPO_ID into real repo NAME for usage |
|
176 | 176 | # in middleware |
|
177 | 177 | environ['PATH_INFO'] = vcs_handler._get_by_id(environ['PATH_INFO']) |
|
178 | repo_name = vcs_handler._get_repository_name(environ) | |
|
179 | 178 | |
|
180 | acl_repo_name = repo_name | |
|
181 |
vcs_ |
|
|
182 | url_repo_name = repo_name | |
|
183 | pr_id = None | |
|
184 | ||
|
185 | pr_regex = re.compile( | |
|
186 | '(?P<base_name>(?:[\w-]+)(?:/[\w-]+)*)/' | |
|
187 | '(?P<repo_name>[\w-]+)' | |
|
188 | '/pull-request/(?P<pr_id>\d+)/repository') | |
|
189 | match = pr_regex.match(repo_name) | |
|
190 | if match: | |
|
191 | match_dict = match.groupdict() | |
|
192 | pr_id = match_dict.get('pr_id') | |
|
193 | acl_repo_name = '{base_name}/{repo_name}'.format(**match_dict) | |
|
194 | vcs_repo_name = '{base_name}/.__shadow_{repo_name}_pr-{pr_id}'.format( | |
|
195 | **match_dict) | |
|
196 | ||
|
179 | # Set repo names for permission checks, vcs and web interaction. | |
|
180 | vcs_handler.set_repo_names(environ) | |
|
197 | 181 | log.debug('repo_names %s', { |
|
198 | 'acl_repo_name': acl_repo_name, | |
|
199 | 'vcs_repo_name': vcs_repo_name, | |
|
200 | 'url_repo_name': url_repo_name, | |
|
182 | 'acl_repo_name': vcs_handler.acl_repo_name, | |
|
183 | 'vcs_repo_name': vcs_handler.vcs_repo_name, | |
|
184 | 'url_repo_name': vcs_handler.url_repo_name, | |
|
201 | 185 | }) |
|
202 | log.debug('pull_request %s', pr_id) | |
|
186 | log.debug('pull_request %s', vcs_handler.pr_id) | |
|
203 | 187 | |
|
204 | 188 | # check for type, presence in database and on filesystem |
|
205 | 189 | if not vcs_handler.is_valid_and_existing_repo( |
|
206 | acl_repo_name, vcs_handler.basepath, vcs_handler.SCM): | |
|
190 | vcs_handler.acl_repo_name, | |
|
191 | vcs_handler.basepath, | |
|
192 | vcs_handler.SCM): | |
|
207 | 193 | return HTTPNotFound()(environ, start_response) |
|
208 | 194 | |
|
209 | 195 | # TODO: johbo: Needed for the Pyro4 backend and Mercurial only. |
|
210 | 196 | # Remove once we fully switched to the HTTP backend. |
|
211 | environ['REPO_NAME'] = url_repo_name | |
|
197 | environ['REPO_NAME'] = vcs_handler.url_repo_name | |
|
212 | 198 | |
|
213 |
# register repo |
|
|
214 |
vcs_handler. |
|
|
215 |
vcs_handler. |
|
|
216 | vcs_handler.vcs_repo_name = vcs_repo_name | |
|
217 | vcs_handler.pr_id = pr_id | |
|
218 | vcs_handler.repo_vcs_config = self.vcs_config(acl_repo_name) | |
|
199 | # register repo config back to the handler | |
|
200 | vcs_handler.repo_vcs_config = self.vcs_config( | |
|
201 | vcs_handler.acl_repo_name) | |
|
219 | 202 | |
|
203 | # Wrap handler in middlewares if they are enabled. | |
|
220 | 204 | vcs_handler = self.wrap_in_gzip_if_enabled( |
|
221 | 205 | vcs_handler, self.config) |
|
222 | 206 | vcs_handler, _ = wrap_in_appenlight_if_enabled( |
|
223 | 207 | vcs_handler, self.config, self.appenlight_client) |
|
208 | ||
|
224 | 209 | return vcs_handler(environ, start_response) |
|
225 | 210 | |
|
226 | 211 | return self.application(environ, start_response) |
General Comments 0
You need to be logged in to leave comments.
Login now