Source code

Revision control

Copy as Markdown

Other Tools

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import argparse
import os
import re
import shlex
from taskgraph.decision import PER_PROJECT_PARAMETERS
from taskgraph.parameters import extend_parameters_schema
from taskgraph.util.vcs import get_repository
from voluptuous import Any, Optional, Required
TRY_SYNTAX_RE = re.compile(r"\btry:\s*(.*)\s*$", re.M)
def parse_try_syntax(message):
parser = argparse.ArgumentParser()
parser.add_argument("--nspr-patch", action="store_true")
parser.add_argument("-b", "--build", default="do")
parser.add_argument("-p", "--platform", default="all")
parser.add_argument("-u", "--unittests", default="none")
parser.add_argument("-t", "--tools", default="none")
parser.add_argument("-e", "--extra-builds")
match = TRY_SYNTAX_RE.search(message)
if not match:
return
args = shlex.split(match.group(1))
opts = parser.parse_args(args)
builds = [t for t in opts.build if t in ["d", "o"]]
# If the given value is nonsense default to debug and opt builds.
if not builds:
builds = ["d", "o"]
platforms = opts.platform.split(",")
unittests = opts.unittests.split(",")
if "gtests" in unittests:
unittests.append("gtest")
tools = opts.tools.split(",")
return {
"nspr_patch": opts.nspr_patch,
"builds": builds,
"platforms": platforms,
"unittests": unittests,
"tools": tools,
"extra": opts.extra_builds == "all",
}
def decision_parameters(graph_config, parameters):
repo_path = os.getcwd()
repo = get_repository(repo_path)
try:
commit_message = repo.get_commit_message()
except UnicodeDecodeError:
commit_message = ""
parameters["try_options"] = {}
if parameters["project"] != "nss-try":
return
args = parse_try_syntax(commit_message)
if args:
parameters["try_options"] = args
def default_parameters(repo_root):
return {
"try_options": {},
}
def register(graph_config):
schema = {
Optional("try_options"): {
Optional("nspr_patch"): bool,
Optional("builds"): [Any("d", "o")],
Optional("platforms"): [str],
Optional("unittests"): [str],
Optional("tools"): [str],
Optional("extra"): bool,
},
}
extend_parameters_schema(schema, default_parameters)
from . import target_tasks
PER_PROJECT_PARAMETERS["nss-try"] = {"target_tasks_method": "nss_try_tasks"}