summaryrefslogtreecommitdiff
path: root/src/cmd/restore.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/restore.rs')
-rw-r--r--src/cmd/restore.rs36
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()
};