* RecoveryState is updated before confirmation(s)
* New confirmation prompt that supports both cloning and imaging modes
* Refactored show_selection_details() to use new objects
* Allows resumed state to be detected and prompt switched to "Resume?"
* Renamed function show_safety_check() to double_confirm_clone() for clarity
* Dest/map paths are now set in two steps:
* The filename prefix is set when creating the DevObj()
* The full paths are set when creating the BlockPair()
* Merged dest safety checks into RecoveryState.add_block_pair()
* Mostly check_dest_paths() and dest_safety_check()
* Moved dir RWX checks to is_writable_dir()
* Moved mount RW check to is_writable_filesystem()
* Started merging menu_clone() and menu_image() into menu_ddrescue()
* Colored report data is generated during obj instantiation
* Code has been moved into its own function
* Entire colored string is now stored for each Obj
* (Should make show_selection, etc more mode/Obj agnostic)
* loopback_dev vs image_path is now better separated
* losetup is called in ImageObj.set_details()
* loopback -D is still called during program cleanup/wrapup
* get_device_size_in_bytes() has been renamed get_size_in_bytes()
* load_map() is called on BlockPair() instantiation
* This partially replaces resume_from_map()
* Also fixed improper method declarations lacking the self argument
Added two classes:
* BlockPair()
* Track source/dest pair specific data
* update_progress() method for its own data
* RecoveryState()
* Track BlockPair objects and overall state
* update_progress() method for overall data
Reasons:
* Code readability
* Better status updates, code currently split between:
* get_recovery_scope_size()
* resume_from_map()
* update_progress()
* Functions that should probably be merged into other functions:
* get_recovery_scope_size()
* set_dest_image_paths()
* check_dest_paths()
* Logic that needs to be cleaned up:
* Calculating overall recovery size
* Pass "Done"ness and status strings need separated
* Pass "Done"ness at the device and overall levels
* Updating output for side pane status display
* --test-mode disabled by default
* Fixed bug that prevented escaping auto_run via Ctrl-c
* Fixed no-trim / no-scrape flag handling
* Only proceed device(s) have been selected in menu_select_children
* Added read_map_file() which uses ddrescuelog to create dict of current state
* Added --test-mode= option to expert menu
* Add size (in bytes) to all devs
* Allows to calculate real total percent recovered
* Detect 100% completion via ddrescuelog -D
* Moved mark_complete / mark_incomplete code to update_progress()
* Update progress every 30s during ddrescue passes
* Fixed auto_run logic
* Enabled by default
* Based on static thresholds per pass.
* Pass 1: 85%
* Pass 2: 98%
* If using child devices, all must be above the threshold to continue
* Updating device / child device status/progress done in mark_*() functions
* Add current pass description to main menu
* Current pass (overall) only updated if all children have passed
* Fix Pass 4 crash
* Refresh rate is now handled by 'watch --interval'
* Allows for much simpler ddrescue execution / tracking
* Removed all 'SMART Report' sections from functions/ddrescue.py
* functions/hw_diags.py has been further extended
* Supports full device paths (only for displaying attributes ATM)
* Adds a timestamp when only displaying attributes
* Common code moved to select_device()
* Existing select_device() renamed menu_select_device()
* Fixed skip_device code
* Refactored source/dest vars into dicts
* Added confirmation after source/dest are selected
* Renamed get_mounted_data to get_mounted_volumes
* Report data is now a dict for better clarity
* Widened report hoping that LVM names will fit (they probably wont)
* This fixes#38
* Better names (e.g. 'Letter' instead of 'Source')
* Added 'Local' bool to simplify network-vs-local installs
* Only reassign the source letter if necessary
* Bugfix: Update 'Path' when reassigning a volume letter
* Fixes#33 (again)