aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental/tools/gerrit-change-id-to-number
blob: f8547579c0c831e4284498a1f75ddb51623a58f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/env python2
# 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
    return 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)
      sys.stdout.write('%d\n' % gerrit_change_id_to_number(changeid))
  except:
    exit(1)