|
@@ -62,6 +62,44 @@ def get_footer_svn_id(branch=None):
|
|
return svn_id
|
|
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):
|
|
def get_unique(footers, key):
|
|
key = normalize_name(key)
|
|
key = normalize_name(key)
|
|
values = footers[key]
|
|
values = footers[key]
|