[git-cl-try] accept buckets from builders-map app

Context:
https://bugs.chromium.org/p/chromium/issues/detail?id=800355#c22

Prepare git-cl-try to a new format of builders-map.appspot.com response
where each entry contains buckets, as opposed to masters.

Bug: 800355
Change-Id: I5a90c6c4860a7e1fca843067c477a272d782cba1
Reviewed-on: https://chromium-review.googlesource.com/885100
Commit-Queue: Nodir Turakulov <nodir@chromium.org>
Reviewed-by: Aaron Gable <agable@chromium.org>
Reviewed-by: Andrii Shyshkalov <tandrii@chromium.org>
diff --git a/git_cl.py b/git_cl.py
index 311b637..39a4636 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -458,14 +458,19 @@
 
   bucket_map = {}
   for builder in builders:
-    masters = builders_map.get(builder, [])
-    if not masters:
-      return None, ('No matching master for builder %s.' % builder)
-    if len(masters) > 1:
-      return None, ('The builder name %s exists in multiple masters %s.' %
-                    (builder, masters))
-    bucket = _prefix_master(masters[0])
-    bucket_map.setdefault(bucket, {})[builder] = []
+    builder_info = builders_map.get(builder, {})
+    if isinstance(builder_info, list):
+      # This is a list of masters, legacy mode.
+      # TODO(nodir): remove this code path.
+      buckets = map(_prefix_master, builder_info)
+    else:
+      buckets = builder_info.get('buckets') or []
+    if not buckets:
+      return None, ('No matching bucket for builder %s.' % builder)
+    if len(buckets) > 1:
+      return None, ('The builder name %s exists in multiple buckets %s.' %
+                    (builder, buckets))
+    bucket_map.setdefault(buckets[0], {})[builder] = []
 
   return bucket_map, None