Mark passes Skipped as appropriate

This commit is contained in:
2Shirt 2020-01-04 16:53:56 -07:00
parent c71e30e4fb
commit 4acdab8c0f
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C

View file

@ -246,6 +246,11 @@ class BlockPair():
std.print_error(f'Invalid destination: {self.destination}')
raise std.GenericAbort()
def skip_pass(self, pass_name):
"""Mark pass as skipped if applicable."""
if self.status[pass_name] == 'Pending':
self.status[pass_name] = 'Skipped'
def update_progress(self, pass_name):
"""Update progress via map data."""
self.load_map_data()
@ -255,6 +260,13 @@ class BlockPair():
if percent > 0:
self.status[pass_name] = percent
# Mark future passes as skipped if applicable
if percent == 100:
if pass_name == 'read':
self.status['trim'] = 'Skipped'
if pass_name in ('read', 'trim'):
self.status['scrape'] = 'Skipped'
class State():
"""Object for tracking hardware diagnostic data."""
@ -853,7 +865,6 @@ class State():
_f.write('\n')
def save_settings(self, settings):
# pylint: disable=no-self-use
"""Save settings for future runs."""
settings_file = pathlib.Path(
f'{self.working_dir}/Clone_{self.source.details["model"]}.json',
@ -867,6 +878,12 @@ class State():
std.print_error('Failed to save clone settings')
raise std.GenericAbort()
def skip_pass(self, pass_name):
"""Mark block_pairs as skipped if applicable."""
for pair in self.block_pairs:
if pair.status[pass_name] == 'Pending':
pair.status[pass_name] = 'Skipped'
def update_progress_pane(self, overall_status):
"""Update progress pane."""
report = []
@ -1672,7 +1689,6 @@ def mount_raw_image_macos(path):
def run_ddrescue(state, block_pair, pass_name, settings, dry_run=True):
"""Run ddrescue using passed settings."""
cmd = build_ddrescue_cmd(block_pair, pass_name, settings)
proc = None
state.update_progress_pane('Active')
std.clear_screen()
warning_message = ''
@ -1788,11 +1804,14 @@ def run_recovery(state, main_menu, settings_menu, dry_run=True):
# Skip to next pass (unless retry selected)
if '--retrim' not in settings and state.pass_complete(pass_name):
# NOTE: This bypasses auto_continue
state.skip_pass(pass_name)
continue
# Run ddrescue
for pair in state.block_pairs:
if not pair.pass_complete(pass_name):
if '--retrim' not in settings and pair.pass_complete(pass_name):
pair.skip_pass(pass_name)
else:
attempted_recovery = True
state.mark_started()
try: