diff options
-rw-r--r-- | git_config.py | 52 |
1 files changed, 33 insertions, 19 deletions
diff --git a/git_config.py b/git_config.py index 4829e2d3..1d45d92f 100644 --- a/git_config.py +++ b/git_config.py | |||
@@ -24,6 +24,8 @@ R_HEADS = 'refs/heads/' | |||
24 | R_TAGS = 'refs/tags/' | 24 | R_TAGS = 'refs/tags/' |
25 | ID_RE = re.compile('^[0-9a-f]{40}$') | 25 | ID_RE = re.compile('^[0-9a-f]{40}$') |
26 | 26 | ||
27 | REVIEW_CACHE = dict() | ||
28 | |||
27 | def IsId(rev): | 29 | def IsId(rev): |
28 | return ID_RE.match(rev) | 30 | return ID_RE.match(rev) |
29 | 31 | ||
@@ -280,25 +282,37 @@ class Remote(object): | |||
280 | u += '/' | 282 | u += '/' |
281 | u += 'ssh_info' | 283 | u += 'ssh_info' |
282 | 284 | ||
283 | try: | 285 | if u in REVIEW_CACHE: |
284 | info = urlopen(u).read() | 286 | info = REVIEW_CACHE[u] |
285 | if info == 'NOT_AVAILABLE': | 287 | self._review_protocol = info[0] |
286 | raise UploadError('Upload over ssh unavailable') | 288 | self._review_host = info[1] |
287 | if '<' in info: | 289 | self._review_port = info[2] |
288 | # Assume the server gave us some sort of HTML | 290 | else: |
289 | # response back, like maybe a login page. | 291 | try: |
290 | # | 292 | info = urlopen(u).read() |
291 | raise UploadError('Cannot read %s:\n%s' % (u, info)) | 293 | if info == 'NOT_AVAILABLE': |
292 | 294 | raise UploadError('Upload over ssh unavailable') | |
293 | self._review_protocol = 'ssh' | 295 | if '<' in info: |
294 | self._review_host = info.split(" ")[0] | 296 | # Assume the server gave us some sort of HTML |
295 | self._review_port = info.split(" ")[1] | 297 | # response back, like maybe a login page. |
296 | 298 | # | |
297 | except HTTPError, e: | 299 | raise UploadError('Cannot read %s:\n%s' % (u, info)) |
298 | if e.code == 404: | 300 | |
299 | self._review_protocol = 'http-post' | 301 | self._review_protocol = 'ssh' |
300 | else: | 302 | self._review_host = info.split(" ")[0] |
301 | raise UploadError('Cannot guess Gerrit version') | 303 | self._review_port = info.split(" ")[1] |
304 | except HTTPError, e: | ||
305 | if e.code == 404: | ||
306 | self._review_protocol = 'http-post' | ||
307 | self._review_host = None | ||
308 | self._review_port = None | ||
309 | else: | ||
310 | raise UploadError('Cannot guess Gerrit version') | ||
311 | |||
312 | REVIEW_CACHE[u] = ( | ||
313 | self._review_protocol, | ||
314 | self._review_host, | ||
315 | self._review_port) | ||
302 | return self._review_protocol | 316 | return self._review_protocol |
303 | 317 | ||
304 | def SshReviewUrl(self, userEmail): | 318 | def SshReviewUrl(self, userEmail): |