Add wrapper for "gcl try"

Adds some validation for --bot
Review URL: https://codereview.appspot.com/7179048

git-svn-id: http://skia.googlecode.com/svn/trunk@7315 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
borenet@google.com 2013-01-22 18:23:56 +00:00
parent 25bc2f86c2
commit da7cb28768

95
tools/gcl_try Executable file
View File

@ -0,0 +1,95 @@
#!/usr/bin/python
# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""
gcl_try: Submit a try request.
This is a thin wrapper around "gcl try" which adds some validation.
"""
import argparse
import httplib
import json
import os
import subprocess
import sys
ALL_BUILDERS = 'all'
SKIA_BUILD_MASTER_HOST = '70.32.156.51'
SKIA_BUILD_MASTER_PORT = '10117'
TRYBOT_SUFFIX = '_Trybot'
def RetrieveTrybotList():
""" Retrieve the list of known trybots from the build master, stripping
TRYBOT_SUFFIX from the name. """
trybots = []
connection = httplib.HTTPConnection(SKIA_BUILD_MASTER_HOST,
SKIA_BUILD_MASTER_PORT)
httplib.HTTPConnection
connection.request('GET', '/json/builders')
response = connection.getresponse()
builders = json.load(response)
for builder in builders:
if builder.endswith(TRYBOT_SUFFIX):
trybots.append(builder[:-len(TRYBOT_SUFFIX)])
return trybots
def ValidateArgs(trybots):
""" Parse and validate command-line arguments. If the arguments are valid,
returns a tuple of (<changelist name>, <list of trybots>).
trybots: A list of the known try builders.
"""
parser = argparse.ArgumentParser(
prog=os.path.basename(__file__),
description='%(prog)s: Submit a try request.',
usage='%(prog)s [-h] <changelist> --bot <buildername> [<buildername ...]')
parser.add_argument('changelist', metavar='<changelist>',
help='Changelist to try.')
parser.add_argument('--bot', metavar='<buildername>', nargs='+',
help='Builder(s) on which to try the change. One of: %s'
% ', '.join(trybots),
choices=trybots, required=True)
args = parser.parse_args()
if args.bot == [ALL_BUILDERS]:
bots = trybots
else:
bots = args.bot
return args.changelist, bots
def SubmitTryRequest(changelist, bots):
""" Submits a try request for the given changelist on the given list of
trybots.
changelist: string; the name of the changelist to try.
bots: list of trybots on which to run the try.
"""
if os.name == 'nt':
gcl = 'gcl.bat'
else:
gcl = 'gcl'
cmd = [gcl, 'try', changelist, '--bot',
','.join(['%s%s' % (bot, TRYBOT_SUFFIX) for bot in bots])]
print 'Running command: %s' % ' '.join(cmd)
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
if proc.wait() != 0:
raise Exception('Failed to submit try request:\n%s' % proc.communicate()[0])
print proc.communicate()[0]
def main():
trybots = RetrieveTrybotList()
changelist, bots = ValidateArgs(trybots=trybots)
SubmitTryRequest(changelist, bots)
if __name__ == '__main__':
sys.exit(main())