summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--git_config.py52
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/'
24R_TAGS = 'refs/tags/' 24R_TAGS = 'refs/tags/'
25ID_RE = re.compile('^[0-9a-f]{40}$') 25ID_RE = re.compile('^[0-9a-f]{40}$')
26 26
27REVIEW_CACHE = dict()
28
27def IsId(rev): 29def 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):