diff options
author | Lars Wirzenius <liw@liw.fi> | 2020-11-13 09:40:39 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2020-11-13 11:27:21 +0200 |
commit | 38b51382e710dda515e6d0df8fdc4f0b253d9cd7 (patch) | |
tree | 5a012e63ef7aa6ae63c31f459d56631bc008b0b5 /src | |
parent | 179993f3bdd5e5d4dd728fc2a8f5d63274f95966 (diff) | |
download | obnam2-38b51382e710dda515e6d0df8fdc4f0b253d9cd7.tar.gz |
refactor: put all client functionality into one program
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/obnam-backup.rs | 37 | ||||
-rw-r--r-- | src/bin/obnam-list.rs | 27 | ||||
-rw-r--r-- | src/bin/obnam.rs | 52 | ||||
-rw-r--r-- | src/cmd/backup.rs | 21 | ||||
-rw-r--r-- | src/cmd/list.rs | 13 | ||||
-rw-r--r-- | src/cmd/mod.rs | 8 | ||||
-rw-r--r-- | src/cmd/restore.rs (renamed from src/bin/obnam-restore.rs) | 29 | ||||
-rw-r--r-- | src/lib.rs | 1 |
8 files changed, 106 insertions, 82 deletions
diff --git a/src/bin/obnam-backup.rs b/src/bin/obnam-backup.rs deleted file mode 100644 index 7d7e07e..0000000 --- a/src/bin/obnam-backup.rs +++ /dev/null @@ -1,37 +0,0 @@ -use log::{debug, info}; -use obnam::client::{BackupClient, ClientConfig}; -use obnam::fsiter::FsIterator; -use obnam::generation::Generation; -use std::path::PathBuf; -use structopt::StructOpt; - -const BUFFER_SIZE: usize = 1024 * 1024; - -fn main() -> anyhow::Result<()> { - pretty_env_logger::init(); - - let opt = Opt::from_args(); - info!("obnam-backup starts"); - debug!("opt: {:?}", opt); - let config = ClientConfig::read_config(&opt.config)?; - let client = BackupClient::new(&config.server_name, config.server_port)?; - - { - let mut gen = Generation::create(&config.dbname)?; - gen.insert_iter(FsIterator::new(&config.root).map(|entry| match entry { - Err(err) => Err(err), - Ok(entry) => client.upload_filesystem_entry(entry, BUFFER_SIZE), - }))?; - } - let gen_id = client.upload_generation(&config.dbname, BUFFER_SIZE)?; - println!("gen id: {}", gen_id); - - Ok(()) -} - -#[derive(Debug, StructOpt)] -#[structopt(name = "obnam-backup", about = "Simplistic backup client")] -struct Opt { - #[structopt(parse(from_os_str))] - config: PathBuf, -} diff --git a/src/bin/obnam-list.rs b/src/bin/obnam-list.rs deleted file mode 100644 index 18c49f1..0000000 --- a/src/bin/obnam-list.rs +++ /dev/null @@ -1,27 +0,0 @@ -use log::{debug, info}; -use obnam::client::{BackupClient, ClientConfig}; -use std::path::PathBuf; -use structopt::StructOpt; - -fn main() -> anyhow::Result<()> { - pretty_env_logger::init(); - - let opt = Opt::from_args(); - info!("obnam-list starts"); - debug!("opt: {:?}", opt); - let config = ClientConfig::read_config(&opt.config)?; - let client = BackupClient::new(&config.server_name, config.server_port)?; - - for gen_id in client.list_generations()? { - println!("{}", gen_id); - } - - Ok(()) -} - -#[derive(Debug, StructOpt)] -#[structopt(name = "obnam-backup", about = "Simplistic backup client")] -struct Opt { - #[structopt(parse(from_os_str))] - config: PathBuf, -} diff --git a/src/bin/obnam.rs b/src/bin/obnam.rs new file mode 100644 index 0000000..d0cf271 --- /dev/null +++ b/src/bin/obnam.rs @@ -0,0 +1,52 @@ +use log::{debug, info}; +use obnam::cmd::{backup, list, restore}; +use std::path::PathBuf; +use structopt::StructOpt; + +const BUFFER_SIZE: usize = 1024 * 1024; + +fn main() -> anyhow::Result<()> { + pretty_env_logger::init(); + + let opt = Opt::from_args(); + info!("obnam starts"); + debug!("opt: {:?}", opt); + + match opt { + Opt::Backup { config } => backup(&config, BUFFER_SIZE)?, + Opt::List { config } => list(&config)?, + Opt::Restore { + config, + gen_id, + dbname, + to, + } => restore(&config, &gen_id, &dbname, &to)?, + } + Ok(()) +} + +#[derive(Debug, StructOpt)] +#[structopt(name = "obnam-backup", about = "Simplistic backup client")] +enum Opt { + Backup { + #[structopt(parse(from_os_str))] + config: PathBuf, + }, + List { + #[structopt(parse(from_os_str))] + config: PathBuf, + }, + Restore { + #[structopt(parse(from_os_str))] + config: PathBuf, + + #[structopt()] + gen_id: String, + + #[structopt(parse(from_os_str))] + dbname: PathBuf, + + #[structopt(parse(from_os_str))] + to: PathBuf, + }, +} diff --git a/src/cmd/backup.rs b/src/cmd/backup.rs new file mode 100644 index 0000000..308eafb --- /dev/null +++ b/src/cmd/backup.rs @@ -0,0 +1,21 @@ +use crate::client::{BackupClient, ClientConfig}; +use crate::fsiter::FsIterator; +use crate::generation::Generation; +use std::path::Path; + +pub fn backup(config: &Path, buffer_size: usize) -> anyhow::Result<()> { + let config = ClientConfig::read_config(config)?; + let client = BackupClient::new(&config.server_name, config.server_port)?; + + { + let mut gen = Generation::create(&config.dbname)?; + gen.insert_iter(FsIterator::new(&config.root).map(|entry| match entry { + Err(err) => Err(err), + Ok(entry) => client.upload_filesystem_entry(entry, buffer_size), + }))?; + } + let gen_id = client.upload_generation(&config.dbname, buffer_size)?; + println!("gen id: {}", gen_id); + + Ok(()) +} diff --git a/src/cmd/list.rs b/src/cmd/list.rs new file mode 100644 index 0000000..1972144 --- /dev/null +++ b/src/cmd/list.rs @@ -0,0 +1,13 @@ +use crate::client::{BackupClient, ClientConfig}; +use std::path::Path; + +pub fn list(config: &Path) -> anyhow::Result<()> { + let config = ClientConfig::read_config(&config)?; + let client = BackupClient::new(&config.server_name, config.server_port)?; + + for gen_id in client.list_generations()? { + println!("{}", gen_id); + } + + Ok(()) +} diff --git a/src/cmd/mod.rs b/src/cmd/mod.rs new file mode 100644 index 0000000..ca5ff42 --- /dev/null +++ b/src/cmd/mod.rs @@ -0,0 +1,8 @@ +mod backup; +pub use backup::backup; + +mod list; +pub use list::list; + +pub mod restore; +pub use restore::restore; diff --git a/src/bin/obnam-restore.rs b/src/cmd/restore.rs index 442104a..6e2690c 100644 --- a/src/bin/obnam-restore.rs +++ b/src/cmd/restore.rs @@ -1,7 +1,7 @@ +use crate::client::BackupClient; +use crate::fsentry::{FilesystemEntry, FilesystemKind}; +use crate::generation::Generation; use log::{debug, info}; -use obnam::client::BackupClient; -use obnam::fsentry::{FilesystemEntry, FilesystemKind}; -use obnam::generation::Generation; //use obnam::chunkmeta::ChunkMeta; use serde::Deserialize; use std::fs::File; @@ -9,31 +9,24 @@ use std::io::prelude::*; use std::path::{Path, PathBuf}; use structopt::StructOpt; -fn main() -> anyhow::Result<()> { - pretty_env_logger::init(); - - let opt = Opt::from_args(); - let config = Config::read_config(&opt.config).unwrap(); - - info!("obnam-restore starts up"); - info!("opt: {:?}", opt); - info!("config: {:?}", config); +pub fn restore(config: &Path, gen_id: &str, dbname: &Path, to: &Path) -> anyhow::Result<()> { + let config = Config::read_config(&config).unwrap(); let client = BackupClient::new(&config.server_name, config.server_port)?; - let gen_chunk = client.fetch_generation(&opt.gen_id)?; + let gen_chunk = client.fetch_generation(&gen_id)?; debug!("gen: {:?}", gen_chunk); { - let mut dbfile = File::create(&opt.dbname)?; + let mut dbfile = File::create(&dbname)?; for id in gen_chunk.chunk_ids() { let chunk = client.fetch_chunk(id)?; dbfile.write_all(chunk.data())?; } } - info!("downloaded generation to {}", opt.dbname.display()); + info!("downloaded generation to {}", dbname.display()); - let gen = Generation::open(&opt.dbname)?; + let gen = Generation::open(&dbname)?; for (fileid, entry) in gen.files()? { - restore(&client, &gen, fileid, entry, &opt.to)?; + restore_generation(&client, &gen, fileid, entry, &to)?; } Ok(()) @@ -69,7 +62,7 @@ impl Config { } } -fn restore( +fn restore_generation( client: &BackupClient, gen: &Generation, fileid: u64, @@ -4,6 +4,7 @@ pub mod chunker; pub mod chunkid; pub mod chunkmeta; pub mod client; +pub mod cmd; pub mod fsentry; pub mod fsiter; pub mod generation; |