def create(cls, options_bootstrapper, build_configuration, init_subsystems=True): global_bootstrap_options = options_bootstrapper.get_bootstrap_options( ).for_global_scope() if global_bootstrap_options.pants_version != pants_version(): raise BuildConfigurationError( f"Version mismatch: Requested version was {global_bootstrap_options.pants_version}, " f"our version is {pants_version()}.") # Parse and register options. options = cls._construct_options(options_bootstrapper, build_configuration) GlobalOptions.validate_instance(options.for_global_scope()) if init_subsystems: Subsystem.set_options(options) return options
def select(argv): # Parse positional arguments to the script. args = _create_bootstrap_binary_arg_parser().parse_args(argv[1:]) # Resolve bootstrap options with a fake empty command line. options_bootstrapper = OptionsBootstrapper.create(env=os.environ, args=[argv[0]], allow_pantsrc=True) subsystems = (GlobalOptions, BinaryUtil.Factory) known_scope_infos = reduce(set.union, (ss.known_scope_infos() for ss in subsystems), set()) options = options_bootstrapper.get_full_options(known_scope_infos) # Initialize Subsystems. Subsystem.set_options(options) # If the filename provided ends in a known archive extension (such as ".tar.gz"), then we get the # appropriate Archiver to pass to BinaryUtil. archiver_for_current_binary = None filename = args.filename or args.util_name try: archiver_for_current_binary = archiver_for_path(filename) # BinaryRequest requires the `name` field to be provided without an extension, as it appends the # archiver's extension if one is provided, so we have to remove it here. filename = filename[:-(len(archiver_for_current_binary.extension) + 1)] except ValueError: pass binary_util = BinaryUtil.Factory.create() binary_request = BinaryRequest( supportdir="bin/{}".format(args.util_name), version=args.version, name=filename, platform_dependent=True, external_url_generator=None, archiver=archiver_for_current_binary, ) return binary_util.select(binary_request)