diff options
Diffstat (limited to 'buildscripts/distmirror.py')
-rw-r--r-- | buildscripts/distmirror.py | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/buildscripts/distmirror.py b/buildscripts/distmirror.py new file mode 100644 index 0000000..1902e2a --- /dev/null +++ b/buildscripts/distmirror.py @@ -0,0 +1,139 @@ +#!/usr/bin/python + +# Download mongodb stuff (at present builds, sources, docs, but not +# drivers). + +# Usage: <progname> [directory] # directory defaults to cwd. + +# FIXME: this script is fairly sloppy. +import sys +import os +import urllib2 +import time +import hashlib +import warnings + +written_files = [] +def get(url, filename): + # A little safety check. + if filename in written_files: + raise Exception('not overwriting file %s (already written in this session)' % filename) + else: + written_files.append(filename) + print "downloading %s to %s" % (url, filename) + open(filename, 'w').write(urllib2.urlopen(url).read()) + + +def checkmd5(md5str, filename): + m = hashlib.md5() + m.update(open(filename, 'rb').read()) + d = m.hexdigest() + if d != md5str: + warnings.warn("md5sum mismatch for file %s: wanted %s; got %s" % (filename, md5str, d)) + +osarches=(("osx", ("i386", "i386-tiger", "x86_64"), ("tgz", )), + ("linux", ("i686", "x86_64"), ("tgz", )), + ("win32", ("i386", "x86_64"), ("zip", )), + ("sunos5", ("i86pc", "x86_64"), ("tgz", )), + ("src", ("src", ), ("tar.gz", "zip")), ) + +# KLUDGE: this will need constant editing. +versions = ("1.4.2", "1.5.1", "latest") + +url_format = "http://downloads.mongodb.org/%s/mongodb-%s-%s.%s" +filename_format = "mongodb-%s-%s.%s" + +def core_server(): + for version in versions: + for (os, architectures, archives) in osarches: + for architecture in architectures: + for archive in archives: + osarch = os + '-' + architecture if architecture != 'src' else 'src' + # ugh. + if architecture == 'src' and version == 'latest': + if archive == 'tar.gz': + archive2 = 'tarball' + elif archive == 'zip': + archive2 == 'zipball' + url = "http://github.com/mongodb/mongo/"+archive2+"/master" + version2 = "master" + else: + version2 = version if architecture != 'src' else 'r'+version + url = url_format % (os, osarch, version2, archive) + # ugh ugh + md5url = url+'.md5' if architecture != 'src' else None + filename = filename_format % (osarch, version2, archive) + get(url, filename) + if md5url: + print "fetching md5 url " + md5url + md5str = urllib2.urlopen(md5url).read() + checkmd5(md5str, filename) + +def drivers(): + # Drivers... FIXME: drivers. + driver_url_format = "http://github.com/mongodb/mongo-%s-driver/%s/%s" + driver_filename_format = "mongo-%s-driver-%s.%s" + drivers=(("python", ("1.6", "master"), ("zipball", "tarball"), None), + ("ruby", ("0.20", "master"), ("zipball", "tarball"), None), + ("c", ("v0.1", "master"), ("zipball", "tarball"), None), + # FIXME: PHP, Java, and Csharp also have zips and jars of + # precompiled relesaes. + ("php", ("1.0.6", "master"), ("zipball", "tarball"), None), + ("java", ("r1.4", "r2.0rc1", "master"), ("zipball", "tarball"), None), + # And Csharp is in a different github place, too. + ("csharp", ("0.82.2", "master"), ("zipball", "tarball"), + "http://github.com/samus/mongodb-%s/%s/%s"), + ) + + for (lang, releases, archives, url_format) in drivers: + for release in releases: + for archive in archives: + url = (url_format if url_format else driver_url_format) % (lang, archive, release) + if archive == 'zipball': + extension = 'zip' + elif archive == 'tarball': + extension = 'tgz' + else: + raise Exception('unknown archive format %s' % archive) + filename = driver_filename_format % (lang, release, extension) + get(url, filename) + # ugh ugh ugh + if lang == 'csharp' and release != 'master': + url = 'http://github.com/downloads/samus/mongodb-csharp/MongoDBDriver-Release-%.zip' % (release) + filename = 'MongoDBDriver-Release-%.zip' % (release) + get(url, filename) + if lang == 'java' and release != 'master': + get('http://github.com/downloads/mongodb/mongo-java-driver/mongo-%s.jar' % (release), 'mongo-%s.jar' % (release)) + # I have no idea what's going on with the PHP zipfiles. + if lang == 'php' and release == '1.0.6': + get('http://github.com/downloads/mongodb/mongo-php-driver/mongo-1.0.6-php5.2-osx.zip', 'mongo-1.0.6-php5.2-osx.zip') + get('http://github.com/downloads/mongodb/mongo-php-driver/mongo-1.0.6-php5.3-osx.zip', 'mongo-1.0.6-php5.3-osx.zip') + +def docs(): + # FIXME: in principle, the doc PDFs could be out of date. + docs_url = time.strftime("http://downloads.mongodb.org/docs/mongodb-docs-%Y-%m-%d.pdf") + docs_filename = time.strftime("mongodb-docs-%Y-%m-%d.pdf") + get(docs_url, docs_filename) + +def extras(): + # Extras + extras = ("http://media.mongodb.org/zips.json", ) + for extra in extras: + if extra.rfind('/') > -1: + filename = extra[extra.rfind('/')+1:] + else: + raise Exception('URL %s lacks a slash?' % extra) + get(extra, filename) + +if len(sys.argv) > 1: + dir=sys.argv[1] + os.makedirs(dir) + os.chdir(dir) + +print """NOTE: the md5sums for all the -latest tarballs are out of +date. You will probably see warnings as this script runs. (If you +don't, feel free to delete this note.)""" +core_server() +drivers() +docs() +extras() |