/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: Marius Kruger
  • Date: 2010-07-10 21:28:56 UTC
  • mto: (5384.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 5385.
  • Revision ID: marius.kruger@enerweb.co.za-20100710212856-uq4ji3go0u5se7hx
* Update documentation
* add NEWS

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
 
    'brz': '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
 
BRZ_EXE = None
31
 
def brz():
32
 
    global BRZ_EXE
33
 
    if BRZ_EXE is not None:
34
 
        return BRZ_EXE
35
 
    try:
36
 
        subprocess.call(['brz', '--version'], stdout=subprocess.PIPE,
37
 
                        stderr=subprocess.PIPE)
38
 
        BRZ_EXE = 'brz'
39
 
    except OSError:
40
 
        try:
41
 
            subprocess.call(['brz.bat', '--version'], stdout=subprocess.PIPE,
42
 
                            stderr=subprocess.PIPE)
43
 
            BRZ_EXE = 'brz.bat'
44
 
        except OSError:
45
 
            raise RuntimeError('Could not find brz or brz.bat on your path.')
46
 
    return BRZ_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_brz_dir() + '/brz',
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_brz_dir():
80
 
    return 'brz.' + VERSIONS['brz']
81
 
 
82
 
 
83
 
def update_brz():
84
 
    """Make sure we have the latest brz in play."""
85
 
    brz_dir = get_brz_dir()
86
 
    if not os.path.isdir(brz_dir):
87
 
        brz_version = VERSIONS['brz']
88
 
        brz_url = 'lp:brz/' + brz_version
89
 
        print("Getting brz release %s from %s" % (brz_version, brz_url))
90
 
        call_or_fail([brz(), 'co', brz_url, brz_dir])
91
 
    else:
92
 
        print("Ensuring %s is up-to-date" % (brz_dir,))
93
 
        call_or_fail([brz(), 'update', brz_dir])
94
 
 
95
 
 
96
 
def create_target():
97
 
    target = get_target()
98
 
    print("Creating target dir: %s" % (target,))
99
 
    call_or_fail([brz(), 'co', get_brz_dir(), target])
100
 
 
101
 
 
102
 
def get_plugin_trunk_dir(plugin_name):
103
 
    return '%s/trunk' % (plugin_name,)
104
 
 
105
 
 
106
 
def get_plugin_release_dir(plugin_name):
107
 
    return '%s/%s' % (plugin_name, VERSIONS[plugin_name])
108
 
 
109
 
 
110
 
def get_plugin_trunk_branch(plugin_name):
111
 
    return 'lp:%s' % (plugin_name,)
112
 
 
113
 
 
114
 
def update_plugin_trunk(plugin_name):
115
 
    trunk_dir = get_plugin_trunk_dir(plugin_name)
116
 
    if not os.path.isdir(trunk_dir):
117
 
        plugin_trunk = get_plugin_trunk_branch(plugin_name)
118
 
        print("Getting latest %s trunk" % (plugin_name,))
119
 
        call_or_fail([brz(), 'co', plugin_trunk,
120
 
                      trunk_dir])
121
 
    else:
122
 
        print("Ensuring %s is up-to-date" % (trunk_dir,))
123
 
        call_or_fail([brz(), 'update', trunk_dir])
124
 
    return trunk_dir
125
 
 
126
 
 
127
 
def _plugin_tag_name(plugin_name):
128
 
    if plugin_name in ('bzr-svn', 'bzr-rewrite', 'subvertpy'):
129
 
        return '%s-%s' % (plugin_name, VERSIONS[plugin_name])
130
 
    # bzrtools and qbzr use 'release-X.Y.Z'
131
 
    return 'release-' + VERSIONS[plugin_name]
132
 
 
133
 
 
134
 
def update_plugin(plugin_name):
135
 
    release_dir = get_plugin_release_dir(plugin_name)
136
 
    if not os.path.isdir(plugin_name):
137
 
        if plugin_name in ('bzr-svn', 'bzr-rewrite'):
138
 
            # bzr-svn uses a different repo format
139
 
            call_or_fail(
140
 
                [brz(), 'init-shared-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([brz(), '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([brz(), '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_brz()
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
 
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