Beispiel #1
0
  def create(cls, args, env, target_roots=None, daemon_graph_session=None,
             options_bootstrapper=None):
    """Creates a new LocalPantsRunner instance by parsing options.

    :param list args: The arguments (e.g. sys.argv) for this run.
    :param dict env: The environment (e.g. os.environ) for this run.
    :param TargetRoots target_roots: The target roots for this run.
    :param LegacyGraphSession daemon_graph_session: The graph helper for this session.
    :param OptionsBootstrapper options_bootstrapper: The OptionsBootstrapper instance to reuse.
    """
    build_root = get_buildroot()

    options, build_config, options_bootstrapper = cls.parse_options(
      args,
      env,
      options_bootstrapper=options_bootstrapper,
    )
    global_options = options.for_global_scope()
    # This works as expected due to the encapsulated_logger in DaemonPantsRunner and
    # we don't have to gate logging setup anymore.
    setup_logging_from_options(global_options)

    # Option values are usually computed lazily on demand,
    # but command line options are eagerly computed for validation.
    for scope in options.scope_to_flags.keys():
      options.for_scope(scope)

    # Verify configs.
    if global_options.verify_config:
      options_bootstrapper.verify_configs_against_options(options)

    # If we're running with the daemon, we'll be handed a session from the
    # resident graph helper - otherwise initialize a new one here.
    graph_session, scheduler_session = cls._maybe_init_graph_session(
      daemon_graph_session,
      options_bootstrapper,
      build_config,
      options
    )

    target_roots = cls._maybe_init_target_roots(
      target_roots,
      graph_session,
      options,
      build_root
    )

    profile_path = env.get('PANTS_PROFILE')

    return cls(
      build_root,
      options,
      options_bootstrapper,
      build_config,
      target_roots,
      graph_session,
      scheduler_session,
      daemon_graph_session is not None,
      profile_path
    )
Beispiel #2
0
 def parse_options(args, env, setup_logging=False, options_bootstrapper=None):
   options_bootstrapper = options_bootstrapper or OptionsBootstrapper(args=args, env=env)
   bootstrap_options = options_bootstrapper.get_bootstrap_options().for_global_scope()
   if setup_logging:
     # Bootstrap logging and then fully initialize options.
     setup_logging_from_options(bootstrap_options)
   build_config = BuildConfigInitializer.get(options_bootstrapper)
   options = OptionsInitializer.create(options_bootstrapper, build_config)
   return options, build_config, options_bootstrapper
  def _run(self):
    # Bootstrap options and logging.
    options_bootstrapper = self._options_bootstrapper or OptionsBootstrapper(env=self._env,
                                                                             args=self._args)
    bootstrap_options = options_bootstrapper.get_bootstrap_options().for_global_scope()
    setup_logging_from_options(bootstrap_options)
    build_config = BuildConfigInitializer.get(options_bootstrapper)
    options = OptionsInitializer.create(options_bootstrapper, build_config)
    global_options = options.for_global_scope()

    # Apply exiter options.
    self._exiter.apply_options(options)

    # Option values are usually computed lazily on demand,
    # but command line options are eagerly computed for validation.
    for scope in options.scope_to_flags.keys():
      options.for_scope(scope)

    # Verify the configs here.
    if global_options.verify_config:
      options_bootstrapper.verify_configs_against_options(options)

    # Launch RunTracker as early as possible (just after Subsystem options are initialized).
    run_tracker = RunTracker.global_instance()
    reporting = Reporting.global_instance()
    reporting.initialize(run_tracker, self._run_start_time)

    try:
      # Determine the build root dir.
      root_dir = get_buildroot()

      # Capture a repro of the 'before' state for this build, if needed.
      repro = Reproducer.global_instance().create_repro()
      if repro:
        repro.capture(run_tracker.run_info.get_as_dict())

      # Setup and run GoalRunner.
      goal_runner = GoalRunner.Factory(root_dir,
                                       options,
                                       build_config,
                                       run_tracker,
                                       reporting,
                                       self._target_roots,
                                       self._daemon_build_graph,
                                       self._exiter).setup()

      goal_runner_result = goal_runner.run()

      if repro:
        # TODO: Have Repro capture the 'after' state (as a diff) as well?
        repro.log_location_of_repro_file()
    finally:
      run_tracker_result = run_tracker.end()

    # Take the exit code with higher abs value in case of negative values.
    final_exit_code = goal_runner_result if abs(goal_runner_result) > abs(run_tracker_result) else run_tracker_result
    self._exiter.exit(final_exit_code)
