1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
#!/usr/bin/env 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()
|