##// END OF EJS Templates
configurable locking codes....
marcink -
r3522:7174ee85 beta
parent child Browse files
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, datetime_to_time
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