Show More
@@ -156,6 +156,11 b' instance_id =' | |||||
156 | ## handling that. Set this variable to 403 to return HTTPForbidden |
|
156 | ## handling that. Set this variable to 403 to return HTTPForbidden | |
157 | auth_ret_code = |
|
157 | auth_ret_code = | |
158 |
|
158 | |||
|
159 | ## locking return code. When repository is locked return this HTTP code. 2XX | |||
|
160 | ## codes don't break the transactions while 4XX codes do | |||
|
161 | lock_ret_code = 423 | |||
|
162 | ||||
|
163 | ||||
159 | #################################### |
|
164 | #################################### | |
160 | ### CELERY CONFIG #### |
|
165 | ### CELERY CONFIG #### | |
161 | #################################### |
|
166 | #################################### |
@@ -156,6 +156,11 b' instance_id =' | |||||
156 | ## handling that. Set this variable to 403 to return HTTPForbidden |
|
156 | ## handling that. Set this variable to 403 to return HTTPForbidden | |
157 | auth_ret_code = |
|
157 | auth_ret_code = | |
158 |
|
158 | |||
|
159 | ## locking return code. When repository is locked return this HTTP code. 2XX | |||
|
160 | ## codes don't break the transactions while 4XX codes do | |||
|
161 | lock_ret_code = 423 | |||
|
162 | ||||
|
163 | ||||
159 | #################################### |
|
164 | #################################### | |
160 | ### CELERY CONFIG #### |
|
165 | ### CELERY CONFIG #### | |
161 | #################################### |
|
166 | #################################### |
@@ -156,6 +156,11 b' instance_id =' | |||||
156 | ## handling that. Set this variable to 403 to return HTTPForbidden |
|
156 | ## handling that. Set this variable to 403 to return HTTPForbidden | |
157 | auth_ret_code = |
|
157 | auth_ret_code = | |
158 |
|
158 | |||
|
159 | ## locking return code. When repository is locked return this HTTP code. 2XX | |||
|
160 | ## codes don't break the transactions while 4XX codes do | |||
|
161 | lock_ret_code = 423 | |||
|
162 | ||||
|
163 | ||||
159 | #################################### |
|
164 | #################################### | |
160 | ### CELERY CONFIG #### |
|
165 | ### CELERY CONFIG #### | |
161 | #################################### |
|
166 | #################################### |
@@ -60,12 +60,17 b' class StatusChangeOnClosedPullRequestErr' | |||||
60 |
|
60 | |||
61 | class HTTPLockedRC(HTTPClientError): |
|
61 | class HTTPLockedRC(HTTPClientError): | |
62 | """ |
|
62 | """ | |
63 | Special Exception For locked Repos in RhodeCode |
|
63 | Special Exception For locked Repos in RhodeCode, the return code can | |
|
64 | be overwritten by _code keyword argument passed into constructors | |||
64 | """ |
|
65 | """ | |
65 | code = 423 |
|
66 | code = 423 | |
66 | title = explanation = 'Repository Locked' |
|
67 | title = explanation = 'Repository Locked' | |
67 |
|
68 | |||
68 | def __init__(self, reponame, username, *args, **kwargs): |
|
69 | def __init__(self, reponame, username, *args, **kwargs): | |
|
70 | from rhodecode import CONFIG | |||
|
71 | from rhodecode.lib.utils2 import safe_int | |||
|
72 | _code = CONFIG.get('lock_ret_code') | |||
|
73 | self.code = safe_int(_code, self.code) | |||
69 | self.title = self.explanation = ('Repository `%s` locked by ' |
|
74 | self.title = self.explanation = ('Repository `%s` locked by ' | |
70 | 'user `%s`' % (reponame, username)) |
|
75 | 'user `%s`' % (reponame, username)) | |
71 | super(HTTPLockedRC, self).__init__(*args, **kwargs) |
|
76 | super(HTTPLockedRC, self).__init__(*args, **kwargs) |
@@ -36,7 +36,7 b' from rhodecode.lib.utils import action_l' | |||||
36 | from rhodecode.lib.vcs.backends.base import EmptyChangeset |
|
36 | from rhodecode.lib.vcs.backends.base import EmptyChangeset | |
37 | from rhodecode.lib.compat import json |
|
37 | from rhodecode.lib.compat import json | |
38 | from rhodecode.lib.exceptions import HTTPLockedRC |
|
38 | from rhodecode.lib.exceptions import HTTPLockedRC | |
39 |
from rhodecode.lib.utils2 import safe_str |
|
39 | from rhodecode.lib.utils2 import safe_str | |
40 | from rhodecode.model.db import Repository, User |
|
40 | from rhodecode.model.db import Repository, User | |
41 |
|
41 | |||
42 |
|
42 | |||
@@ -113,7 +113,14 b' def pre_push(ui, repo, **kwargs):' | |||||
113 | usr = User.get_by_username(username) |
|
113 | usr = User.get_by_username(username) | |
114 | if locked_by[0] and usr.user_id != int(locked_by[0]): |
|
114 | if locked_by[0] and usr.user_id != int(locked_by[0]): | |
115 | locked_by = User.get(locked_by[0]).username |
|
115 | locked_by = User.get(locked_by[0]).username | |
116 | raise HTTPLockedRC(repository, locked_by) |
|
116 | # this exception is interpreted in git/hg middlewares and based | |
|
117 | # on that proper return code is server to client | |||
|
118 | _http_ret = HTTPLockedRC(repository, locked_by) | |||
|
119 | if str(_http_ret.code).startswith('2'): | |||
|
120 | #2xx Codes don't raise exceptions | |||
|
121 | sys.stdout.write(_http_ret.title) | |||
|
122 | else: | |||
|
123 | raise _http_ret | |||
117 |
|
124 | |||
118 |
|
125 | |||
119 | def pre_pull(ui, repo, **kwargs): |
|
126 | def pre_pull(ui, repo, **kwargs): | |
@@ -139,7 +146,14 b' def pre_pull(ui, repo, **kwargs):' | |||||
139 |
|
146 | |||
140 | if locked_by[0]: |
|
147 | if locked_by[0]: | |
141 | locked_by = User.get(locked_by[0]).username |
|
148 | locked_by = User.get(locked_by[0]).username | |
142 | raise HTTPLockedRC(repository, locked_by) |
|
149 | # this exception is interpreted in git/hg middlewares and based | |
|
150 | # on that proper return code is server to client | |||
|
151 | _http_ret = HTTPLockedRC(repository, locked_by) | |||
|
152 | if str(_http_ret.code).startswith('2'): | |||
|
153 | #2xx Codes don't raise exceptions | |||
|
154 | sys.stdout.write(_http_ret.title) | |||
|
155 | else: | |||
|
156 | raise _http_ret | |||
143 |
|
157 | |||
144 |
|
158 | |||
145 | def log_pull_action(ui, repo, **kwargs): |
|
159 | def log_pull_action(ui, repo, **kwargs): | |
@@ -159,12 +173,14 b' def log_pull_action(ui, repo, **kwargs):' | |||||
159 | repository = extras['repository'] |
|
173 | repository = extras['repository'] | |
160 | scm = extras['scm'] |
|
174 | scm = extras['scm'] | |
161 | make_lock = extras['make_lock'] |
|
175 | make_lock = extras['make_lock'] | |
|
176 | locked_by = extras['locked_by'] | |||
162 | ip = extras['ip'] |
|
177 | ip = extras['ip'] | |
163 | elif 'username' in rc_extras: |
|
178 | elif 'username' in rc_extras: | |
164 | username = rc_extras['username'] |
|
179 | username = rc_extras['username'] | |
165 | repository = rc_extras['repository'] |
|
180 | repository = rc_extras['repository'] | |
166 | scm = rc_extras['scm'] |
|
181 | scm = rc_extras['scm'] | |
167 | make_lock = rc_extras['make_lock'] |
|
182 | make_lock = rc_extras['make_lock'] | |
|
183 | locked_by = rc_extras['locked_by'] | |||
168 | ip = rc_extras['ip'] |
|
184 | ip = rc_extras['ip'] | |
169 | else: |
|
185 | else: | |
170 | raise Exception('Missing data in repo.ui and os.environ') |
|
186 | raise Exception('Missing data in repo.ui and os.environ') | |
@@ -185,6 +201,12 b' def log_pull_action(ui, repo, **kwargs):' | |||||
185 | #msg = 'Made lock on repo `%s`' % repository |
|
201 | #msg = 'Made lock on repo `%s`' % repository | |
186 | #sys.stdout.write(msg) |
|
202 | #sys.stdout.write(msg) | |
187 |
|
203 | |||
|
204 | if locked_by[0]: | |||
|
205 | locked_by = User.get(locked_by[0]).username | |||
|
206 | _http_ret = HTTPLockedRC(repository, locked_by) | |||
|
207 | if str(_http_ret.code).startswith('2'): | |||
|
208 | #2xx Codes don't raise exceptions | |||
|
209 | sys.stdout.write(_http_ret.title) | |||
188 | return 0 |
|
210 | return 0 | |
189 |
|
211 | |||
190 |
|
212 | |||
@@ -207,12 +229,14 b' def log_push_action(ui, repo, **kwargs):' | |||||
207 | repository = extras['repository'] |
|
229 | repository = extras['repository'] | |
208 | scm = extras['scm'] |
|
230 | scm = extras['scm'] | |
209 | make_lock = extras['make_lock'] |
|
231 | make_lock = extras['make_lock'] | |
|
232 | locked_by = extras['locked_by'] | |||
210 | action = extras['action'] |
|
233 | action = extras['action'] | |
211 | elif 'username' in rc_extras: |
|
234 | elif 'username' in rc_extras: | |
212 | username = rc_extras['username'] |
|
235 | username = rc_extras['username'] | |
213 | repository = rc_extras['repository'] |
|
236 | repository = rc_extras['repository'] | |
214 | scm = rc_extras['scm'] |
|
237 | scm = rc_extras['scm'] | |
215 | make_lock = rc_extras['make_lock'] |
|
238 | make_lock = rc_extras['make_lock'] | |
|
239 | locked_by = rc_extras['locked_by'] | |||
216 | action = extras['action'] |
|
240 | action = extras['action'] | |
217 | else: |
|
241 | else: | |
218 | raise Exception('Missing data in repo.ui and os.environ') |
|
242 | raise Exception('Missing data in repo.ui and os.environ') | |
@@ -257,6 +281,13 b' def log_push_action(ui, repo, **kwargs):' | |||||
257 | msg = 'Released lock on repo `%s`\n' % repository |
|
281 | msg = 'Released lock on repo `%s`\n' % repository | |
258 | sys.stdout.write(msg) |
|
282 | sys.stdout.write(msg) | |
259 |
|
283 | |||
|
284 | if locked_by[0]: | |||
|
285 | locked_by = User.get(locked_by[0]).username | |||
|
286 | _http_ret = HTTPLockedRC(repository, locked_by) | |||
|
287 | if str(_http_ret.code).startswith('2'): | |||
|
288 | #2xx Codes don't raise exceptions | |||
|
289 | sys.stdout.write(_http_ret.title) | |||
|
290 | ||||
260 | return 0 |
|
291 | return 0 | |
261 |
|
292 | |||
262 |
|
293 |
@@ -234,7 +234,8 b' class SimpleGit(BaseVCSController):' | |||||
234 | app = self.__make_app(repo_name, repo_path, extras) |
|
234 | app = self.__make_app(repo_name, repo_path, extras) | |
235 | return app(environ, start_response) |
|
235 | return app(environ, start_response) | |
236 | except HTTPLockedRC, e: |
|
236 | except HTTPLockedRC, e: | |
237 | log.debug('Repository LOCKED ret code 423!') |
|
237 | _code = CONFIG.get('lock_ret_code') | |
|
238 | log.debug('Repository LOCKED ret code %s!' % (_code)) | |||
238 | return e(environ, start_response) |
|
239 | return e(environ, start_response) | |
239 | except Exception: |
|
240 | except Exception: | |
240 | log.error(traceback.format_exc()) |
|
241 | log.error(traceback.format_exc()) |
@@ -199,7 +199,8 b' class SimpleHg(BaseVCSController):' | |||||
199 | if str(e).find('not found') != -1: |
|
199 | if str(e).find('not found') != -1: | |
200 | return HTTPNotFound()(environ, start_response) |
|
200 | return HTTPNotFound()(environ, start_response) | |
201 | except HTTPLockedRC, e: |
|
201 | except HTTPLockedRC, e: | |
202 | log.debug('Repository LOCKED ret code 423!') |
|
202 | _code = CONFIG.get('lock_ret_code') | |
|
203 | log.debug('Repository LOCKED ret code %s!' % (_code)) | |||
203 | return e(environ, start_response) |
|
204 | return e(environ, start_response) | |
204 | except Exception: |
|
205 | except Exception: | |
205 | log.error(traceback.format_exc()) |
|
206 | log.error(traceback.format_exc()) |
General Comments 0
You need to be logged in to leave comments.
Login now