Files
mongo/buildscripts/resmokelib/parser.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

81 lines
2.7 KiB
Python
Raw Normal View History

"""Parser for command line arguments."""
import argparse
import shlex
from buildscripts.resmokelib import configure_resmoke
from buildscripts.resmokelib.discovery import DiscoveryPlugin
from buildscripts.resmokelib.generate_fcv_constants import GenerateFCVConstantsPlugin
from buildscripts.resmokelib.generate_fuzz_config import GenerateFuzzConfigPlugin
from buildscripts.resmokelib.hang_analyzer import HangAnalyzerPlugin
from buildscripts.resmokelib.hang_analyzer.core_analyzer import CoreAnalyzerPlugin
from buildscripts.resmokelib.multiversion import MultiversionPlugin
from buildscripts.resmokelib.powercycle import PowercyclePlugin
from buildscripts.resmokelib.run import RunPlugin
_PLUGINS = [
RunPlugin(),
CoreAnalyzerPlugin(),
HangAnalyzerPlugin(),
PowercyclePlugin(),
GenerateFCVConstantsPlugin(),
DiscoveryPlugin(),
MultiversionPlugin(),
GenerateFuzzConfigPlugin(),
]
def get_parser(usage=None):
"""Get the resmoke parser."""
parser = argparse.ArgumentParser(usage=usage)
subparsers = parser.add_subparsers(dest="command")
parser.add_argument(
"--configDir",
dest="config_dir",
metavar="CONFIG_DIR",
help="Directory to search for resmoke configuration files",
)
parser.add_argument(
"--jstestsDir",
dest="jstests_dir",
metavar="CONFIG_DIR",
help="Directory to search for jstests files existence while suite validation",
)
# Add sub-commands.
for plugin in _PLUGINS:
plugin.add_subcommand(subparsers)
return parser
def parse(sys_args, usage=None) -> tuple[argparse.ArgumentParser, dict]:
"""Parse the CLI args."""
parser = get_parser(usage=usage)
parsed_args = parser.parse_args(sys_args)
return parser, vars(parsed_args)
def parse_command_line(sys_args, usage=None, should_configure_otel=True, **kwargs):
"""Parse the command line arguments passed to resmoke.py and return the subcommand object to execute."""
parser, parsed_args = parse(sys_args, usage)
subcommand = parsed_args["command"]
for plugin in _PLUGINS:
subcommand_obj = plugin.parse(
subcommand, parser, parsed_args, should_configure_otel, **kwargs
)
if subcommand_obj is not None:
return subcommand_obj
raise RuntimeError(f"Resmoke configuration has invalid subcommand: {subcommand}. Try '--help'")
def set_run_options(argstr="", should_configure_otel=True):
"""Populate the config module variables for the 'run' subcommand with the default options."""
parser, parsed_args = parse(["run"] + shlex.split(argstr))
configure_resmoke.validate_and_update_config(parser, parsed_args, should_configure_otel)