]> git.donarmstrong.com Git - lilypond.git/blob - stepmake/bin/release.py
Merge branch 'jneeman' of git+ssh://jneem@git.sv.gnu.org/srv/git/lilypond into jneeman
[lilypond.git] / stepmake / bin / release.py
1 #!@PYTHON@
2 # release.py
3
4 import os
5 import packagepython
6 import getopt
7 import string
8 import sys
9 import time
10
11 (options, files) = getopt.getopt (sys.argv[1:], 'ho:p:',
12                  ['help', 'outdir=', 'package='])
13
14 def help ():
15     sys.stdout.write (r"""Usage: release [OPTIONS]...
16 Make a tarball and patch.
17
18 Options:
19  -o, --outdir=DIR       specify where to leave patches
20  -h, --help                 print this help
21  -p, --package=DIR      specify package"""
22 )
23     sys.exit (0)
24
25
26 topdir = ''
27 outdir = '.'
28
29 for opt in options:
30     o = opt[0]
31     a = opt[1]
32     if o == '-h' or o == '--help':
33         help ()
34     elif o == '-p' or o == '--package':
35         topdir = a
36     elif o == '--outdir' or o == '-o':
37         outdir = a
38       
39 sys.path.append (topdir + '/stepmake/bin')
40
41 package = packagepython.Package (topdir)
42 os.chdir (package.topdir)
43
44 release_version = packagepython.version_tuple_to_str (package.version)
45 basename = string.join ((package.name, release_version), '-')
46 tarball = basename + '.tar.gz'
47 out_tarfile = os.path.join (outdir, tarball)
48 release_tarfile = os.path.join (package.release_dir, tarball)
49
50 if os.path.exists (out_tarfile):
51     os.unlink (out_tarfile)
52
53 changelog_name = os.path.join (topdir, 'ChangeLog')
54 lines = open (changelog_name).readlines ()
55 release_marker = '\t* VERSION: %(release_version)s' % vars ()
56 if not package.version[3] \
57  and lines[2][0:len (release_marker) - 1] != release_marker:
58     sys.stderr.write ("warning: ChangeLog: adding VERSION: %s\n" \
59              % release_version)
60     user_changelog_entry = time.strftime ('%Y-%m-%d') \
61                + '  ' + os.environ['EMAIL']
62     changelog = open (changelog_name, 'w')
63     changelog.write (user_changelog_entry)
64     changelog.write ('\n\n')
65     changelog.write (release_marker)
66     changelog.write ('\n\n')
67     changelog.writelines (lines)
68     changelog.close ()
69
70 status = os.system ('make dist')
71 if status:
72     raise 'make dist failed'
73
74 if os.path.exists (release_tarfile):
75     os.unlink (release_tarfile)
76     
77 os.link (out_tarfile, release_tarfile)
78
79 diff_py = package.topdir + '/stepmake/bin/package-diff.py'
80 diff_py_options = '--outdir=%(outdir)s --package=%(topdir)s' % vars ()
81 status = os.system (string.join ((sys.executable, diff_py, diff_py_options)))
82 if status:
83     raise 'make diff failed'
84
85 previous_tuple = packagepython.prev_version (package.version)
86 previous_version = packagepython.version_tuple_to_str (previous_tuple)
87
88 diff_base = string.join ((package.name, previous_version, release_version),
89             '-')
90 diff_name = diff_base + '.diff.gz'
91
92 out_diff = os.path.join (outdir, diff_name)
93 release_diff = os.path.join (package.patch_dir, diff_name)
94
95 if not os.path.exists (out_diff):
96     sys.stderr.write ("error: cannot open: %s\n" % out_diff)
97     sys.exit (1)
98
99 if os.path.exists (release_diff):
100     os.unlink (release_diff)
101
102 os.link (out_diff, release_diff)
103