diff options
Diffstat (limited to 'src/cmd/restore.rs')
-rw-r--r-- | src/cmd/restore.rs | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/src/cmd/restore.rs b/src/cmd/restore.rs index 7b3d95e..43d9679 100644 --- a/src/cmd/restore.rs +++ b/src/cmd/restore.rs @@ -3,6 +3,8 @@ use crate::backup_reason::Reason; use crate::client::{BackupClient, ClientError}; use crate::config::ClientConfig; +use crate::db::DatabaseError; +use crate::dbgen::FileId; use crate::error::ObnamError; use crate::fsentry::{FilesystemEntry, FilesystemKind}; use crate::generation::{LocalGeneration, LocalGenerationError}; @@ -53,26 +55,16 @@ impl Restore { info!("restoring {} files", gen.file_count()?); let progress = create_progress_bar(gen.file_count()?, true); for file in gen.files()?.iter()? { - let file = file?; - match file.reason() { + let (fileno, entry, reason, _) = file?; + match reason { Reason::FileError => (), - _ => { - restore_generation( - &client, - &gen, - file.fileno(), - file.entry(), - &self.to, - &progress, - ) - .await? - } + _ => restore_generation(&client, &gen, fileno, &entry, &self.to, &progress).await?, } } for file in gen.files()?.iter()? { - let file = file?; - if file.entry().is_dir() { - restore_directory_metadata(file.entry(), &self.to)?; + let (_, entry, _, _) = file?; + if entry.is_dir() { + restore_directory_metadata(&entry, &self.to)?; } } progress.finish(); @@ -84,6 +76,10 @@ impl Restore { /// Possible errors from restoring. #[derive(Debug, thiserror::Error)] pub enum RestoreError { + /// An error using a Database. + #[error(transparent)] + Database(#[from] DatabaseError), + /// Failed to create a name pipe. #[error("Could not create named pipe (FIFO) {0}")] NamedPipeCreationError(PathBuf), @@ -132,7 +128,7 @@ pub enum RestoreError { async fn restore_generation( client: &BackupClient, gen: &LocalGeneration, - fileid: i64, + fileid: FileId, entry: &FilesystemEntry, to: &Path, progress: &ProgressBar, @@ -185,7 +181,7 @@ async fn restore_regular( client: &BackupClient, gen: &LocalGeneration, path: &Path, - fileid: i64, + fileid: FileId, entry: &FilesystemEntry, ) -> Result<(), RestoreError> { debug!("restoring regular {}", path.display()); @@ -293,9 +289,9 @@ fn path_to_cstring(path: &Path) -> CString { CString::new(path).unwrap() } -fn create_progress_bar(file_count: i64, verbose: bool) -> ProgressBar { +fn create_progress_bar(file_count: FileId, verbose: bool) -> ProgressBar { let progress = if verbose { - ProgressBar::new(file_count as u64) + ProgressBar::new(file_count) } else { ProgressBar::hidden() }; |