#!/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 <source ref> <target ref>'

  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] 
