67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
|
#!/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])
|