download-boost-snapshot.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/usr/bin/env python
  2. import urllib, os, os.path, sys, json, tarfile, zipfile, tempfile
  3. def download(snapshot):
  4. if snapshot == 'stable':
  5. # TODO: Default version/filename if not available?
  6. downloads = [
  7. "https://sourceforge.net/projects/boost/files/boost/%s/%s.tar.bz2/download" %
  8. (os.environ['BOOST_VERSION'], os.environ['BOOST_FILENAME'])]
  9. else:
  10. json_response = urllib.urlopen('https://api.bintray.com/packages/boostorg/%s/snapshot/files' % (snapshot))
  11. x = json.load(json_response)
  12. extension_priorities = { '.bz2': 2, '.gz': 1, '.zip': 0 }
  13. file_list = []
  14. version_dates = {}
  15. for file in x:
  16. file_extension = os.path.splitext(file['path'])[1]
  17. if (file_extension in extension_priorities):
  18. file['priority'] = extension_priorities[file_extension]
  19. file_list.append(file)
  20. if not file['version'] in version_dates or file['created'] < version_dates[file['version']]:
  21. version_dates[file['version']] = file['created']
  22. file_list.sort(key=lambda x: (version_dates[x['version']], x['priority']), reverse=True)
  23. downloads = ['http://dl.bintray.com/boostorg/%s/%s' % (snapshot, file['path']) for file in file_list]
  24. filename = ''
  25. for download_url in downloads:
  26. try:
  27. print "Downloading: " + download_url
  28. (filename, headers) = urllib.urlretrieve(download_url)
  29. print "Extracting: " + filename
  30. dir = tempfile.mkdtemp()
  31. extract(filename, dir)
  32. os.remove(filename)
  33. files = os.listdir(dir)
  34. assert(len(files) == 1)
  35. os.rename(os.path.join(dir, files[0]), 'boost')
  36. return
  37. except IOError:
  38. print "Error opening URL: " + download_url
  39. def extract(filename, path = '.'):
  40. if (filename.endswith(".gz")):
  41. tar = tarfile.open(filename, "r:gz")
  42. tar.extractall(path)
  43. tar.close
  44. elif (filename.endswith(".bz2")):
  45. tar = tarfile.open(filename, "r:bz2")
  46. tar.extractall(path)
  47. tar.close
  48. elif (filename.endswith(".zip")):
  49. zip = zipfile.ZipFile(filename, "r")
  50. zip.extractall(path)
  51. zip.close
  52. else:
  53. assert False
  54. if len(sys.argv) == 1:
  55. download('stable')
  56. elif len(sys.argv) == 2:
  57. download(sys.argv[1])
  58. else:
  59. print "Usage: %s [stable|branch-name]" % (sys.argv[0])