tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

__init__.py (2676B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 2.0. If a copy of the MPL was not distributed with this
      3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 
      5 import argparse
      6 import os
      7 import re
      8 import shlex
      9 
     10 from taskgraph.decision import PER_PROJECT_PARAMETERS
     11 from taskgraph.parameters import extend_parameters_schema
     12 from taskgraph.util.vcs import get_repository
     13 from voluptuous import Any, Optional, Required
     14 
     15 
     16 TRY_SYNTAX_RE = re.compile(r"\btry:\s*(.*)\s*$", re.M)
     17 
     18 def parse_try_syntax(message):
     19    parser = argparse.ArgumentParser()
     20    parser.add_argument("--nspr-patch", action="store_true")
     21    parser.add_argument("-b", "--build", default="do")
     22    parser.add_argument("-p", "--platform", default="all")
     23    parser.add_argument("-u", "--unittests", default="none")
     24    parser.add_argument("-t", "--tools", default="none")
     25    parser.add_argument("-e", "--extra-builds")
     26    match = TRY_SYNTAX_RE.search(message)
     27    if not match:
     28        return
     29    args = shlex.split(match.group(1))
     30    opts = parser.parse_args(args)
     31    builds = [t for t in opts.build if t in ["d", "o"]]
     32    # If the given value is nonsense default to debug and opt builds.
     33    if not builds:
     34        builds = ["d", "o"]
     35 
     36    platforms = opts.platform.split(",")
     37 
     38    unittests = opts.unittests.split(",")
     39    if "gtests" in unittests:
     40        unittests.append("gtest")
     41 
     42    tools = opts.tools.split(",")
     43    return {
     44        "nspr_patch": opts.nspr_patch,
     45        "builds": builds,
     46        "platforms": platforms,
     47        "unittests": unittests,
     48        "tools": tools,
     49        "extra": opts.extra_builds == "all",
     50    }
     51 
     52 
     53 def decision_parameters(graph_config, parameters):
     54    repo_path = os.getcwd()
     55    repo = get_repository(repo_path)
     56    try:
     57        commit_message = repo.get_commit_message()
     58    except UnicodeDecodeError:
     59        commit_message = ""
     60    parameters["try_options"] = {}
     61    if parameters["project"] != "nss-try":
     62        return
     63    args = parse_try_syntax(commit_message)
     64    if args:
     65       parameters["try_options"] = args
     66 
     67 
     68 def default_parameters(repo_root):
     69    return {
     70        "try_options": {},
     71    }
     72 
     73 
     74 def register(graph_config):
     75    schema = {
     76        Optional("try_options"): {
     77            Optional("nspr_patch"): bool,
     78            Optional("builds"): [Any("d", "o")],
     79            Optional("platforms"): [str],
     80            Optional("unittests"): [str],
     81            Optional("tools"): [str],
     82            Optional("extra"): bool,
     83        },
     84    }
     85    extend_parameters_schema(schema, default_parameters)
     86 
     87    from . import target_tasks
     88 
     89    PER_PROJECT_PARAMETERS["nss-try"] = {"target_tasks_method": "nss_try_tasks"}