diff options
author | Conley Owens <cco3@android.com> | 2011-09-26 16:34:01 -0700 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2011-09-28 10:07:01 -0700 |
commit | db728cd866d4950779620993e12e76f09eb6e2ee (patch) | |
tree | 3a0fb3eb745da641f18dbea75e6bef0c7001f4a4 /manifest_xml.py | |
parent | c4657969ebd3ec6bf28a37b6a53360314a01be73 (diff) | |
download | git-repo-db728cd866d4950779620993e12e76f09eb6e2ee.tar.gz |
Allow remote url to be relative to manifst url
Diffstat (limited to 'manifest_xml.py')
-rw-r--r-- | manifest_xml.py | 25 |
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 | ||
16 | import os | 16 | import os |
17 | import re | ||
17 | import sys | 18 | import sys |
19 | import urlparse | ||
18 | import xml.dom.minidom | 20 | import xml.dom.minidom |
19 | 21 | ||
20 | from git_config import GitConfig, IsId | 22 | from git_config import GitConfig, IsId |
@@ -24,6 +26,9 @@ from error import ManifestParseError | |||
24 | MANIFEST_FILE_NAME = 'manifest.xml' | 26 | MANIFEST_FILE_NAME = 'manifest.xml' |
25 | LOCAL_MANIFEST_NAME = 'local_manifest.xml' | 27 | LOCAL_MANIFEST_NAME = 'local_manifest.xml' |
26 | 28 | ||
29 | urlparse.uses_relative.extend(['ssh', 'git']) | ||
30 | urlparse.uses_netloc.extend(['ssh', 'git']) | ||
31 | |||
27 | class _Default(object): | 32 | class _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 | ||
50 | class XmlManifest(object): | 61 | class 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 | """ |