diff options
author | Pierre-Yves David <pierre-yves.david@logilab.fr> | 2008-06-30 17:12:20 +0200 |
---|---|---|
committer | Pierre-Yves David <pierre-yves.david@logilab.fr> | 2008-06-30 17:12:20 +0200 |
commit | 15febb1bfc6c21731e4891bb0a6787f410501a46 (patch) | |
tree | bd022876b3705773285be145e6eae18aaab5f3d1 | |
parent | b11b4e42070c83476db51cb4cd3b21f4baf6b718 (diff) | |
download | logilab-common-15febb1bfc6c21731e4891bb0a6787f410501a46.tar.gz |
basic sub messages management
-rw-r--r-- | changelog.py | 44 | ||||
-rw-r--r-- | test/data/ChangeLog | 7 |
2 files changed, 44 insertions, 7 deletions
diff --git a/changelog.py b/changelog.py index ebfa24d..25191b5 100644 --- a/changelog.py +++ b/changelog.py @@ -48,6 +48,7 @@ import sys from stat import S_IWRITE BULLET = '*' +SUBBULLET = '-' INDENT = ' ' class NoEntry(Exception): @@ -93,22 +94,39 @@ class ChangeLogEntry(object): def add_message(self, msg): """add a new message""" - self.messages.append([msg]) + self.messages.append(([msg],[])) def complete_latest_message(self, msg_suite): """complete the latest added message """ if not self.messages: - print >> sys.stderr, 'Ignoring %r (unexpected format)' % msg_suite - self.messages[-1].append(msg_suite) + raise ValueError('unable to complete last message as there is no previous message)') + if self.messages[-1][1]: # sub messages + self.messages[-1][1][-1].append(msg_suite) + else: # message + self.messages[-1][0].append(msg_suite) + + def add_sub_message(self, sub_msg, key=None): + if not self.messages: + raise ValueError('unable to complete last message as there is no previous message)') + if key is None: + self.messages[-1][1].append([sub_msg]) + else: + raise NotImplementedError("sub message to specific key are not impemented yet") def write(self, stream=sys.stdout): """write the entry to file """ stream.write('%s -- %s\n' % (self.date or '', self.version or '')) - for msg in self.messages: + for msg, sub_msgs in self.messages: stream.write('%s%s %s\n' % (INDENT, BULLET, msg[0])) stream.write(''.join(msg[1:])) + if sub_msgs: + stream.write('\n') + for sub_msg in sub_msgs: + stream.write('%s%s %s\n' % (INDENT * 2, SUBBULLET, sub_msg[0])) + stream.write(''.join(sub_msg[1:])) stream.write('\n') + stream.write('\n\n') class ChangeLog(object): @@ -161,24 +179,35 @@ class ChangeLog(object): except IOError: return last = None + expect_sub = False for line in stream.readlines(): sline = line.strip() words = sline.split() + # if new entry if len(words) == 1 and words[0] == '--': + expect_sub = False last = self.entry_class() self.add_entry(last) + # if old entry elif len(words) == 3 and words[1] == '--': + expect_sub = False last = self.entry_class(words[0], words[2]) self.add_entry(last) - elif last is None: - if not sline: - continue + # if title + elif sline and last is None: self.title = '%s%s' % (self.title, line) + # if new entry elif sline and sline[0] == BULLET: + expect_sub = False last.add_message(sline[1:].strip()) + # if new sub_entry + elif expect_sub and sline and sline[0] == SUBBULLET: + last.add_sub_message(sline[1:].strip()) + # if new line for current entry elif sline and last.messages: last.complete_latest_message(line) else: + expect_sub = True self.additional_content += line stream.close() @@ -197,3 +226,4 @@ class ChangeLog(object): stream.write(self.format_title()) for entry in self.entries: entry.write(stream) + diff --git a/test/data/ChangeLog b/test/data/ChangeLog index dcd8529..f362233 100644 --- a/test/data/ChangeLog +++ b/test/data/ChangeLog @@ -10,6 +10,11 @@ ChangeLog for logilab.devtools * import the version control library from oobrother extended with code from devtools / apycot + * Singing in the rain: + + - I'm + - singing in the rain + * Big change: - small change @@ -18,6 +23,8 @@ ChangeLog for logilab.devtools really ? - Eat your vegetable and brush after every meals + + 2004-02-13 -- 0.4.5 * fix debianize to handle dependencies to python standalone package (ie no "python" prefix in the default package) |