#!/usr/bin/env pythonimport sys, re#----------------------------------------------------------------------------PROGRAM = "Deskbar Applet"VERSION = "0.7.0"TEMPLATE = """==============%s %s==============Changes:%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 = NoneCONTRIB_TEMPLATE = "Contributors to this release: %s"# Wether to stop when a line like ========= Version ======== is foundBREAK_AT_VERSION_CHANGE = Trueif "-a" in sys.argv: BREAK_AT_VERSION_CHANGE = False#------------------------------------------------------------------------STATE_HEADER = 1STATE_HEADER_NAME_END = 2STATE_HEADER_VERSION = 3STATE_HEADER_VERSION_IN= 4STATE_FILES_OR_COMMENT = 5STATE_FILES = 6STATE_COMMENT = 7content = file("ChangeLog").read()state = STATE_HEADERNEWLINE_FLAG = Falsecomments = []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 = Falseif comment != "": name = name.strip() if name == "": name = comments[-1][0] comments.append((name.strip(), comment.strip()))if CONTRIB_TEMPLATE != None: print TEMPLATE % (PROGRAM, VERSION, '\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_stringelse: print TEMPLATE % (PROGRAM, VERSION, '\n'.join(["\t* %s (%s)" % (comment[1], comment[0]) for comment in comments]))print