Skip to content

Commit

Permalink
Make InteractiveRunner only used in @console_rule
Browse files Browse the repository at this point in the history
  • Loading branch information
gshuflin committed Jan 10, 2020
1 parent 22601f7 commit 37eca64
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 18 deletions.
11 changes: 4 additions & 7 deletions src/python/pants/backend/python/rules/python_test_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@
from pants.build_graph.address import Address
from pants.engine.addressable import BuildFileAddresses
from pants.engine.fs import Digest, DirectoriesToMerge, FileContent, InputFilesContent
from pants.engine.interactive_runner import InteractiveProcessRequest, InteractiveRunner
from pants.engine.interactive_runner import InteractiveProcessRequest
from pants.engine.isolated_process import ExecuteProcessRequest, FallibleExecuteProcessResult
from pants.engine.legacy.graph import HydratedTargets, TransitiveHydratedTargets
from pants.engine.legacy.structs import PythonTestsAdaptor
from pants.engine.rules import UnionRule, rule, subsystem_rule
from pants.engine.selectors import Get
from pants.option.global_options import GlobalOptions
from pants.rules.core.strip_source_root import SourceRootStrippedSources
from pants.rules.core.test import TestDebugResult, TestOptions, TestResult, TestTarget
from pants.rules.core.test import TestDebugRequest, TestOptions, TestResult, TestTarget


DEFAULT_COVERAGE_CONFIG = dedent(f"""
Expand Down Expand Up @@ -189,17 +189,14 @@ async def run_python_test(
async def debug_python_test(
test_target: PythonTestsAdaptor,
test_setup: TestTargetSetup,
runner: InteractiveRunner
) -> TestDebugResult:
) -> TestDebugRequest:

run_request = InteractiveProcessRequest(
argv=(test_setup.requirements_pex.output_filename, *test_setup.args),
run_in_workspace=False,
input_files=test_setup.input_files_digest
)

result = runner.run_local_interactive_process(run_request)
return TestDebugResult(result.process_exit_code)
return TestDebugRequest(run_request)


def rules():
Expand Down
2 changes: 1 addition & 1 deletion src/python/pants/engine/interactive_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def __post_init__(self):
@dataclass(frozen=True)
class InteractiveRunner:
_scheduler: 'SchedulerSession'
uncacheable = False
uncacheable = True

def run_local_interactive_process(self, request: InteractiveProcessRequest) -> InteractiveProcessResult:
ExceptionSink.toggle_ignoring_sigint_v2_engine(True)
Expand Down
23 changes: 13 additions & 10 deletions src/python/pants/rules/core/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from pants.engine.console import Console
from pants.engine.fs import Digest
from pants.engine.goal import Goal, GoalSubsystem
from pants.engine.interactive_runner import InteractiveProcessRequest, InteractiveRunner
from pants.engine.isolated_process import FallibleExecuteProcessResult
from pants.engine.legacy.graph import HydratedTarget
from pants.engine.objects import union
Expand Down Expand Up @@ -54,8 +55,8 @@ def from_fallible_execute_process_result(


@dataclass(frozen=True)
class TestDebugResult:
exit_code: int
class TestDebugRequest:
ipr: InteractiveProcessRequest


@union
Expand Down Expand Up @@ -119,17 +120,19 @@ def is_testable(


@dataclass(frozen=True)
class AddressAndDebugResult:
class AddressAndDebugRequest:
address: BuildFileAddress
test_result: TestDebugResult
request: TestDebugRequest


@goal_rule
async def run_tests(console: Console, options: TestOptions, addresses: BuildFileAddresses) -> Test:
async def run_tests(console: Console, options: TestOptions, runner: InteractiveRunner, addresses: BuildFileAddresses) -> Test:
if options.values.debug:
address = await Get[BuildFileAddress](BuildFileAddresses, addresses)
result = await Get[AddressAndDebugResult](Address, address.to_address())
return Test(result.test_result.exit_code)
addr_debug_request = await Get[AddressAndDebugRequest](Address, address.to_address())
result = runner.run_local_interactive_process(addr_debug_request.request.ipr)
return Test(result.process_exit_code)

results = await MultiGet(Get[AddressAndTestResult](Address, addr.to_address()) for addr in addresses)
did_any_fail = False
filtered_results = [(x.address, x.test_result) for x in results if x.test_result is not None]
Expand Down Expand Up @@ -186,10 +189,10 @@ async def coordinator_of_tests(


@rule
async def coordinator_of_debug_tests(target: HydratedTarget) -> AddressAndDebugResult:
async def coordinator_of_debug_tests(target: HydratedTarget) -> AddressAndDebugRequest:
logger.info(f"Starting tests in debug mode: {target.address.reference()}")
result = await Get[TestDebugResult](TestTarget, target.adaptor)
return AddressAndDebugResult(target.address, result)
request = await Get[TestDebugRequest](TestTarget, target.adaptor)
return AddressAndDebugRequest(target.address, request)


def rules():
Expand Down

0 comments on commit 37eca64

Please sign in to comment.