/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to tools/win32/build_release.py

  • Committer: John Arbash Meinel
  • Date: 2009-12-22 16:28:47 UTC
  • mto: This revision was merged to the branch mainline in revision 4922.
  • Revision ID: john@arbash-meinel.com-20091222162847-tvnsc69to4l4uf5r
Implement a permute_for_extension helper.

Use it for all of the 'simple' extension permutations.
It basically permutes all tests in the current module, by setting TestCase.module.
Which works well for most of our extension tests. Some had more advanced
handling of permutations (extra permutations, custom vars, etc.)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/cygdrive/C/Python25/python
 
2
"""A script to help automate the build process."""
 
3
 
 
4
# When preparing a new release, make sure to set all of these to the latest
 
5
# values.
 
6
VERSIONS = {
 
7
    'bzr': '1.17',
 
8
    'qbzr': '0.12',
 
9
    'bzrtools': '1.17.0',
 
10
    'bzr-svn': '0.6.3',
 
11
    'bzr-rewrite': '0.5.2',
 
12
    'subvertpy': '0.6.8',
 
13
}
 
14
 
 
15
# This will be passed to 'make' to ensure we build with the right python
 
16
PYTHON='/cygdrive/c/Python25/python'
 
17
 
 
18
# Create the final build in this directory
 
19
TARGET_ROOT='release'
 
20
 
 
21
DEBUG_SUBPROCESS = True
 
22
 
 
23
 
 
24
import os
 
25
import shutil
 
26
import subprocess
 
27
import sys
 
28
 
 
29
 
 
30
BZR_EXE = None
 
31
def bzr():
 
32
    global BZR_EXE
 
33
    if BZR_EXE is not None:
 
34
        return BZR_EXE
 
35
    try:
 
36
        subprocess.call(['bzr', '--version'], stdout=subprocess.PIPE,
 
37
                        stderr=subprocess.PIPE)
 
38
        BZR_EXE = 'bzr'
 
39
    except OSError:
 
40
        try:
 
41
            subprocess.call(['bzr.bat', '--version'], stdout=subprocess.PIPE,
 
42
                            stderr=subprocess.PIPE)
 
43
            BZR_EXE = 'bzr.bat'
 
44
        except OSError:
 
45
            raise RuntimeError('Could not find bzr or bzr.bat on your path.')
 
46
    return BZR_EXE
 
47
 
 
48
 
 
49
def call_or_fail(*args, **kwargs):
 
50
    """Call a subprocess, and fail if the return code is not 0."""
 
51
    if DEBUG_SUBPROCESS:
 
52
        print '  calling: "%s"' % (' '.join(args[0]),)
 
53
    p = subprocess.Popen(*args, **kwargs)
 
54
    (out, err) = p.communicate()
 
55
    if p.returncode != 0:
 
56
        raise RuntimeError('Failed to run: %s, %s' % (args, kwargs))
 
57
    return out
 
58
 
 
59
 
 
60
TARGET = None
 
61
def get_target():
 
62
    global TARGET
 
63
    if TARGET is not None:
 
64
        return TARGET
 
65
    out = call_or_fail([sys.executable, get_bzr_dir() + '/bzr',
 
66
                        'version', '--short'], stdout=subprocess.PIPE)
 
67
    version = out.strip()
 
68
    TARGET = os.path.abspath(TARGET_ROOT + '-' + version)
 
69
    return TARGET
 
70
 
 
71
 
 
72
def clean_target():
 
73
    """Nuke the target directory so we know we are starting from scratch."""
 
74
    target = get_target()
 
75
    if os.path.isdir(target):
 
76
        print "Deleting: %s" % (target,)
 
77
        shutil.rmtree(target)
 
78
 
 
79
def get_bzr_dir():
 
80
    return 'bzr.' + VERSIONS['bzr']
 
81
 
 
82
 
 
83
def update_bzr():
 
84
    """Make sure we have the latest bzr in play."""
 
85
    bzr_dir = get_bzr_dir()
 
86
    if not os.path.isdir(bzr_dir):
 
87
        bzr_version = VERSIONS['bzr']
 
88
        # bzr_url = 'http://bazaar-vcs.org/bzr/bzr.' + bzr_version
 
89
        bzr_url = 'lp:bzr/' + bzr_version
 
90
        print "Getting bzr release %s from %s" % (bzr_version, bzr_url)
 
91
        call_or_fail([bzr(), 'co', bzr_url, bzr_dir])
 
92
    else:
 
93
        print "Ensuring %s is up-to-date" % (bzr_dir,)
 
94
        call_or_fail([bzr(), 'update', bzr_dir])
 
95
 
 
96
 
 
97
def create_target():
 
98
    target = get_target()
 
99
    print "Creating target dir: %s" % (target,)
 
100
    call_or_fail([bzr(), 'co', get_bzr_dir(), target])
 
