* 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)
* Known build data moved to settings/windows_builds.py
* OS version statically set in windows_builds.py
* Added Insider Previews to recognized builds
* Shown in red due to their very short support windows
* Windows 8 and Windows 8.1 are now separate versions
* Added codenames to Vista and 7 (for fun!)
* Unrecognized builds have the CurrentBuild number in the DisplayName
* All tests: runs if SMART=CS/OVERRIDE & BADBLOCKS=CS
* All drive tests: runs if SMART=CS/OVERRIDE & BADBLOCKS=CS
* I/O tests are readonly, blocksize=4M, and limited to 16 Gb
* Fix issue #23
* Fixes recursion bug when Windows.old folders are present
* Combined logic for file/folder sources and WIM sources
* Code uses proper folder separators for the running OS
* (e.g. '\' for Windows and '/' for the rest)
* Renamed run_smart to run_nvme_smart to match rest of the code
* Mark NVMe/SMART status as NS earlier in a couple more cases
* Prevent crash when all tests are run and then aborted during Prime95
* The script waits for the self-test for polling-time+5min
* Unless it detects completion after 60 seconds
* Fixed missing linebreaks in progress panes
* BREAKING: TESTS data structure reworked to support per-dev status
* Renamed 'Health OK' to 'Quick Health OK'
* Better implies that we're not done testing
* Renamed SMART sections to NVMe/SMART
* Dropping SMART short-tests for NVMe drives
* Replaced smartmontools with smartmontool-svn
* Adds JSON exporting which makes parsing the data easier
* Using nvme-cli for NVMe drives instead of smartctl
* NVMe support in smartctl is still experimental and inconsistent
* New "Health OK" detection
* This is used to determine if a disk is okay to be tested
* e.g. an IDE disk w/out any SMART data now requires explicit overriding
* NVMe disks are set using the "critical_warning" attribute
* SMART disks are set using the "overall-health" attribute