Beispiel #4
0
    def _run(self):
        # Bootstrap options and logging.
        options_bootstrapper = self._options_bootstrapper or OptionsBootstrapper(
            env=self._env, args=self._args)
        bootstrap_options = options_bootstrapper.get_bootstrap_options(
        ).for_global_scope()
        setup_logging_from_options(bootstrap_options)
        build_config = BuildConfigInitializer.get(options_bootstrapper)
        options = OptionsInitializer.create(options_bootstrapper, build_config)
        global_options = options.for_global_scope()

        # Apply exiter options.
        self._exiter.apply_options(options)

        # Option values are usually computed lazily on demand,
        # but command line options are eagerly computed for validation.
        for scope in options.scope_to_flags.keys():
            options.for_scope(scope)

        # Verify the configs here.
        if global_options.verify_config:
            options_bootstrapper.verify_configs_against_options(options)

        # Launch RunTracker as early as possible (just after Subsystem options are initialized).
        run_tracker = RunTracker.global_instance()
        reporting = Reporting.global_instance()
        reporting.initialize(run_tracker, self._run_start_time)

        try:
            # Determine the build root dir.
            root_dir = get_buildroot()

            # Capture a repro of the 'before' state for this build, if needed.
            repro = Reproducer.global_instance().create_repro()
            if repro:
                repro.capture(run_tracker.run_info.get_as_dict())

            # Setup and run GoalRunner.
            goal_runner = GoalRunner.Factory(root_dir, options, build_config,
                                             run_tracker, reporting,
                                             self._target_roots,
                                             self._daemon_build_graph,
                                             self._exiter).setup()

            goal_runner_result = goal_runner.run()

            if repro:
                # TODO: Have Repro capture the 'after' state (as a diff) as well?
                repro.log_location_of_repro_file()
        finally:
            run_tracker_result = run_tracker.end()

        # Take the exit code with higher abs value in case of negative values.
        final_exit_code = goal_runner_result if abs(goal_runner_result) > abs(
            run_tracker_result) else run_tracker_result
        self._exiter.exit(final_exit_code)
Beispiel #5
0
  def create(cls, exiter, args, env, target_roots=None, daemon_graph_session=None,
             options_bootstrapper=None):
    """Creates a new LocalPantsRunner instance by parsing options.

    :param Exiter exiter: The Exiter instance to use for this run.
    :param list args: The arguments (e.g. sys.argv) for this run.
    :param dict env: The environment (e.g. os.environ) for this run.
    :param TargetRoots target_roots: The target roots for this run.
    :param LegacyGraphSession daemon_graph_session: The graph helper for this session.
    :param OptionsBootstrapper options_bootstrapper: The OptionsBootstrapper instance to reuse.
    """
    build_root = get_buildroot()

    options, build_config, options_bootstrapper = cls.parse_options(
      args,
      env,
      options_bootstrapper=options_bootstrapper,
    )
    global_options = options.for_global_scope()
    # This works as expected due to the encapsulated_logger in DaemonPantsRunner and
    # we don't have to gate logging setup anymore.
    setup_logging_from_options(global_options)

    # Option values are usually computed lazily on demand,
    # but command line options are eagerly computed for validation.
    for scope in options.scope_to_flags.keys():
      options.for_scope(scope)

    # Verify configs.
    if global_options.verify_config:
      options_bootstrapper.verify_configs_against_options(options)

    # If we're running with the daemon, we'll be handed a session from the
    # resident graph helper - otherwise initialize a new one here.
    graph_session = cls._maybe_init_graph_session(
      daemon_graph_session,
      options_bootstrapper,
      build_config,
      options
    )

    target_roots = cls._maybe_init_target_roots(
      target_roots,
      graph_session,
      options,
      build_root
    )

    profile_path = env.get('PANTS_PROFILE')

    return cls(
      build_root,
      exiter,
      options,
      options_bootstrapper,
      build_config,
      target_roots,
      graph_session,
      daemon_graph_session is not None,
      profile_path
    )
Beispiel #6
0
    def create(
        cls,
        env: Mapping[str, str],
        options_bootstrapper: OptionsBootstrapper,
        specs: Optional[Specs] = None,
        daemon_graph_session: Optional[LegacyGraphSession] = None,
    ) -> "LocalPantsRunner":
        """Creates a new LocalPantsRunner instance by parsing options.

        :param env: The environment (e.g. os.environ) for this run.
        :param options_bootstrapper: The OptionsBootstrapper instance to reuse.
        :param specs: The specs for this run, i.e. either the address or filesystem specs.
        :param daemon_graph_session: The graph helper for this session.
        """
        build_root = get_buildroot()

        options, build_config = LocalPantsRunner.parse_options(
            options_bootstrapper)
        global_options = options.for_global_scope()
        # This works as expected due to the encapsulated_logger in DaemonPantsRunner and
        # we don't have to gate logging setup anymore.
        setup_logging_from_options(global_options)

        # Option values are usually computed lazily on demand,
        # but command line options are eagerly computed for validation.
        for scope in options.scope_to_flags.keys():
            options.for_scope(scope)

        # Verify configs.
        if global_options.verify_config:
            options.verify_configs(options_bootstrapper.config)

        union_membership = UnionMembership(build_config.union_rules())

        # If we're running with the daemon, we'll be handed a session from the
        # resident graph helper - otherwise initialize a new one here.
        graph_session = (daemon_graph_session
                         if daemon_graph_session else cls._init_graph_session(
                             options_bootstrapper, build_config, options))

        if specs is None:
            global_options = options.for_global_scope()
            specs = SpecsCalculator.create(
                options=options,
                build_root=build_root,
                session=graph_session.scheduler_session,
                exclude_patterns=tuple(global_options.exclude_target_regexp),
                tags=tuple(global_options.tag),
            )

        profile_path = env.get("PANTS_PROFILE")

        return cls(
            build_root=build_root,
            options=options,
            options_bootstrapper=options_bootstrapper,
            build_config=build_config,
            specs=specs,
            graph_session=graph_session,
            union_membership=union_membership,
            is_daemon=daemon_graph_session is not None,
            profile_path=profile_path,
        )