From 67ffc46c6185a2c041c4c553a4affcb99f28997a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20T=C3=B3th?= Date: Wed, 10 Jul 2024 18:21:17 +0200 Subject: [PATCH] Do not print from `kompile` by default (#4510) * Adds a parameter `tool_mode=False` to `kompile`. The subprocess will only write to `std{out,err}` if set to `True`. These streams will still be written to log. * `kompile`, `_kast`, `_kprove`, `_krun` no longer translate the `CalledProcessError` to `RuntimeError`. * `_kprove`, `_krun` no longer write to `stderr`. --- pyk/src/pyk/__main__.py | 12 ++++++------ pyk/src/pyk/krepl/repl.py | 3 ++- pyk/src/pyk/ktool/kompile.py | 30 +++++++++++++----------------- pyk/src/pyk/ktool/kprint.py | 8 +------- pyk/src/pyk/ktool/kprove.py | 11 +++-------- pyk/src/pyk/ktool/krun.py | 7 +------ 6 files changed, 26 insertions(+), 45 deletions(-) diff --git a/pyk/src/pyk/__main__.py b/pyk/src/pyk/__main__.py index 04138b86b44..86b83c8d108 100644 --- a/pyk/src/pyk/__main__.py +++ b/pyk/src/pyk/__main__.py @@ -6,6 +6,7 @@ from collections.abc import Iterable from contextlib import contextmanager from pathlib import Path +from subprocess import CalledProcessError from tempfile import NamedTemporaryFile from typing import TYPE_CHECKING @@ -270,9 +271,8 @@ def explore_context() -> Iterator[KCFGExplore]: try: proofs = prove_rpc.prove_rpc(options=options) - except RuntimeError as err: - _, _, _, cpe = err.args - exit_with_process_error(cpe) + except CalledProcessError as err: + exit_with_process_error(err) for proof in sorted(proofs, key=lambda p: p.id): print('\n'.join(proof.summary.lines)) if proof.failed and options.failure_info: @@ -353,10 +353,10 @@ def exec_kompile(options: KompileCommandOptions) -> None: warnings_to_errors=options.warnings_to_errors, ignore_warnings=options.ignore_warnings, no_exc_wrap=options.no_exc_wrap, + tool_mode=True, ) - except RuntimeError as err: - _, _, _, _, cpe = err.args - exit_with_process_error(cpe) + except CalledProcessError as err: + exit_with_process_error(err) def exec_run(options: RunOptions) -> None: diff --git a/pyk/src/pyk/krepl/repl.py b/pyk/src/pyk/krepl/repl.py index 4705250a7ed..11367d22550 100644 --- a/pyk/src/pyk/krepl/repl.py +++ b/pyk/src/pyk/krepl/repl.py @@ -4,6 +4,7 @@ from argparse import ArgumentParser from dataclasses import dataclass from functools import cached_property +from subprocess import CalledProcessError from typing import TYPE_CHECKING, Generic, TypeVar, final from cmd2 import Cmd, with_argparser, with_category @@ -76,7 +77,7 @@ def init_state(self) -> KState: output=KRunOutput.KORE, depth=0, ) - except RuntimeError as err: + except CalledProcessError as err: raise ReplError('Failed to load program') from err pattern = KoreParser(proc_res.stdout).pattern() diff --git a/pyk/src/pyk/ktool/kompile.py b/pyk/src/pyk/ktool/kompile.py index bacba19dbe2..a75b790c1c4 100644 --- a/pyk/src/pyk/ktool/kompile.py +++ b/pyk/src/pyk/ktool/kompile.py @@ -12,7 +12,6 @@ from enum import Enum from functools import cached_property from pathlib import Path -from subprocess import CalledProcessError from typing import TYPE_CHECKING, final from ..utils import abs_or_rel_to, check_dir_path, check_file_path, run_process_2, single @@ -283,8 +282,10 @@ def __call__( no_exc_wrap: bool = False, debug: bool = False, verbose: bool = False, + # --- cwd: Path | None = None, check: bool = True, + tool_mode: bool = False, bug_report: BugReport | None = None, outer_parsed_json: bool = False, ) -> Path: @@ -331,22 +332,17 @@ def __call__( if ignore_warnings: args += ['-Wno', ','.join(ignore_warnings)] - try: - proc_res = run_process_2(args, write_stderr=True, logger=_LOGGER, cwd=cwd, check=check) - except CalledProcessError as err: - raise RuntimeError( - f'Command kompile exited with code {err.returncode} for: {self.base_args.main_file}', - err.stdout, - err.stderr, - err.returncode, - err, - ) from err - - if proc_res.stdout: - out = proc_res.stdout.rstrip() - print(out) - if bug_report: - bug_report.add_file_contents(out, Path('kompile.log')) + proc_res = run_process_2( + args, + write_stdout=tool_mode, + write_stderr=tool_mode, + logger=_LOGGER, + cwd=cwd, + check=check, + ) + + if bug_report and proc_res.stdout: + bug_report.add_file_contents(proc_res.stdout.rstrip(), Path('kompile.log')) definition_dir = output_dir if output_dir else _default_output_dir(self.base_args.main_file) assert definition_dir.is_dir() diff --git a/pyk/src/pyk/ktool/kprint.py b/pyk/src/pyk/ktool/kprint.py index 1cbb692b035..4e1c9ccfda1 100644 --- a/pyk/src/pyk/ktool/kprint.py +++ b/pyk/src/pyk/ktool/kprint.py @@ -6,7 +6,6 @@ from enum import Enum from functools import cached_property from pathlib import Path -from subprocess import CalledProcessError from tempfile import NamedTemporaryFile from typing import TYPE_CHECKING @@ -107,12 +106,7 @@ def _kast( gen_glr_parser=gen_glr_parser, ) - try: - return run_process_2(args, write_stderr=True, logger=_LOGGER, check=check) - except CalledProcessError as err: - raise RuntimeError( - f'Command kast exited with code {err.returncode} for: {file}', err.stdout, err.stderr - ) from err + return run_process_2(args, logger=_LOGGER, check=check) def gen_glr_parser( diff --git a/pyk/src/pyk/ktool/kprove.py b/pyk/src/pyk/ktool/kprove.py index 5147d0b1176..8abb039ca91 100644 --- a/pyk/src/pyk/ktool/kprove.py +++ b/pyk/src/pyk/ktool/kprove.py @@ -8,7 +8,6 @@ from enum import Enum from itertools import chain from pathlib import Path -from subprocess import CalledProcessError from typing import TYPE_CHECKING from ..cli.utils import check_dir_path, check_file_path @@ -96,13 +95,9 @@ def _kprove( dry_run=dry_run, ) - try: - run_args = tuple(chain(command, [str(spec_file)], typed_args, args)) - return run_process_2(run_args, write_stderr=True, logger=_LOGGER, env=env, check=check) - except CalledProcessError as err: - raise RuntimeError( - f'Command kprove exited with code {err.returncode} for: {spec_file}', err.stdout, err.stderr, err - ) from err + run_args = tuple(chain(command, [str(spec_file)], typed_args, args)) + + return run_process_2(run_args, logger=_LOGGER, env=env, check=check) def _build_arg_list( diff --git a/pyk/src/pyk/ktool/krun.py b/pyk/src/pyk/ktool/krun.py index c65382048f9..c82f0460568 100644 --- a/pyk/src/pyk/ktool/krun.py +++ b/pyk/src/pyk/ktool/krun.py @@ -246,12 +246,7 @@ def _krun( else: bug_report.add_command(args) - try: - return run_process(args, check=check, pipe_stderr=pipe_stderr, logger=logger or _LOGGER, exec_process=debugger) - except CalledProcessError as err: - raise RuntimeError( - f'Command krun exited with code {err.returncode} for: {input_file}', err.stdout, err.stderr - ) from err + return run_process(args, check=check, pipe_stderr=pipe_stderr, logger=logger or _LOGGER, exec_process=debugger) def _build_arg_list(