#!/usr/bin/python import sys import re import subprocess """ This script generates a release note from the output of git log between the specified tags. Arguments: since -- tag name until -- tag name Example Input: * + Bug: issue 123 Change-Id: Signed-off-by: Expected Output: * issue 123 + """ if len(sys.argv) != 3: sys.exit('Usage: ' + sys.argv[0] + ' ') since_until = sys.argv[1] + '..' + sys.argv[2] proc = subprocess.Popen(['git', 'log', '--reverse', '--no-merges', since_until, "--format=* %s%n+%n%b"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT,) stdout_value = proc.communicate()[0] subject = "" message = [] for line in stdout_value.splitlines(True): if re.match('\* ', line) >= 0: # Write change log for a commit if subject != "": # Write subject sys.stdout.write(subject) # Write message lines if message != []: # Clear + from last line in commit message message[-1] = '\n' for m in message: sys.stdout.write(m) # Start new commit block message = [] subject = line continue # Move issue number to subject line elif re.match('Bug: ', line) is not None: line = line.replace('Bug: ', '').replace('\n',' ') subject = subject[:2] + line + subject[2:] # Move issue number to subject line elif re.match('Issue: ', line) is not None: line = line.replace('Issue: ', 'issue ').replace('\n',' ') subject = subject[:2] + line + subject[2:] # Remove commit footers elif re.match(r'((\w+-)+\w+:)', line) is not None: continue else: if line == '\n': # Don't add extra blank line if last one is already blank if message != [] and message[-1] != '+\n': message.append('+\n') else: message.append(line)