Correctly name projects when mirroring

A bug introduced by relative urls caused projects such as manifest.git
to be placed in the root directory instead of the directory they should
by in.

This fix creates and refers to a resolvedFetchUrl in the _XmlRemote
class in order to get a fetchUrl that is never relative.
This commit is contained in:
Conley Owens 2011-10-20 10:45:47 -07:00 committed by Shawn O. Pearce
parent b660539c4a
commit ceea368e88

View File

@ -46,16 +46,20 @@ class _XmlRemote(object):
self.fetchUrl = fetch self.fetchUrl = fetch
self.manifestUrl = manifestUrl self.manifestUrl = manifestUrl
self.reviewUrl = review self.reviewUrl = review
self.resolvedFetchUrl = self._resolveFetchUrl()
def ToRemoteSpec(self, projectName): def _resolveFetchUrl(self):
url = self.fetchUrl.rstrip('/') + '/' + projectName + '.git' url = self.fetchUrl.rstrip('/')
manifestUrl = self.manifestUrl.rstrip('/') manifestUrl = self.manifestUrl.rstrip('/')
# urljoin will get confused if there is no scheme in the base url # urljoin will get confused if there is no scheme in the base url
# ie, if manifestUrl is of the form <hostname:port> # ie, if manifestUrl is of the form <hostname:port>
if manifestUrl.find(':') != manifestUrl.find('/') - 1: if manifestUrl.find(':') != manifestUrl.find('/') - 1:
manifestUrl = 'gopher://' + manifestUrl manifestUrl = 'gopher://' + manifestUrl
url = urlparse.urljoin(manifestUrl, url) url = urlparse.urljoin(manifestUrl, url)
url = re.sub(r'^gopher://', '', url) return re.sub(r'^gopher://', '', url)
def ToRemoteSpec(self, projectName):
url = self.resolvedFetchUrl + '/' + projectName
return RemoteSpec(self.name, url, self.reviewUrl) return RemoteSpec(self.name, url, self.reviewUrl)
class XmlManifest(object): class XmlManifest(object):
@ -368,7 +372,7 @@ class XmlManifest(object):
raise ManifestParseError, 'refusing to mirror %s' % m_url raise ManifestParseError, 'refusing to mirror %s' % m_url
if self._default and self._default.remote: if self._default and self._default.remote:
url = self._default.remote.fetchUrl url = self._default.remote.resolvedFetchUrl
if not url.endswith('/'): if not url.endswith('/'):
url += '/' url += '/'
if m_url.startswith(url): if m_url.startswith(url):