def run_reduction_on_report( test_dir: Path, reports_dir: Path, binary_manager: binaries_util.BinaryManager, settings: Settings, ) -> None: test = test_util.metadata_read(test_dir) if not test.device or not test.device.name: raise AssertionError( f"Cannot reduce {str(test_dir)}; device must be specified") try: run_reduction( source_dir_to_reduce=test_util.get_source_dir(test_dir), reduction_output_dir=test_util.get_reductions_dir( test_dir, test.device.name), binary_manager=binary_manager, settings=settings, ) except ReductionFailedError as ex: # Create a symlink to the failed reduction so it is easy to investigate failed reductions. link_to_failed_reduction_path = ( reports_dir / "failed_reductions" / f"{test_dir.name}_{ex.reduction_work_dir.name}") util.make_directory_symlink( new_symlink_file_path=link_to_failed_reduction_path, existing_dir=ex.reduction_work_dir, )
def run_reduction_on_report( # pylint: disable=too-many-locals; test_dir: Path, reports_dir: Path, binary_manager: binaries_util.BinaryManager, settings: Settings, ) -> None: test = test_util.metadata_read(test_dir) check( bool(test.device and test.device.name), AssertionError( f"Cannot reduce {str(test_dir)}; " f"device must be specified in {str(test_util.get_metadata_path(test_dir))}" ), ) source_dir = test_util.get_source_dir(test_dir) try: run_reduction( source_dir_to_reduce=source_dir, reduction_output_dir=test_util.get_reductions_dir( test_dir, test.device.name), binary_manager=binary_manager, settings=settings, ) except fuzz_glsl_test.ReductionFailedError as ex: # Create a symlink to the failed reduction so it is easy to investigate failed reductions. link_to_failed_reduction_path = ( reports_dir / "failed_reductions" / f"{test_dir.name}_{ex.reduction_work_dir.name}") util.make_directory_symlink( new_symlink_file_path=link_to_failed_reduction_path, existing_dir=ex.reduction_work_dir, )