def setup_legacy_graph( native: Native, options_bootstrapper: OptionsBootstrapper, build_configuration: BuildConfiguration, ) -> LegacyGraphScheduler: """Construct and return the components necessary for LegacyBuildGraph construction.""" build_root = get_buildroot() bootstrap_options = options_bootstrapper.bootstrap_options.for_global_scope( ) use_gitignore = bootstrap_options.pants_ignore_use_gitignore return EngineInitializer.setup_legacy_graph_extended( OptionsInitializer.compute_pants_ignore(build_root, bootstrap_options), use_gitignore, bootstrap_options.local_store_dir, bootstrap_options.local_execution_root_dir, bootstrap_options.named_caches_dir, bootstrap_options.build_file_prelude_globs, options_bootstrapper, build_configuration, build_root=build_root, native=native, glob_match_error_behavior=( bootstrap_options.files_not_found_behavior. to_glob_match_error_behavior()), build_ignore_patterns=bootstrap_options.build_ignore, exclude_target_regexps=bootstrap_options.exclude_target_regexp, subproject_roots=bootstrap_options.subproject_roots, include_trace_on_error=bootstrap_options. print_exception_stacktrace, execution_options=ExecutionOptions.from_bootstrap_options( bootstrap_options), )
def setup_graph( options_bootstrapper: OptionsBootstrapper, build_configuration: BuildConfiguration, ) -> GraphScheduler: native = Native() build_root = get_buildroot() bootstrap_options = options_bootstrapper.bootstrap_options.for_global_scope( ) return EngineInitializer.setup_graph_extended( options_bootstrapper, build_configuration, ExecutionOptions.from_bootstrap_options(bootstrap_options), pants_ignore_patterns=OptionsInitializer.compute_pants_ignore( build_root, bootstrap_options), use_gitignore=bootstrap_options.pants_ignore_use_gitignore, local_store_dir=bootstrap_options.local_store_dir, local_execution_root_dir=bootstrap_options. local_execution_root_dir, named_caches_dir=bootstrap_options.named_caches_dir, ca_certs_path=bootstrap_options.ca_certs_path, build_root=build_root, native=native, include_trace_on_error=bootstrap_options. print_exception_stacktrace, )
def setup_graph( options: Options, build_configuration: BuildConfiguration, executor: Optional[PyExecutor] = None, ) -> GraphScheduler: native = Native() build_root = get_buildroot() bootstrap_options = options.bootstrap_option_values() assert bootstrap_options is not None executor = executor or PyExecutor( *OptionsInitializer.compute_executor_arguments(bootstrap_options)) return EngineInitializer.setup_graph_extended( build_configuration, ExecutionOptions.from_options(options), native=native, executor=executor, pants_ignore_patterns=OptionsInitializer.compute_pants_ignore( build_root, bootstrap_options), use_gitignore=bootstrap_options.pants_ignore_use_gitignore, local_store_dir=bootstrap_options.local_store_dir, local_execution_root_dir=bootstrap_options. local_execution_root_dir, named_caches_dir=bootstrap_options.named_caches_dir, ca_certs_path=bootstrap_options.ca_certs_path, build_root=build_root, include_trace_on_error=bootstrap_options.print_stacktrace, native_engine_visualize_to=bootstrap_options. native_engine_visualize_to, )
def setup_legacy_graph(native, options_bootstrapper, build_configuration): """Construct and return the components necessary for LegacyBuildGraph construction.""" build_root = get_buildroot() bootstrap_options = options_bootstrapper.bootstrap_options.for_global_scope() return EngineInitializer.setup_legacy_graph_extended( OptionsInitializer.compute_pants_ignore(build_root, bootstrap_options), bootstrap_options.local_store_dir, bootstrap_options.build_file_imports, options_bootstrapper, build_configuration, build_root=build_root, native=native, glob_match_error_behavior=bootstrap_options.glob_expansion_failure, build_ignore_patterns=bootstrap_options.build_ignore, exclude_target_regexps=bootstrap_options.exclude_target_regexp, subproject_roots=bootstrap_options.subproject_roots, include_trace_on_error=bootstrap_options.print_exception_stacktrace, execution_options=ExecutionOptions.from_bootstrap_options(bootstrap_options), )
def __init__( self, *, rules: Optional[Iterable] = None, target_types: Optional[Iterable[Type[Target]]] = None, objects: Optional[Dict[str, Any]] = None, context_aware_object_factories: Optional[Dict[str, Any]] = None, isolated_local_store: bool = False, ca_certs_path: Optional[str] = None, ) -> None: self.build_root = os.path.realpath(mkdtemp(suffix="_BUILD_ROOT")) safe_mkdir(self.build_root, clean=True) safe_mkdir(self.pants_workdir) BuildRoot().path = self.build_root # TODO: Redesign rule registration for tests to be more ergonomic and to make this less # special-cased. all_rules = ( *(rules or ()), *source_root.rules(), *pants_environment.rules(), QueryRule(WrappedTarget, [Address]), QueryRule(UnionMembership, []), ) build_config_builder = BuildConfiguration.Builder() build_config_builder.register_aliases( BuildFileAliases( objects=objects, context_aware_object_factories=context_aware_object_factories)) build_config_builder.register_rules(all_rules) build_config_builder.register_target_types(target_types or ()) self.build_config = build_config_builder.create() options_bootstrapper = create_options_bootstrapper() global_options = options_bootstrapper.bootstrap_options.for_global_scope( ) local_store_dir = (os.path.realpath(safe_mkdtemp()) if isolated_local_store else global_options.local_store_dir) local_execution_root_dir = global_options.local_execution_root_dir named_caches_dir = global_options.named_caches_dir graph_session = EngineInitializer.setup_graph_extended( pants_ignore_patterns=OptionsInitializer.compute_pants_ignore( self.build_root, global_options), use_gitignore=False, local_store_dir=local_store_dir, local_execution_root_dir=local_execution_root_dir, named_caches_dir=named_caches_dir, native=Native(), options_bootstrapper=options_bootstrapper, build_root=self.build_root, build_configuration=self.build_config, executor=_EXECUTOR, execution_options=ExecutionOptions.from_bootstrap_options( global_options), ca_certs_path=ca_certs_path, ).new_session( build_id="buildid_for_test", session_values=SessionValues({ OptionsBootstrapper: options_bootstrapper, PantsEnvironment: PantsEnvironment() }), ) self.scheduler = graph_session.scheduler_session
def setup_legacy_graph( native: Native, options_bootstrapper: OptionsBootstrapper, build_configuration: BuildConfiguration, ) -> LegacyGraphScheduler: """Construct and return the components necessary for LegacyBuildGraph construction.""" build_root = get_buildroot() bootstrap_options = options_bootstrapper.bootstrap_options.for_global_scope( ) glob_expansion_failure_configured = not bootstrap_options.is_default( "glob_expansion_failure") files_not_found_behavior_configured = not bootstrap_options.is_default( "files_not_found_behavior") if glob_expansion_failure_configured and files_not_found_behavior_configured: raise ValueError( "Conflicting options used. You used the new, preferred `--files-not-found-behavior`, but " "also used the deprecated `--glob-expansion-failure`.\n\nPlease " "specify only one of these (preferably `--files-not-found-behavior`)." ) glob_match_error_behavior = (bootstrap_options.files_not_found_behavior .to_glob_match_error_behavior() if files_not_found_behavior_configured else bootstrap_options.glob_expansion_failure) deprecated_conditional( lambda: cast( bool, bootstrap_options.build_file_imports == BuildFileImportsBehavior.allow), removal_version="1.27.0.dev0", entity_description="Using `--build-file-imports=allow`", hint_message= ("Import statements should be avoided in BUILD files because they can easily break Pants " "caching and lead to stale results. It is not safe to ignore warnings of imports, so the " "`allow` option is being removed.\n\nTo prepare for this change, either set " "`--build-file-imports=warn` or `--build-file-imports=error` (we recommend using `error`)." "\n\nIf you still need to keep the functionality you have from the import statement, " "consider rewriting your code into a Pants plugin: " "https://www.pantsbuild.org/howto_plugin.html")) deprecated_conditional( lambda: bootstrap_options.is_default("build_file_imports"), removal_version="1.27.0.dev0", entity_description="Defaulting to `--build-file-imports=warn`", hint_message= ("Import statements should be avoided in BUILD files because they can easily break Pants " "caching and lead to stale results. The default behavior will change from warning to " "erroring in 1.27.0.dev0, and the option will be removed in 1.29.0.dev0.\n\nTo prepare for " "this change, please explicitly set the option `--build-file-imports=warn` or " "`--build-file-imports=error` (we recommend using `error`).\n\nIf you still need to keep " "the functionality you have from import statements, consider rewriting your code into a " "Pants plugin: https://www.pantsbuild.org/howto_plugin.html")) return EngineInitializer.setup_legacy_graph_extended( OptionsInitializer.compute_pants_ignore(build_root, bootstrap_options), bootstrap_options.local_store_dir, bootstrap_options.build_file_imports, options_bootstrapper, build_configuration, build_root=build_root, native=native, glob_match_error_behavior=glob_match_error_behavior, build_ignore_patterns=bootstrap_options.build_ignore, exclude_target_regexps=bootstrap_options.exclude_target_regexp, subproject_roots=bootstrap_options.subproject_roots, include_trace_on_error=bootstrap_options. print_exception_stacktrace, execution_options=ExecutionOptions.from_bootstrap_options( bootstrap_options), )