Index: git_footers.py |
diff --git a/git_footers.py b/git_footers.py |
index 3e3ea827ba5cb771802478bcb7121d203cd4f284..1d4d4dd84099e5dcc95e78eb0870c10af3c437ae 100755 |
--- a/git_footers.py |
+++ b/git_footers.py |
@@ -62,6 +62,44 @@ def get_footer_svn_id(branch=None): |
return svn_id |
+def get_footer_change_id(message): |
+ """Returns a list of Gerrit's ChangeId from given commit message.""" |
+ return parse_footers(message).get(normalize_name('Change-Id'), []) |
+ |
+ |
+def add_footer_change_id(message, change_id): |
+ """Returns message with Change-ID footer in it. |
+ |
+ Assumes that Change-Id is not yet in footers, which is then |
+ inserted after any of these footers: Bug|Issue|Test|Feature. |
+ """ |
+ assert 0 == len(get_footer_change_id(message)) |
+ change_id_line = 'Change-Id: %s' % change_id |
+ # This code does the same as parse_footers, but keeps track of line |
+ # numbers so that ChangeId is inserted in the right place. |
+ lines = message.splitlines() |
+ footer_lines = [] |
+ for line in reversed(lines): |
+ if line == '' or line.isspace(): |
+ break |
+ footer_lines.append(line) |
+ # footers order is from end to start of the message. |
+ footers = map(parse_footer, footer_lines) |
+ if not all(footers): |
+ lines.append('') |
+ lines.append(change_id_line) |
+ else: |
+ after = set(map(normalize_name, ['Bug', 'Issue', 'Test', 'Feature'])) |
+ for i, (key, _) in enumerate(footers): |
+ if normalize_name(key) in after: |
+ insert_at = len(lines) - i |
+ break |
+ else: |
+ insert_at = len(lines) - len(footers) |
+ lines.insert(insert_at, change_id_line) |
+ return '\n'.join(lines) |
+ |
+ |
def get_unique(footers, key): |
key = normalize_name(key) |
values = footers[key] |