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__': |