/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: Robert Collins
  • Date: 2007-07-15 15:40:37 UTC
  • mto: (2592.3.33 repository)
  • mto: This revision was merged to the branch mainline in revision 2624.
  • Revision ID: robertc@robertcollins.net-20070715154037-3ar8g89decddc9su
Make GraphIndex accept nodes as key, value, references, so that the method
signature is closer to what a simple key->value index delivers. Also
change the behaviour when the reference list count is zero to accept
key, value as nodes, and emit key, value to make it identical in that case
to a simple key->value index. This may not be a good idea, but for now it
seems ok.

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