On Sun, 2006-04-09 at 23:03 +1000, Nigel Tao wrote: > OK, I'll try not to suck 100% at this. > :D No worries i just applied all patches to 2.14 branch in one big chunk, so it could get minimal testing, i think it's now ready for release.. > What has been your procedure for rolling a tarball? Is it just "make > clean" and then "tar cvzf ..." or is there something else I ought to > do? The procedure is: cvs up -dP vim configure.ac (check version number) vim ChangeLog (check that there is a line with ==='s indicating version change, look below in the file for examples) make make install (and test briefly) gen-news > NEWS.1 gen-news-po > NEWS.2 cat NEWS.1 NEWS.2 NEWS > NEWS.3 mv NEWS.3 NEWS rm NEWS.* vim NEWS (tidy the format and stuff) Now, it should be ready, with an updated NEWS, Changelog, and configure.ac make distcheck (wait it tells you success, if not, fix the problem (related to autotools) and repeat) Now you have a tarball.. scp tarball.tar.gz ntao master gnome org: ssh ntao master gnome org > install-module tarball.tar.gz > Answer questions, (i think once or twice yes) it generates bz2, signals ftp mirrors to sync and install module in correct location Prepare an announce email to deskbar list, a little text header, then paste the relevant NEWS snippet in the mail, and send I think that's all :) Good luck ! > And do you have a script for generating the NEWS file, or do you just > manually inspect the ChangeLog? I attach you my script to generate it, and also to extrace changes from po files. The output is raw and must be processed by hand to remove old stuff and tidy up the format.. Run the script while in the deskbar root directory.. The tarball must be published before tomorrow at 00h or somthing Thanks for the help, i'll do the same for 2.15 when times come ! Raf PS. CC-ing the list for future releases if someone needs to do it
#!/usr/bin/env python
import sys, re, os
#----------------------------------------------------------------------------
CONFIG_MATCH = re.compile(r"AC_INIT\s*\(\s*(.*)\s*,\s*(.*)\s*,.*") #\s*,\s*(.*)\s*[,\)].*
config = file("configure.ac").read()
match = CONFIG_MATCH.match(config)
if match != None:
PROGRAM = match.group(1)
VERSION = match.group(2)
else:
PROGRAM = "Deskbar Applet"
VERSION = "0.7.0"
TITLE = "%s %s" % (PROGRAM, VERSION)
UNDERLINE = len(TITLE) * "="
TEMPLATE = """
%s
%s
%s
Changes:
%s
"""[1:] % (UNDERLINE, TITLE, UNDERLINE, "%s")
# if CONTRIB_TEMPLATE is None print each changelog entry along with it's author
#else collect all contributors in the last line. as defined by the template
#CONTRIB_TEMPLATE = None
CONTRIB_TEMPLATE = "Contributors to this release: %s"
# Wether to stop when a line like ========= Version ======== is found
BREAK_AT_VERSION_CHANGE = True
if "-a" in sys.argv:
BREAK_AT_VERSION_CHANGE = False
#------------------------------------------------------------------------
STATE_HEADER = 1
STATE_HEADER_NAME_END = 2
STATE_HEADER_VERSION = 3
STATE_HEADER_VERSION_IN= 4
STATE_FILES_OR_COMMENT = 5
STATE_FILES = 6
STATE_COMMENT = 7
content = file("ChangeLog").read()
state = STATE_HEADER
NEWLINE_FLAG = False
comments = []
comment = ""
name = ""
for char in content:
if char in (" ", "\n", "\t"):
if state == STATE_COMMENT and not comment.endswith(' '):
comment = comment + ' '
elif state == STATE_HEADER and not name.endswith(' '):
name = name + ' '
if char == "\n":
NEWLINE_FLAG = True
continue
if state == STATE_HEADER or state == STATE_HEADER_NAME_END:
if char == ">":
state = STATE_FILES_OR_COMMENT
elif char in "0123456789-":
pass
elif char == "<":
state = STATE_HEADER_NAME_END
elif state == STATE_HEADER:
name = name + char
elif state == STATE_FILES:
if char == ":":
state = STATE_FILES_OR_COMMENT
elif state == STATE_FILES_OR_COMMENT:
if char == "*" or char == "(":
state = STATE_FILES
else:
state = STATE_COMMENT
comment = comment + char
elif state == STATE_COMMENT:
if (char in "0123456789" or char == "*" or char == "=") and NEWLINE_FLAG:
if char in "0123456789":
state = STATE_HEADER
elif char == "*":
state = STATE_FILES
elif BREAK_AT_VERSION_CHANGE: # and char == "="
# We have a version change, we can stop or continue
break
if re.match(r"(A|R) [a-zA-Z0-9-/_\. ]+:", comment.strip()) == None:
#Remember the comment
name = name.strip()
if name == "":
name = comments[-1][0]
comments.append((name.strip(), comment.strip()))
# Clear the current comment
comment = ""
name = ""
else:
# Appending letters
comment = comment + char
NEWLINE_FLAG = False
if comment != "":
name = name.strip()
if name == "":
name = comments[-1][0]
comments.append((name.strip(), comment.strip()))
if CONTRIB_TEMPLATE != None:
print TEMPLATE % ('\n'.join(["\t* %s" % comment[1] for comment in comments]))
contributors = set()
for name, comment in comments:
contributors.add(name)
contrib_string = ""
for name in contributors:
if contrib_string == "":
contrib_string = name
elif name != "":
contrib_string = "%s, %s" % (contrib_string, name)
print CONTRIB_TEMPLATE % contrib_string
else:
print TEMPLATE % ('\n'.join(["\t* %s (%s)" % (comment[1], comment[0]) for comment in comments]))
print
#!/usr/bin/env python
import sys, re
#----------------------------------------------------------------------------
TEMPLATE = """
Translations:
%s
"""[1:]
# if CONTRIB_TEMPLATE is None print each changelog entry along with it's author
#else collect all contributors in the last line. as defined by the template
#CONTRIB_TEMPLATE = None
CONTRIB_TEMPLATE = "Contributors to the translations: %s"
# Wether to stop when a line like ========= Version ======== is found
BREAK_AT_VERSION_CHANGE = True
if "-a" in sys.argv:
BREAK_AT_VERSION_CHANGE = False
#------------------------------------------------------------------------
STATE_HEADER = 1
STATE_HEADER_NAME_END = 2
STATE_HEADER_VERSION = 3
STATE_HEADER_VERSION_IN= 4
STATE_FILES_OR_COMMENT = 5
STATE_FILES = 6
STATE_COMMENT = 7
content = file("po/ChangeLog").read()
state = STATE_HEADER
NEWLINE_FLAG = False
comments = []
comment = ""
name = ""
for char in content:
if char in (" ", "\n", "\t"):
if state == STATE_COMMENT and not comment.endswith(' '):
comment = comment + ' '
elif state == STATE_HEADER and not name.endswith(' '):
name = name + ' '
if char == "\n":
NEWLINE_FLAG = True
continue
if state == STATE_HEADER or state == STATE_HEADER_NAME_END:
if char == ">":
state = STATE_FILES_OR_COMMENT
elif char in "0123456789-":
pass
elif char == "<":
state = STATE_HEADER_NAME_END
elif state == STATE_HEADER:
name = name + char
elif state == STATE_FILES:
if char == ":":
state = STATE_FILES_OR_COMMENT
elif state == STATE_FILES_OR_COMMENT:
if char == "*" or char == "(":
state = STATE_FILES
else:
state = STATE_COMMENT
comment = comment + char
elif state == STATE_COMMENT:
if (char in "0123456789" or char == "*" or char == "=") and NEWLINE_FLAG:
if char in "0123456789":
state = STATE_HEADER
elif char == "*":
state = STATE_FILES
elif BREAK_AT_VERSION_CHANGE: # and char == "="
# We have a version change, we can stop or continue
break
if re.match(r"(A|R) [a-zA-Z0-9-/_\. ]+:", comment.strip()) == None:
#Remember the comment
name = name.strip()
if name == "":
name = comments[-1][0]
comments.append((name.strip(), comment.strip()))
# Clear the current comment
comment = ""
name = ""
else:
# Appending letters
comment = comment + char
NEWLINE_FLAG = False
if comment != "":
name = name.strip()
if name == "":
name = comments[-1][0]
comments.append((name.strip(), comment.strip()))
if CONTRIB_TEMPLATE != None:
print TEMPLATE % ('\n'.join(["\t* %s" % comment[1] for comment in comments]))
contributors = set()
for name, comment in comments:
contributors.add(name)
contrib_string = ""
for name in contributors:
if contrib_string == "":
contrib_string = name
elif name != "":
contrib_string = "%s, %s" % (contrib_string, name)
print CONTRIB_TEMPLATE % contrib_string
else:
print TEMPLATE % (PROGRAM, VERSION, '\n'.join(["\t* %s (%s)" % (comment[1], comment[0]) for comment in comments]))
print
Attachment:
signature.asc
Description: This is a digitally signed message part