Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(500)

Side by Side Diff: commit_queue.py

Issue 1617163004: commit_queue validate: validate just correctness of protobuf. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Access the commit queue from the command line. 6 """Access the commit queue from the command line.
7 """ 7 """
8 8
9 __version__ = '0.1' 9 __version__ = '0.1'
10 10
11 import functools 11 import functools
12 import json 12 import json
13 import logging 13 import logging
14 import optparse 14 import optparse
15 import os 15 import os
16 import sys 16 import sys
17 import urllib2 17 import urllib2
18 18
19 import breakpad # pylint: disable=W0611 19 import breakpad # pylint: disable=W0611
20 20
21 import auth 21 import auth
22 import fix_encoding 22 import fix_encoding
23 import rietveld 23 import rietveld
24 24
25 THIRD_PARTY_DIR = os.path.join(os.path.dirname(__file__), 'third_party') 25 THIRD_PARTY_DIR = os.path.join(os.path.dirname(__file__), 'third_party')
26 sys.path.insert(0, THIRD_PARTY_DIR) 26 sys.path.insert(0, THIRD_PARTY_DIR)
27 27
28 from cq_client import cq_pb2 28 from cq_client import cq_pb2
29 from cq_client import validate_config
30 from protobuf26 import text_format 29 from protobuf26 import text_format
31 30
32 def usage(more): 31 def usage(more):
33 def hook(fn): 32 def hook(fn):
34 fn.func_usage_more = more 33 fn.func_usage_more = more
35 return fn 34 return fn
36 return hook 35 return hook
37 36
38 37
39 def need_issue(fn): 38 def need_issue(fn):
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 ' '.join(args)) 180 ' '.join(args))
182 print json.dumps(get_master_builder_map( 181 print json.dumps(get_master_builder_map(
183 args[0], 182 args[0],
184 include_experimental=options.include_experimental, 183 include_experimental=options.include_experimental,
185 include_triggered=options.include_triggered)) 184 include_triggered=options.include_triggered))
186 185
187 CMDbuilders.func_usage_more = '<path-to-cq-config>' 186 CMDbuilders.func_usage_more = '<path-to-cq-config>'
188 187
189 188
190 def CMDvalidate(parser, args): 189 def CMDvalidate(parser, args):
191 """Validates a CQ config. 190 """Validates a CQ config, returns 0 on valid config.
192 191
193 Takes a single argument - path to the CQ config to be validated. Returns 0 on 192 BUGS: this doesn't do semantic validation, only verifies validity of protobuf.
194 valid config, non-zero on invalid config. Errors and warnings are printed to 193 But don't worry - bad cq.cfg won't cause outages, luci-config service will
195 screen. 194 not accept them, will send warning email, and continue using previous
195 version.
196 """ 196 """
197 _, args = parser.parse_args(args) 197 _, args = parser.parse_args(args)
198 if len(args) != 1: 198 if len(args) != 1:
199 parser.error('Expected a single path to CQ config. Got: %s' % 199 parser.error('Expected a single path to CQ config. Got: %s' %
200 ' '.join(args)) 200 ' '.join(args))
201 201
202 with open(args[0]) as config_file: 202 config = cq_pb2.Config()
203 cq_config = config_file.read() 203 try:
204 return 0 if validate_config.IsValid(cq_config) else 1 204 with open(args[0]) as config_file:
205 text_config = config_file.read()
206 text_format.Merge(text_config, config)
207 # TODO(tandrii): provide an option to actually validate semantics of CQ
208 # config.
209 return 0
210 except text_format.ParseError as e:
211 print 'failed to parse cq.cfg: %s' % e
212 return 1
213
205 214
206 CMDvalidate.func_usage_more = '<path-to-cq-config>' 215 CMDvalidate.func_usage_more = '<path-to-cq-config>'
207 216
208 ############################################################################### 217 ###############################################################################
209 ## Boilerplate code 218 ## Boilerplate code
210 219
211 220
212 class OptionParser(optparse.OptionParser): 221 class OptionParser(optparse.OptionParser):
213 """An OptionParser instance with default options. 222 """An OptionParser instance with default options.
214 223
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 return CMDhelp(parser, args) 294 return CMDhelp(parser, args)
286 295
287 296
288 if __name__ == "__main__": 297 if __name__ == "__main__":
289 fix_encoding.fix_encoding() 298 fix_encoding.fix_encoding()
290 try: 299 try:
291 sys.exit(main()) 300 sys.exit(main())
292 except KeyboardInterrupt: 301 except KeyboardInterrupt:
293 sys.stderr.write('interrupted\n') 302 sys.stderr.write('interrupted\n')
294 sys.exit(1) 303 sys.exit(1)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698