summaryrefslogtreecommitdiff
path: root/buildscripts/distmirror.py
blob: 7af1a89f7dc6d9cafb3857aefedc506b8c0b814e (plain)
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()