#!/usr/bin/env python
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Usage: %prog <commit>*

Given a commit, finds the release where it first appeared (e.g. 47.0.2500.0) as
well as attempting to determine the branches to which it was merged.

Note that it uses the "cherry picked from" annotation to find merges, so it will
only work on merges that followed the "use cherry-pick -x" instructions.
"""

from __future__ import print_function

import optparse
import re
import sys

import git_common as git


def GetNameForCommit(sha1):
  name = re.sub(r'~.*$', '', git.run('name-rev', '--tags', '--name-only', sha1))
  if name == 'undefined':
    name = git.run(
        'name-rev', '--refs', 'remotes/branch-heads/*', '--name-only',
        sha1) + ' [untagged]'
  return name


def GetMergesForCommit(sha1):
  return [c.split()[0] for c in
          git.run('log', '--oneline', '-F', '--all', '--no-abbrev', '--grep',
                  'cherry picked from commit %s' % sha1).splitlines()]


def main(args):
  parser = optparse.OptionParser(usage=sys.modules[__name__].__doc__)
  _, args = parser.parse_args(args)

  if len(args) == 0:
    parser.error('Need at least one commit.')

  for arg in args:
    commit_name = GetNameForCommit(arg)
    if not commit_name:
      print('%s not found' % arg)
      return 1
    print('commit %s was:' % arg)
    print('  initially in ' + commit_name)
    merges = GetMergesForCommit(arg)
    for merge in merges:
      print('  merged to ' + GetNameForCommit(merge) + ' (as ' + merge + ')')
    if not merges:
      print('No merges found. If this seems wrong, be sure that you did:')
      print('  git fetch origin && gclient sync --with_branch_heads')

  return 0


if __name__ == '__main__':
  try:
    sys.exit(main(sys.argv[1:]))
  except KeyboardInterrupt:
    sys.stderr.write('interrupted\n')
    sys.exit(1)
