#!/bin/env python3

import sys
import re
import subprocess


def get_change_log(previous_sha):
    args = ['git', '--no-pager', 'log', '--merges', '--grep', 'Merge pull request', '--pretty=format:"%h|%s|%b|%p"', 'master...{}'.format(previous_sha)]
    log = subprocess.check_output(args)
    changes = []

    for line in log.split('\n'):
        try:
            sha, subject, body, parents = line[1:-1].split('|')
        except ValueError:
            continue

        try:
            pull_request = re.match("Merge pull request #(\d+)", subject).groups()[0]
            pull_request = " #{}".format(pull_request)
        except Exception as ex:
            pull_request = ""

        author = subprocess.check_output(['git', 'log', '-1', '--pretty=format:"%an"', parents.split(' ')[-1]])[1:-1]

        changes.append("{}{}: {} ({})".format(sha, pull_request, body.strip(), author))

    return changes


if __name__ == '__main__':
    previous_sha = sys.argv[1]
    changes = get_change_log(previous_sha)

    for change in changes:
        print(change)