101
 
 
102
 
 
103
def get_plugin_trunk_dir(plugin_name):
 
104
    return '%s/trunk' % (plugin_name,)
 
105
 
 
106
 
 
107
def get_plugin_release_dir(plugin_name):
 
108
    return '%s/%s' % (plugin_name, VERSIONS[plugin_name])
 
109
 
 
110
 
 
111
def get_plugin_trunk_branch(plugin_name):
 
112
    return 'lp:%s' % (plugin_name,)
 
113
 
 
114
 
 
115
def update_plugin_trunk(plugin_name):
 
116
    trunk_dir = get_plugin_trunk_dir(plugin_name)
 
117
    if not os.path.isdir(trunk_dir):
 
118
        plugin_trunk = get_plugin_trunk_branch(plugin_name)
 
119
        print "Getting latest %s trunk" % (plugin_name,)
 
120
        call_or_fail([bzr(), 'co', plugin_trunk,
 
121
                      trunk_dir])
 
122
    else:
 
123
        print "Ensuring %s is up-to-date" % (trunk_dir,)
 
124
        call_or_fail([bzr(), 'update', trunk_dir])
 
125
    return trunk_dir
 
126
 
 
127
 
 
128
def _plugin_tag_name(plugin_name):
 
129
    if plugin_name in ('bzr-svn', 'bzr-rewrite', 'subvertpy'):
 
130
        return '%s-%s' % (plugin_name, VERSIONS[plugin_name])
 
131
    # bzrtools and qbzr use 'release-X.Y.Z'
 
132
    return 'release-' + VERSIONS[plugin_name]
 
133
 
 
134
 
 
135
def update_plugin(plugin_name):
 
136
    release_dir = get_plugin_release_dir(plugin_name)
 
137
    if not os.path.isdir(plugin_name):
 
138
        if plugin_name in ('bzr-svn', 'bzr-rewrite'):
 
139
            # bzr-svn uses a different repo format
 
140
            call_or_fail([bzr(), 'init-repo', '--rich-root-pack', plugin_name])
 
141
        else:
 
142
            os.mkdir(plugin_name)
 
143
    if os.path.isdir(release_dir):
 
144
        print "Removing existing dir: %s" % (release_dir,)
 
145
        shutil.rmtree(release_dir)
 
146
    # First update trunk
 
147
    trunk_dir = update_plugin_trunk(plugin_name)
 
148
    # Now create the tagged directory
 
149
    tag_name = _plugin_tag_name(plugin_name)
 
150
    print "Creating the branch %s" % (release_dir,)
 
151
    call_or_fail([bzr(), 'co', '-rtag:%s' % (tag_name,),
 
152
                  trunk_dir, release_dir])
 
153
    return release_dir
 
154
 
 
155
 
 
156
def install_plugin(plugin_name):
 
157
    release_dir = update_plugin(plugin_name)
 
158
    # at least bzrtools doesn't like you to call 'setup.py' unless you are in
 
159
    # that directory specifically, so we cd, rather than calling it from
 
160
    # outside
 
161
    print "Installing %s" % (release_dir,)
 
162
    call_or_fail([sys.executable, 'setup.py', 'install', '-O1',
 
163
                  '--install-lib=%s' % (get_target(),)],
 
164
                 cwd=release_dir)
 
165
 
 
166
 
 
167
def update_tbzr():
 
168
    tbzr_loc = os.environ.get('TBZR', None)
 
169
    if tbzr_loc is None:
 
170
        raise ValueError('You must set TBZR to the location of tortoisebzr.')
 
171
    print 'Updating %s' % (tbzr_loc,)
 
172
    call_or_fail([bzr(), 'update', tbzr_loc])
 
173
 
 
174
 
 
175
def build_installer():
 
176
    target = get_target()
 
177
    print
 
178
    print
 
179
    print '*' * 60
 
180
    print 'Building standalone installer'
 
181
    call_or_fail(['make', 'PYTHON=%s' % (PYTHON,), 'installer'],
 
182
                 cwd=target)
 
183
 
 
184
 
 
185
def main(args):
 
186
    import optparse
 
187
 
 
188
    p = optparse.OptionParser(usage='%prog [OPTIONS]')
 
189
    opts, args = p.parse_args(args)
 
190
 
 
191
    update_bzr()
 
192
    update_tbzr()
 
193
    clean_target()
 
194
    create_target()
 
195
    install_plugin('subvertpy')
 
196
    install_plugin('bzrtools')
 
197
    install_plugin('qbzr')
 
198
    install_plugin('bzr-svn')
 
199
    install_plugin('bzr-rewrite')
 
200
 
 
201
    build_installer()
 
202
 
 
203
 
 
204
if __name__ == '__main__':
 
205
    main(sys.argv[1:])
 
206
 
 
207
# vim: ts=4 sw=4 sts=4 et ai