--- a/taskcluster/taskgraph/try_option_syntax.py
+++ b/taskcluster/taskgraph/try_option_syntax.py
@@ -195,27 +195,30 @@ def escape_whitespace_in_brackets(input_
result += '\ '
continue
result += char
return result
-def parse_message(message):
+def find_try_idx(message):
# shlex used to ensure we split correctly when giving values to argparse.
parts = shlex.split(escape_whitespace_in_brackets(message))
try_idx = None
for idx, part in enumerate(parts):
if part == TRY_DELIMITER:
try_idx = idx
break
- if try_idx is None:
- return None
+ return try_idx, parts
+
+
+def parse_message(message):
+ try_idx, parts = find_try_idx(message)
# Argument parser based on try flag flags
parser = argparse.ArgumentParser()
parser.add_argument('-b', '--build', dest='build_types')
parser.add_argument('-p', '--platform', nargs='?',
dest='platforms', const='all', default='all')
parser.add_argument('-u', '--unittests', nargs='?',
dest='unittests', const='all', default='all')
@@ -230,16 +233,17 @@ def parse_message(message):
parser.add_argument('--rebuild-talos', dest='talos_trigger_tests', action='store',
type=int, default=1)
parser.add_argument('--setenv', dest='env', action='append')
parser.add_argument('--spsProfile', dest='profile', action='store_true')
parser.add_argument('--tag', dest='tag', action='store', default=None)
parser.add_argument('--no-retry', dest='no_retry', action='store_true')
# In order to run test jobs multiple times
parser.add_argument('--rebuild', dest='trigger_tests', type=int, default=1)
+ parts = parts[try_idx:] if try_idx is not None else []
args, _ = parser.parse_known_args(parts[try_idx:])
return args
class TryOptionSyntax(object):
def __init__(self, message, full_task_graph):
"""
@@ -279,19 +283,22 @@ class TryOptionSyntax(object):
self.interactive = False
self.notifications = None
self.talos_trigger_tests = 0
self.env = []
self.profile = False
self.tag = None
self.no_retry = False
+ try_idx, _ = find_try_idx(message)
+ if try_idx is None:
+ return None
+
args = parse_message(message)
- if args is None:
- return
+ assert args is not None
self.jobs = self.parse_jobs(args.jobs)
self.build_types = self.parse_build_types(args.build_types)
self.platforms = self.parse_platforms(args.platforms)
self.unittests = self.parse_test_option(
"unittest_try_name", args.unittests, full_task_graph)
self.talos = self.parse_test_option("talos_try_name", args.talos, full_task_graph)
self.trigger_tests = args.trigger_tests