diff options
Diffstat (limited to 'src/cmd')
-rw-r--r-- | src/cmd/backup.rs | 15 | ||||
-rw-r--r-- | src/cmd/list_files.rs | 4 | ||||
-rw-r--r-- | src/cmd/restore.rs | 27 | ||||
-rw-r--r-- | src/cmd/show_gen.rs | 3 |
4 files changed, 22 insertions, 27 deletions
diff --git a/src/cmd/backup.rs b/src/cmd/backup.rs index e4569e8..dae9811 100644 --- a/src/cmd/backup.rs +++ b/src/cmd/backup.rs @@ -10,7 +10,7 @@ use crate::generation::GenId; use log::info; use std::time::SystemTime; use structopt::StructOpt; -use tempfile::NamedTempFile; +use tempfile::tempdir; use tokio::runtime::Runtime; /// Make a backup. @@ -30,21 +30,22 @@ impl Backup { let client = BackupClient::new(config)?; let genlist = client.list_generations().await?; - let oldtemp = NamedTempFile::new()?; - let newtemp = NamedTempFile::new()?; + let temp = tempdir()?; + let oldtemp = temp.path().join("old.db"); + let newtemp = temp.path().join("new.db"); let (is_incremental, outcome) = match genlist.resolve("latest") { Err(_) => { info!("fresh backup without a previous generation"); let mut run = BackupRun::initial(config, &client)?; - let old = run.start(None, oldtemp.path()).await?; - (false, run.backup_roots(config, &old, newtemp.path()).await?) + let old = run.start(None, &oldtemp).await?; + (false, run.backup_roots(config, &old, &newtemp).await?) } Ok(old_id) => { info!("incremental backup based on {}", old_id); let mut run = BackupRun::incremental(config, &client)?; - let old = run.start(Some(&old_id), oldtemp.path()).await?; - (true, run.backup_roots(config, &old, newtemp.path()).await?) + let old = run.start(Some(&old_id), &oldtemp).await?; + (true, run.backup_roots(config, &old, &newtemp).await?) } }; diff --git a/src/cmd/list_files.rs b/src/cmd/list_files.rs index 12d34b1..9126564 100644 --- a/src/cmd/list_files.rs +++ b/src/cmd/list_files.rs @@ -34,8 +34,8 @@ impl ListFiles { let gen = client.fetch_generation(&gen_id, temp.path()).await?; for file in gen.files()?.iter()? { - let file = file?; - println!("{}", format_entry(file.entry(), file.reason())); + let (_, entry, reason, _) = file?; + println!("{}", format_entry(&entry, reason)); } Ok(()) diff --git a/src/cmd/restore.rs b/src/cmd/restore.rs index 983efbb..43d9679 100644 --- a/src/cmd/restore.rs +++ b/src/cmd/restore.rs @@ -3,6 +3,7 @@ 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}; @@ -54,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(); @@ -85,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), diff --git a/src/cmd/show_gen.rs b/src/cmd/show_gen.rs index 6c8ba19..006e0e0 100644 --- a/src/cmd/show_gen.rs +++ b/src/cmd/show_gen.rs @@ -35,8 +35,7 @@ impl ShowGeneration { let mut files = files.iter()?; let total_bytes = files.try_fold(0, |acc, file| { - file.map(|file| { - let e = file.entry(); + file.map(|(_, e, _, _)| { if e.kind() == FilesystemKind::Regular { acc + e.len() } else { |