diff options
author | Chris Johns <chrisj@rtems.org> | 2015-12-14 16:09:27 +1100 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2015-12-14 16:14:26 +1100 |
commit | dc1cd6823b149cc3d6a1de3ce44d7a68ff2a037e (patch) | |
tree | 43030f1980a55ddbf5844a19924cc4f08c05254e /source-builder | |
parent | Fix the building of the RTEMS Tools from a tar file. (diff) | |
download | rtems-source-builder-dc1cd6823b149cc3d6a1de3ce44d7a68ff2a037e.tar.bz2 |
Download source from RTEMS if a release.
Download source from ftp.rtems.org before the package's URL if
a release.
If a user adds a URL via the command line that is used then the
RTEMS release path then the package's URL.
A user can add --url=file://path/../morepath to have the RSB use
a local cache of source on their hard disk. This is useful if you
need to wipe the RSB and start again. Save away the 'sources' and
'patches' directories to a common directory and provide it with via
the --url option using the 'file://' prefix.
Closes #2482.
Diffstat (limited to 'source-builder')
-rw-r--r-- | source-builder/sb/download.py | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/source-builder/sb/download.py b/source-builder/sb/download.py index 6995c03..6e722ff 100644 --- a/source-builder/sb/download.py +++ b/source-builder/sb/download.py @@ -513,10 +513,14 @@ def _cvs_downloader(url, local, config, opts): return True def _file_downloader(url, local, config, opts): - try: - path.copy(url[6:], local) - except: - return False + if not path.exists(local): + try: + src = url[7:] + dst = local + log.notice('download: copy %s -> %s' % (src, dst)) + path.copy(src, dst) + except: + return False return True downloaders = { 'http': _http_downloader, @@ -538,21 +542,40 @@ def get_file(url, local, opts, config): if not path.exists(local) and opts.download_disabled(): raise error.general('source not found: %s' % (path.host(local))) # - # Check if a URL has been provided on the command line. + # Check if a URL has been provided on the command line. If the package is + # release push to the start the RTEMS URL. # url_bases = opts.urls() + if version.released(): + rtems_release_url = config.macros.expand('%{rtems_release_url}/%{rsb_version}/sources') + log.trace('release url: %s' % (rtems_release_url)) + # + # If the URL being fetched is under the release path do not add the + # sources release path because it is already there. + # + if not url.startswith(rtems_release_url): + if url_bases is None: + url_bases = [rtems_release_url] + else: + url_bases.append(rtems_release_url) urls = [] if url_bases is not None: + # + # Split up the URL we are being asked to download. + # + url_path = urlparse.urlsplit(url)[2] + slash = url_path.rfind('/') + if slash < 0: + url_file = url_path + else: + url_file = url_path[slash + 1:] + log.trace('url_file: %s' %(url_file)) for base in url_bases: if base[-1:] != '/': base += '/' - url_path = urlparse.urlsplit(url)[2] - slash = url_path.rfind('/') - if slash < 0: - url_file = url_path - else: - url_file = url_path[slash + 1:] - urls.append(urlparse.urljoin(base, url_file)) + next_url = urlparse.urljoin(base, url_file) + log.trace('url: %s' %(next_url)) + urls.append(next_url) urls += url.split() log.trace('_url: %s -> %s' % (','.join(urls), local)) for url in urls: |