示例#1
0
    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,
     )
示例#4
0
 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),
   )
示例#5
0
    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
示例#6
0
    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),
        )