Index: commit_queue.py |
diff --git a/commit_queue.py b/commit_queue.py |
index 99eea34ec01579c48276078f134faf232a234a99..2bcd841fa44d08858f69467354af77576217597c 100755 |
--- a/commit_queue.py |
+++ b/commit_queue.py |
@@ -9,6 +9,7 @@ |
__version__ = '0.1' |
import functools |
+import json |
import logging |
import optparse |
import os |
@@ -21,6 +22,11 @@ import auth |
import fix_encoding |
import rietveld |
+THIRD_PARTY_DIR = os.path.join(os.path.dirname(__file__), 'third_party') |
+sys.path.append(THIRD_PARTY_DIR) |
+ |
+from cq_client import cq_pb2 |
+from google.protobuf import text_format |
def usage(more): |
def hook(fn): |
@@ -102,6 +108,46 @@ def CMDclear(parser, args): |
return set_commit(obj, options.issue, '0') |
+def CMDbuilders(parser, args): |
+ """Prints json-formatted list of builders given a path to cq.cfg file. |
+ |
+ The output is a dictionary in the following format: |
+ { |
+ 'master_name': { |
+ 'builder_name': { |
+ 'custom_property': 'value', |
+ 'testfilter': 'compile' |
+ }, |
+ 'another_builder': {} |
+ }, |
+ 'another_master': { |
+ 'third_builder': {} |
+ } |
+ } |
+ """ |
+ _, args = parser.parse_args(args) |
+ if len(args) != 1: |
+ parser.error('Expected a single path to CQ config. Got: %s' % |
+ ' '.join(args)) |
+ |
+ with open(args[0]) as config_file: |
+ cq_config = config_file.read() |
+ |
+ config = cq_pb2.Config() |
+ text_format.Merge(cq_config, config) |
+ masters = {} |
+ if config.HasField('verifiers') and config.verifiers.HasField('try_job'): |
+ for bucket in config.verifiers.try_job.buckets: |
+ masters.setdefault(bucket.name, {}) |
+ for builder in bucket.builders: |
+ if not builder.HasField('experiment_percentage'): |
+ masters[bucket.name].setdefault(builder.name, {}) |
+ for prop in builder.properties: |
+ masters[bucket.name][builder.name][prop.name] = prop.value |
+ print json.dumps(masters) |
+ |
+CMDbuilders.func_usage_more = '<path-to-cq-config>' |
+ |
############################################################################### |
## Boilerplate code |