summaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/backup.rs15
-rw-r--r--src/cmd/list_files.rs4
-rw-r--r--src/cmd/restore.rs27
-rw-r--r--src/cmd/show_gen.rs3
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 {