123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/usr/bin/env python
- import urllib, os, os.path, sys, json, tarfile, zipfile, tempfile
- def download(snapshot):
- if snapshot == 'stable':
- # TODO: Default version/filename if not available?
- downloads = [
- "https://sourceforge.net/projects/boost/files/boost/%s/%s.tar.bz2/download" %
- (os.environ['BOOST_VERSION'], os.environ['BOOST_FILENAME'])]
- else:
- json_response = urllib.urlopen('https://api.bintray.com/packages/boostorg/%s/snapshot/files' % (snapshot))
- x = json.load(json_response)
- extension_priorities = { '.bz2': 2, '.gz': 1, '.zip': 0 }
- file_list = []
- version_dates = {}
- for file in x:
- file_extension = os.path.splitext(file['path'])[1]
- if (file_extension in extension_priorities):
- file['priority'] = extension_priorities[file_extension]
- file_list.append(file)
- if not file['version'] in version_dates or file['created'] < version_dates[file['version']]:
- version_dates[file['version']] = file['created']
- file_list.sort(key=lambda x: (version_dates[x['version']], x['priority']), reverse=True)
- downloads = ['http://dl.bintray.com/boostorg/%s/%s' % (snapshot, file['path']) for file in file_list]
- filename = ''
- for download_url in downloads:
- try:
- print "Downloading: " + download_url
- (filename, headers) = urllib.urlretrieve(download_url)
- print "Extracting: " + filename
- dir = tempfile.mkdtemp()
- extract(filename, dir)
- os.remove(filename)
- files = os.listdir(dir)
- assert(len(files) == 1)
- os.rename(os.path.join(dir, files[0]), 'boost')
- return
- except IOError:
- print "Error opening URL: " + download_url
- def extract(filename, path = '.'):
- if (filename.endswith(".gz")):
- tar = tarfile.open(filename, "r:gz")
- tar.extractall(path)
- tar.close
- elif (filename.endswith(".bz2")):
- tar = tarfile.open(filename, "r:bz2")
- tar.extractall(path)
- tar.close
- elif (filename.endswith(".zip")):
- zip = zipfile.ZipFile(filename, "r")
- zip.extractall(path)
- zip.close
- else:
- assert False
- if len(sys.argv) == 1:
- download('stable')
- elif len(sys.argv) == 2:
- download(sys.argv[1])
- else:
- print "Usage: %s [stable|branch-name]" % (sys.argv[0])
|