Merge "Implement Kerberos HTTP authentication handler"
diff --git a/git_config.py b/git_config.py
index f6093a2..af09eba 100644
--- a/git_config.py
+++ b/git_config.py
@@ -576,7 +576,7 @@
return None
u = self.review
- if not u.startswith('http:') and not u.startswith('https:'):
+ if u.split(':')[0] not in ('http', 'https', 'sso'):
u = 'http://%s' % u
if u.endswith('/Gerrit'):
u = u[:len(u) - len('/Gerrit')]
@@ -592,6 +592,9 @@
host, port = os.environ['REPO_HOST_PORT_INFO'].split()
self._review_url = self._SshReviewUrl(userEmail, host, port)
REVIEW_CACHE[u] = self._review_url
+ elif u.startswith('sso:'):
+ self._review_url = u # Assume it's right
+ REVIEW_CACHE[u] = self._review_url
else:
try:
info_url = u + 'ssh_info'
diff --git a/manifest_xml.py b/manifest_xml.py
index f2ac77a..d496337 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -80,18 +80,20 @@
def _resolveFetchUrl(self):
url = self.fetchUrl.rstrip('/')
manifestUrl = self.manifestUrl.rstrip('/')
- p = manifestUrl.startswith('persistent-http')
- if p:
- manifestUrl = manifestUrl[len('persistent-'):]
-
- # urljoin will get confused if there is no scheme in the base url
- # ie, if manifestUrl is of the form <hostname:port>
+ # urljoin will gets confused over quite a few things. The ones we care
+ # about here are:
+ # * no scheme in the base url, like <hostname:port>
+ # * persistent-https://
+ # We handle this by replacing these with obscure protocols
+ # and then replacing them with the original when we are done.
+ # gopher -> <none>
+ # wais -> persistent-https
if manifestUrl.find(':') != manifestUrl.find('/') - 1:
manifestUrl = 'gopher://' + manifestUrl
+ manifestUrl = re.sub(r'^persistent-https://', 'wais://', manifestUrl)
url = urllib.parse.urljoin(manifestUrl, url)
url = re.sub(r'^gopher://', '', url)
- if p:
- url = 'persistent-' + url
+ url = re.sub(r'^wais://', 'persistent-https://', url)
return url
def ToRemoteSpec(self, projectName):