#!/usr/bin/env python3 import importlib.util import os import os.path import argparse import sys import shlex import textwrap BUILD_BIN_DIR=r"@install_dir@" class _SilentArgumentParser(argparse.ArgumentParser): """ArgumentParser variant that silently swallows errors.""" def error(self, message): pass # We do not want people to use this wrapper and provide --installDir, # especially if the user tries to supply the wrong installDir. Prevent that # by parsing the command line flags and make sure that --installDir is not # passed in. (only the run command supports this flag) try: parser = _SilentArgumentParser(add_help=False) subparsers = parser.add_subparsers(dest="cmd") run = subparsers.add_parser("run") run.add_argument("--installDir") args, _ = parser.parse_known_args() if "installDir" in args and args.installDir is not None: err = textwrap.dedent(f"""\ Argument '--installDir' passed to resmoke wrapper script, but this action can have unforeseen consequences. Either remove --installDir, or call resmoke as `buildscripts/resmoke.py run --installDir={shlex.quote(args.installDir)}`""") raise RuntimeError(err) run_cmd_called = args.cmd == "run" except RuntimeError: raise except: run_cmd_called = False # If the run subcommand is being used, inject installDir if run_cmd_called: i = sys.argv.index("run") sys.argv.insert(i+1, "--installDir") sys.argv.insert(i+2, BUILD_BIN_DIR) path_to_resmoke_py = os.path.join("buildscripts", "resmoke.py") # import and run the cli spec = importlib.util.spec_from_file_location("__main__", path_to_resmoke_py) resmoke = importlib.util.module_from_spec(spec) resmoke.__package__ = None spec.loader.exec_module(resmoke) # -*- mode: python -*-