From 9e874f80348bd355469579fc72406f2aff74bb12 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Fri, 24 Jun 2022 10:36:10 -0700 Subject: [PATCH] Fix bug locking ddrescue-tui to pass Read-Skip --- scripts/wk/clone/ddrescue.py | 44 ++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/scripts/wk/clone/ddrescue.py b/scripts/wk/clone/ddrescue.py index a5f4676d..4ae3d988 100644 --- a/scripts/wk/clone/ddrescue.py +++ b/scripts/wk/clone/ddrescue.py @@ -250,28 +250,34 @@ class BlockPair(): self.map_data.update(data) def pass_complete(self, pass_name): - """Check if pass_num is complete based on map data, returns bool.""" - complete = False - pending_size = 0 + """Check if pass_name is complete based on map data, returns bool.""" + pending_size = self.map_data['non-tried'] - # Check map data + # Full recovery if self.map_data.get('full recovery', False): - complete = True - elif 'non-tried' not in self.map_data: - # Assuming recovery has not been attempted yet - complete = False - else: - # Check that current and previous passes are complete - pending_size = self.map_data['non-tried'] - if pass_name in ('trim', 'scrape'): - pending_size += self.map_data['non-trimmed'] - if pass_name == 'scrape': - pending_size += self.map_data['non-scraped'] - if pending_size == 0: - complete = True + return True - # Done - return complete + # New recovery + if 'non-tried' not in self.map_data: + return False + + # Initial read skip pass + if pass_name == 'read-skip': + pass_threshold = cfg.ddrescue.AUTO_PASS_THRESHOLDS[pass_name] + if self.get_percent_recovered() >= pass_threshold: + return True + + # Recovery in progress + if pass_name in ('trim', 'scrape'): + pending_size += self.map_data['non-trimmed'] + if pass_name == 'scrape': + pending_size += self.map_data['non-scraped'] + if pending_size == 0: + # This is true when the previous and current passes are complete + return True + + # This should never be reached + return False def safety_check(self): """Run safety check and abort if necessary."""