summaryrefslogtreecommitdiffstats
path: root/manifest_xml.py
diff options
context:
space:
mode:
Diffstat (limited to 'manifest_xml.py')
-rw-r--r--manifest_xml.py25
1 files changed, 19 insertions, 6 deletions
diff --git a/manifest_xml.py b/manifest_xml.py
index a0252057..476472fb 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -14,7 +14,9 @@
14# limitations under the License. 14# limitations under the License.
15 15
16import os 16import os
17import re
17import sys 18import sys
19import urlparse
18import xml.dom.minidom 20import xml.dom.minidom
19 21
20from git_config import GitConfig, IsId 22from git_config import GitConfig, IsId
@@ -24,6 +26,9 @@ from error import ManifestParseError
24MANIFEST_FILE_NAME = 'manifest.xml' 26MANIFEST_FILE_NAME = 'manifest.xml'
25LOCAL_MANIFEST_NAME = 'local_manifest.xml' 27LOCAL_MANIFEST_NAME = 'local_manifest.xml'
26 28
29urlparse.uses_relative.extend(['ssh', 'git'])
30urlparse.uses_netloc.extend(['ssh', 'git'])
31
27class _Default(object): 32class _Default(object):
28 """Project defaults within the manifest.""" 33 """Project defaults within the manifest."""
29 34
@@ -35,16 +40,22 @@ class _XmlRemote(object):
35 def __init__(self, 40 def __init__(self,
36 name, 41 name,
37 fetch=None, 42 fetch=None,
43 manifestUrl=None,
38 review=None): 44 review=None):
39 self.name = name 45 self.name = name
40 self.fetchUrl = fetch 46 self.fetchUrl = fetch
47 self.manifestUrl = manifestUrl
41 self.reviewUrl = review 48 self.reviewUrl = review
42 49
43 def ToRemoteSpec(self, projectName): 50 def ToRemoteSpec(self, projectName):
44 url = self.fetchUrl 51 url = self.fetchUrl.rstrip('/') + '/' + projectName + '.git'
45 while url.endswith('/'): 52 manifestUrl = self.manifestUrl.rstrip('/')
46 url = url[:-1] 53 # urljoin will get confused if there is no scheme in the base url
47 url += '/%s.git' % projectName 54 # ie, if manifestUrl is of the form <hostname:port>
55 if manifestUrl.find(':') != manifestUrl.find('/') - 1:
56 manifestUrl = 'gopher://' + manifestUrl
57 url = urlparse.urljoin(manifestUrl, url)
58 url = re.sub(r'^gopher://', '', url)
48 return RemoteSpec(self.name, url, self.reviewUrl) 59 return RemoteSpec(self.name, url, self.reviewUrl)
49 60
50class XmlManifest(object): 61class XmlManifest(object):
@@ -366,7 +377,8 @@ class XmlManifest(object):
366 377
367 if name is None: 378 if name is None:
368 s = m_url.rindex('/') + 1 379 s = m_url.rindex('/') + 1
369 remote = _XmlRemote('origin', m_url[:s]) 380 manifestUrl = self.manifestProject.config.GetString('remote.origin.url')
381 remote = _XmlRemote('origin', m_url[:s], manifestUrl)
370 name = m_url[s:] 382 name = m_url[s:]
371 383
372 if name.endswith('.git'): 384 if name.endswith('.git'):
@@ -394,7 +406,8 @@ class XmlManifest(object):
394 review = node.getAttribute('review') 406 review = node.getAttribute('review')
395 if review == '': 407 if review == '':
396 review = None 408 review = None
397 return _XmlRemote(name, fetch, review) 409 manifestUrl = self.manifestProject.config.GetString('remote.origin.url')
410 return _XmlRemote(name, fetch, manifestUrl, review)
398 411
399 def _ParseDefault(self, node): 412 def _ParseDefault(self, node):
400 """ 413 """