#!/usr/bin/env python
# Copyright 2017 Google Inc.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import httplib
import json
import re
import subprocess
import sys

def retrieve_changeid(commit_or_branch):
  b = subprocess.check_output(['git', 'log', '-1', '--format=%B', commit_or_branch])
  r = re.compile(r'^Change-Id: (.*)$')
  for l in b.split('\n'):
    m = r.match(l)
    if m:
      return m.group(1)
  return None

def gerrit_change_id_to_number(cid):
    conn = httplib.HTTPSConnection('skia-review.googlesource.com')
    conn.request('GET', '/changes/?q=change:%s' % cid)
    r = conn.getresponse()
    assert(r.status == 200)
    x = r.read()
    i = 0
    while i < len(x) and x[i] != '[':
      i += 1
    print json.loads(x[i:])[0]['_number']

if __name__ == '__main__':
  try:
    if len(sys.argv) == 2 and len(sys.argv[1]) == 41 and sys.argv[1][0] == 'I':
      gerrit_change_id_to_number(sys.argv[1])
    else:
      changeid = retrieve_changeid(sys.argv[1] if len(sys.argv) == 2 else 'HEAD')
      if changeid is None:
        exit(2)
      gerrit_change_id_to_number(changeid)
  except:
    exit(1)
