Check in bionicbb code.

These have been sitting around in a git repo on my machine for a
while. They're now big an important enough that I'd like to both keep
them securely backed up, and also have my changes reviewed.

Change-Id: Ic4545149b4b07f0d57b21cac32aab8553dceb567
diff --git a/tools/bionicbb/gerrit.py b/tools/bionicbb/gerrit.py
new file mode 100644
index 0000000..51df4fb
--- /dev/null
+++ b/tools/bionicbb/gerrit.py
@@ -0,0 +1,56 @@
+# pylint: disable=bad-indentation
+# vim: set sw=2 ts=2:
+import json
+import requests
+
+
+class GerritError(RuntimeError):
+  def __init__(self, code, url):
+    self.code = code
+    self.url = url
+    super(GerritError, self).__init__('Error {}: {}'.format(code, url))
+
+
+def call(endpoint, method='GET'):
+  if method != 'GET':
+    raise NotImplementedError('Currently only HTTP GET is supported.')
+  gerrit_url = 'https://android-review.googlesource.com'
+  url = gerrit_url + endpoint
+  response = requests.get(url)
+  if response.status_code != 200:
+    raise GerritError(response.status_code, url)
+  return response.text[5:]
+
+
+def ref_for_change(change_id):
+  endpoint = '/changes/{}/detail?o=CURRENT_REVISION'.format(change_id)
+  change = json.loads(call(endpoint))
+  commit = change['current_revision']
+  return change['revisions'][commit]['fetch']['http']['ref']
+
+
+def get_labels(change_id, patch_set):
+  """Returns labels attached to a revision.
+
+  Returned data is in the following format:
+  {
+      'Code-Review': {
+          <email>: <value>,
+          ...
+      },
+      'Verified': {
+          <email>: <value>,
+          ...
+      }
+  }
+  """
+  details = call('/changes/{}/revisions/{}/review'.format(
+      change_id, patch_set))
+  labels = {'Code-Review': {}, 'Verified': {}}
+  for review in details['labels']['Code-Review']['all']:
+    if 'value' in review and 'email' in review:
+      labels['Code-Review'][review['email']] = int(review['value'])
+  for review in details['labels']['Verified']['all']:
+    if 'value' in review and 'email' in review:
+      labels['Verified'][review['email']] = int(review['value'])
+  return labels