#!/usr/bin/env python import os import re import sys from git import Git g = Git(os.getcwd()) commitMsgs = {} def getCommits(srcRef, dstRef): commits = {} commit = '' changeId = '' commitHash = '' for line in g.log('--format=fuller', '%s..%s' % (srcRef, dstRef)).split('\n'): if len(commit) > 0 and line.find('commit') == 0: commits[changeId] = commitHash commitMsgs[commitHash] = commit commit = '' size = 0 match = re.search(r'commit ([0-9a-f]+)', line) if match: commitHash = match.group(1) else: raise Exception('Bad commit hash in line:\n%s' % line) elif line.find('Change-Id:') >= 0: match = re.search(r'Change-Id: (I[0-9a-f]+)', line) if match: changeId = match.group(1) else: raise Exception('Bad Change-Id in line:\n%s' % line) commit += line + '\n' return commits if __name__ == '__main__': try: sourceRef, targetRef = sys.argv[1:3] except ValueError: print 'branch-compare ' targetCommits = getCommits(sourceRef, targetRef) sourceCommits = getCommits(targetRef, sourceRef) missingCommitsFromTarget = set(sourceCommits.keys()) - set(targetCommits.keys()) for id in missingCommitsFromTarget: hash = sourceCommits[id] print 'git cherry-pick', hash print commitMsgs[hash]