diff options
Diffstat (limited to 'git_config.py')
| -rw-r--r-- | git_config.py | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/git_config.py b/git_config.py index 9ddb2edc..ed5a44a4 100644 --- a/git_config.py +++ b/git_config.py | |||
| @@ -16,7 +16,8 @@ | |||
| 16 | import os | 16 | import os |
| 17 | import re | 17 | import re |
| 18 | import sys | 18 | import sys |
| 19 | from error import GitError | 19 | from urllib2 import urlopen, HTTPError |
| 20 | from error import GitError, UploadError | ||
| 20 | from git_command import GitCommand | 21 | from git_command import GitCommand |
| 21 | 22 | ||
| 22 | R_HEADS = 'refs/heads/' | 23 | R_HEADS = 'refs/heads/' |
| @@ -261,6 +262,45 @@ class Remote(object): | |||
| 261 | self.projectname = self._Get('projectname') | 262 | self.projectname = self._Get('projectname') |
| 262 | self.fetch = map(lambda x: RefSpec.FromString(x), | 263 | self.fetch = map(lambda x: RefSpec.FromString(x), |
| 263 | self._Get('fetch', all=True)) | 264 | self._Get('fetch', all=True)) |
| 265 | self._review_protocol = None | ||
| 266 | |||
| 267 | @property | ||
| 268 | def ReviewProtocol(self): | ||
| 269 | if self._review_protocol is None: | ||
| 270 | if self.review is None: | ||
| 271 | return None | ||
| 272 | |||
| 273 | u = self.review | ||
| 274 | if not u.startswith('http:') and not u.startswith('https:'): | ||
| 275 | u = 'http://%s' % u | ||
| 276 | if not u.endswith('/'): | ||
| 277 | u += '/' | ||
| 278 | u += 'ssh_info' | ||
| 279 | |||
| 280 | try: | ||
| 281 | info = urlopen(u).read() | ||
| 282 | if info == 'NOT_AVAILABLE': | ||
| 283 | raise UploadError('Upload over ssh unavailable') | ||
| 284 | |||
| 285 | self._review_protocol = 'ssh' | ||
| 286 | self._review_host = info.split(" ")[0] | ||
| 287 | self._review_port = info.split(" ")[1] | ||
| 288 | |||
| 289 | except HTTPError, e: | ||
| 290 | if e.code == 404: | ||
| 291 | self._review_protocol = 'http-post' | ||
| 292 | else: | ||
| 293 | raise UploadError('Cannot guess Gerrit version') | ||
| 294 | return self._review_protocol | ||
| 295 | |||
| 296 | def SshReviewUrl(self, userEmail): | ||
| 297 | if self.ReviewProtocol != 'ssh': | ||
| 298 | return None | ||
| 299 | return 'ssh://%s@%s:%s/%s' % ( | ||
| 300 | userEmail.split("@")[0], | ||
| 301 | self._review_host, | ||
| 302 | self._review_port, | ||
| 303 | self.projectname) | ||
| 264 | 304 | ||
| 265 | def ToLocal(self, rev): | 305 | def ToLocal(self, rev): |
| 266 | """Convert a remote revision string to something we have locally. | 306 | """Convert a remote revision string to something we have locally. |
