| Index: tools/submit_try
|
| diff --git a/tools/submit_try b/tools/submit_try
|
| index 6647b89e1c1a8593de73314bbe958d156ffb87da..969fdfcd5709bcc45b9545f90cd8a258b09a70e4 100755
|
| --- a/tools/submit_try
|
| +++ b/tools/submit_try
|
| @@ -23,7 +23,7 @@ import svn
|
| import sys
|
| import tempfile
|
|
|
| -import buildbot_globals
|
| +import retrieve_from_googlesource
|
|
|
|
|
| # Alias which can be used to run a try on every builder.
|
| @@ -37,11 +37,13 @@ REGEX = 'regex'
|
|
|
| ALL_ALIASES = [ALL_BUILDERS, COMPILE_BUILDERS, REGEX, CQ_BUILDERS]
|
|
|
| +LARGE_NUMBER_OF_BOTS = 5
|
| +
|
| GIT = 'git.bat' if os.name == 'nt' else 'git'
|
|
|
| # URL of the slaves.cfg file in the Skia buildbot sources.
|
| -SLAVES_CFG_URL = ('https://skia.googlesource.com/buildbot/+/master/'
|
| - 'master/slaves.cfg')
|
| +SKIA_REPO = 'https://skia.googlesource.com/buildbot'
|
| +SLAVES_CFG_PATH = 'master/slaves.cfg'
|
|
|
| # All try builders have this suffix.
|
| TRYBOT_SUFFIX = '-Trybot'
|
| @@ -66,29 +68,14 @@ def FindDepotTools():
|
| return depot_tools_dir
|
|
|
|
|
| -def GetCheckoutRoot(is_svn=True):
|
| - """ Determine where the local checkout is rooted.
|
| -
|
| - is_svn: boolean; whether we're in an SVN checkout. If False, assume we're in
|
| - a git checkout.
|
| - """
|
| - if is_svn:
|
| - repo = svn.Svn(os.curdir)
|
| - svn_info = repo.GetInfo()
|
| - url = svn_info.get(URL_STR, None)
|
| - repo_root = svn_info.get(REPO_ROOT_STR, None)
|
| - if not url or not repo_root:
|
| - raise Exception('Couldn\'t find checkout root!')
|
| - if url == repo_root:
|
| - return 'svn'
|
| - return url[len(repo_root)+1:]
|
| - else:
|
| - cmd = ['git', 'rev-parse', '--show-toplevel']
|
| - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
| - stderr=subprocess.STDOUT)
|
| - if proc.wait() != 0:
|
| - raise Exception('Couldn\'t find checkout root!')
|
| - return os.path.basename(proc.communicate()[0])
|
| +def GetCheckoutRoot():
|
| + """ Determine where the local checkout is rooted."""
|
| + cmd = ['git', 'rev-parse', '--show-toplevel']
|
| + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
| + stderr=subprocess.STDOUT)
|
| + if proc.wait() != 0:
|
| + raise Exception('Couldn\'t find checkout root!')
|
| + return os.path.basename(proc.communicate()[0])
|
|
|
|
|
| def GetTryRepo():
|
| @@ -107,7 +94,7 @@ def RetrieveTrybotList():
|
| """Retrieve the list of known trybots from the checked-in buildbot
|
| configuration."""
|
| # Retrieve the slaves.cfg file from the repository.
|
| - slaves_cfg_text = buildbot_globals.retrieve_from_googlesource(SLAVES_CFG_URL)
|
| + slaves_cfg_text = retrieve_from_googlesource.get(SKIA_REPO, SLAVES_CFG_PATH)
|
|
|
| # Execute the slaves.cfg file to obtain the list of slaves.
|
| vars = {}
|
| @@ -205,15 +192,6 @@ Can also use the following aliases to run on groups of builders-
|
| if using_bots:
|
| Error('Cannot specify "%s" with additional builder names or '
|
| 'aliases.' % bot)
|
| - if bot == ALL_BUILDERS:
|
| - are_you_sure = raw_input('Running a try on every bot is very '
|
| - 'expensive. You may be able to get '
|
| - 'enough information by running on a '
|
| - 'smaller set of bots. Are you sure you '
|
| - 'want to run your try job on all of the '
|
| - 'trybots? [y,n]: ')
|
| - if are_you_sure == 'y':
|
| - using_bots = trybots
|
| elif bot == COMPILE_BUILDERS:
|
| using_bots = [t for t in trybots if t.startswith('Build')]
|
| elif bot == CQ_BUILDERS:
|
| @@ -244,72 +222,57 @@ Can also use the following aliases to run on groups of builders-
|
| Error('You must specify a changelist name.')
|
| if not using_bots:
|
| Error('You must specify one or more builders using --bot.')
|
| + if len(using_bots) > LARGE_NUMBER_OF_BOTS:
|
| + are_you_sure = raw_input('Running a try on a large number of bots is very '
|
| + 'expensive. You may be able to get enough '
|
| + 'information by running on a smaller set of bots. '
|
| + 'Are you sure you want to do this? [y,n]: ')
|
| + if are_you_sure != 'y':
|
| + Error()
|
| return CollectedArgs(bots=using_bots, changelist=changelist,
|
| revision=revision)
|
|
|
|
|
| -def SubmitTryRequest(args, is_svn=True):
|
| - """ Submits a try request for the given changelist on the given list of
|
| - trybots.
|
| +def SubmitTryRequest(trybots, revision=None):
|
| + """ Submits a try request on the given list of trybots.
|
|
|
| - args: Object whose properties are derived from command-line arguments. If
|
| - is_svn is True, it should contain:
|
| - - changelist: string; the name of the changelist to try.
|
| - - bot: list of strings; the names of the try builders to run.
|
| - - revision: optional, int; the revision number from which to run the try.
|
| - If is_svn is False, it should contain:
|
| - - bot: list of strings; the names of the try builders to run.
|
| - - revision: optional, int; the revision number from which to run the try.
|
| - is_svn: boolean; are we in an SVN repo?
|
| + Args:
|
| + trybots: list of strings; the names of the try builders to run.
|
| + revision: optional string; the revision from which to run the try.
|
| """
|
| - botlist = ','.join(['%s%s' % (bot, TRYBOT_SUFFIX) for bot in args.bots])
|
| - if is_svn:
|
| - gcl_cmd = 'gcl.bat' if os.name == 'nt' else 'gcl'
|
| - try_args = [gcl_cmd, 'try', args.changelist,
|
| - '--root', GetCheckoutRoot(is_svn),
|
| - '--bot', botlist]
|
| - if args.revision:
|
| - try_args.extend(['-r', args.revision])
|
| - print ' '.join(try_args)
|
| - proc = subprocess.Popen(try_args, stdout=subprocess.PIPE,
|
| - stderr=subprocess.STDOUT)
|
| - if proc.wait() != 0:
|
| - raise Exception('Failed to submit try request: %s' % (
|
| - proc.communicate()[0]))
|
| - print proc.communicate()[0]
|
| - else:
|
| - # Find depot_tools. This is needed to import git_cl and trychange.
|
| - sys.path.append(FindDepotTools())
|
| - import git_cl
|
| - import trychange
|
| -
|
| - cmd = [GIT, 'diff', git_cl.Changelist().GetUpstreamBranch(),
|
| - '--no-ext-diff']
|
| - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
| - git_data = proc.communicate()
|
| - if git_data[0] is None:
|
| - raise Exception('Failed to capture git diff!')
|
| -
|
| - temp_dir = tempfile.mkdtemp()
|
| - try:
|
| - diff_file = os.path.join(temp_dir, 'patch.diff')
|
| - with open(diff_file, 'wb') as f:
|
| - f.write(git_data[0])
|
| - f.close()
|
| -
|
| - try_args = ['--use_svn',
|
| - '--svn_repo', GetTryRepo(),
|
| - '--root', GetCheckoutRoot(is_svn),
|
| - '--bot', botlist,
|
| - '--diff', diff_file,
|
| - ]
|
| - if args.revision:
|
| - try_args.extend(['-r', args.revision])
|
| -
|
| - # Submit the try request.
|
| - trychange.TryChange(try_args, None, False)
|
| - finally:
|
| - shutil.rmtree(temp_dir)
|
| + botlist = ','.join(['%s%s' % (bot, TRYBOT_SUFFIX) for bot in trybots])
|
| + # Find depot_tools. This is needed to import git_cl and trychange.
|
| + sys.path.append(FindDepotTools())
|
| + import git_cl
|
| + import trychange
|
| +
|
| + cmd = [GIT, 'diff', git_cl.Changelist().GetUpstreamBranch(),
|
| + '--no-ext-diff']
|
| + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
| + git_data = proc.communicate()
|
| + if git_data[0] is None:
|
| + raise Exception('Failed to capture git diff!')
|
| +
|
| + temp_dir = tempfile.mkdtemp()
|
| + try:
|
| + diff_file = os.path.join(temp_dir, 'patch.diff')
|
| + with open(diff_file, 'wb') as f:
|
| + f.write(git_data[0])
|
| + f.close()
|
| +
|
| + try_args = ['--use_svn',
|
| + '--svn_repo', GetTryRepo(),
|
| + '--root', GetCheckoutRoot(),
|
| + '--bot', botlist,
|
| + '--diff', diff_file,
|
| + ]
|
| + if revision:
|
| + try_args.extend(['-r', revision])
|
| +
|
| + # Submit the try request.
|
| + trychange.TryChange(try_args, None, False)
|
| + finally:
|
| + shutil.rmtree(temp_dir)
|
|
|
|
|
| def main():
|
| @@ -324,7 +287,7 @@ def main():
|
| is_svn=is_svn)
|
|
|
| # Submit the try request.
|
| - SubmitTryRequest(args, is_svn=is_svn)
|
| + SubmitTryRequest(args.bots, args.revision)
|
|
|
|
|
| if __name__ == '__main__':
|
|
|