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:
parent
25bc2f86c2
commit
da7cb28768
95
tools/gcl_try
Executable file
95
tools/gcl_try
Executable 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())
|
Loading…
Reference in New Issue
Block a user