#!/usr/bin/env python
# Copyright 2014 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.

"""
Checks out a downstream branch from the currently checked out branch. If there
is more than one downstream branch, then this script will prompt you to select
which branch.
"""

from __future__ import print_function

import argparse
import sys

import gclient_utils
from git_common import current_branch, branches, upstream, run, hash_one
import metrics


@metrics.collector.collect_metrics('git nav-downstream')
def main(args):
  parser = argparse.ArgumentParser()
  parser.add_argument('--pick',
                      help=(
                          'The number to pick if this command would '
                          'prompt'))
  opts = parser.parse_args(args)

  upfn = upstream
  cur = current_branch()
  if cur == 'HEAD':
    def _upfn(b):
      parent = upstream(b)
      if parent:
        return hash_one(parent)
    upfn = _upfn
    cur = hash_one(cur)
  downstreams = [b for b in branches() if upfn(b) == cur]
  if not downstreams:
    print("No downstream branches")
    return 1
  elif len(downstreams) == 1:
    run('checkout', downstreams[0], stdout=sys.stdout, stderr=sys.stderr)
  else:
    high = len(downstreams) - 1
    while True:
      print("Please select a downstream branch")
      for i, b in enumerate(downstreams):
        print("  %d. %s" % (i, b))
      prompt = "Selection (0-%d)[0]: " % high
      r = opts.pick
      if r:
        print(prompt + r)
      else:
        r = gclient_utils.AskForData(prompt).strip() or '0'
      if not r.isdigit() or (0 > int(r) > high):
        print("Invalid choice.")
      else:
        run('checkout', downstreams[int(r)], stdout=sys.stdout,
            stderr=sys.stderr)
        break
  return 0


if __name__ == '__main__':
  with metrics.collector.print_notice_and_exit():
    sys.exit(main(sys.argv[1:]))
