diff --git a/tools/dev/bin/clean-branches.py b/tools/dev/bin/branch-clean similarity index 100% rename from tools/dev/bin/clean-branches.py rename to tools/dev/bin/branch-clean diff --git a/tools/dev/bin/branch-compare b/tools/dev/bin/branch-compare new file mode 100755 index 0000000000..2ea535dc12 --- /dev/null +++ b/tools/dev/bin/branch-compare @@ -0,0 +1,55 @@ +#!/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]