diff options
author | Lars Wirzenius <liw@liw.fi> | 2021-02-16 09:44:54 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2021-02-16 11:03:20 +0200 |
commit | 89c46016090b345b9acdea5398178d0c90aef4a7 (patch) | |
tree | be712e6c648a38f1756edd56ea0be40c609f1c53 /src/backup_run.rs | |
parent | c714af9e675fe5762914c28a566e679a98a417ab (diff) | |
download | obnam2-89c46016090b345b9acdea5398178d0c90aef4a7.tar.gz |
refactor: split BackupRun into initial, incremental variants
This is clearer, easier to modify than having a flag to indicate which
variant we're running.
Diffstat (limited to 'src/backup_run.rs')
-rw-r--r-- | src/backup_run.rs | 46 |
1 files changed, 33 insertions, 13 deletions
diff --git a/src/backup_run.rs b/src/backup_run.rs index 91e06f0..024f486 100644 --- a/src/backup_run.rs +++ b/src/backup_run.rs @@ -9,8 +9,14 @@ use crate::policy::BackupPolicy; use log::{info, warn}; use std::path::Path; -pub struct BackupRun { - client: BackupClient, +pub struct InitialBackup<'a> { + client: &'a BackupClient, + buffer_size: usize, + progress: BackupProgress, +} + +pub struct IncrementalBackup<'a> { + client: &'a BackupClient, policy: BackupPolicy, buffer_size: usize, progress: BackupProgress, @@ -30,28 +36,21 @@ pub enum BackupError { pub type BackupResult<T> = Result<T, BackupError>; -impl BackupRun { - pub fn new(config: &ClientConfig) -> BackupResult<Self> { - let client = BackupClient::new(config)?; - let policy = BackupPolicy::new(); +impl<'a> InitialBackup<'a> { + pub fn new(config: &ClientConfig, client: &'a BackupClient) -> BackupResult<Self> { let progress = BackupProgress::initial(); Ok(Self { client, - policy, buffer_size: config.chunk_size, progress, }) } - pub fn client(&self) -> &BackupClient { - &self.client - } - pub fn progress(&self) -> &BackupProgress { &self.progress } - pub fn backup_file_initially( + pub fn backup( &self, entry: FsIterResult<FilesystemEntry>, ) -> BackupResult<(FilesystemEntry, Vec<ChunkId>, Reason)> { @@ -65,8 +64,29 @@ impl BackupRun { } } } +} + +impl<'a> IncrementalBackup<'a> { + pub fn new(config: &ClientConfig, client: &'a BackupClient) -> BackupResult<Self> { + let policy = BackupPolicy::new(); + let progress = BackupProgress::incremental(); + Ok(Self { + client, + policy, + buffer_size: config.chunk_size, + progress, + }) + } + + pub fn client(&self) -> &BackupClient { + self.client + } + + pub fn progress(&self) -> &BackupProgress { + &self.progress + } - pub fn backup_file_incrementally( + pub fn backup( &self, entry: FsIterResult<FilesystemEntry>, old: &LocalGeneration, |