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 | |
| parent | c4657969ebd3ec6bf28a37b6a53360314a01be73 (diff) | |
| download | git-repo-db728cd866d4950779620993e12e76f09eb6e2ee.tar.gz | |
Allow remote url to be relative to manifst url
| -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 | """ |
