summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bin/obnam.rs6
-rw-r--r--src/cmd/backup.rs2
-rw-r--r--src/cmd/inspect.rs40
-rw-r--r--src/cmd/list_backup_versions.rs31
-rw-r--r--src/cmd/mod.rs2
5 files changed, 80 insertions, 1 deletions
diff --git a/src/bin/obnam.rs b/src/bin/obnam.rs
index 21add9c..15c7d06 100644
--- a/src/bin/obnam.rs
+++ b/src/bin/obnam.rs
@@ -8,7 +8,9 @@ use obnam::cmd::chunkify::Chunkify;
use obnam::cmd::gen_info::GenInfo;
use obnam::cmd::get_chunk::GetChunk;
use obnam::cmd::init::Init;
+use obnam::cmd::inspect::Inspect;
use obnam::cmd::list::List;
+use obnam::cmd::list_backup_versions::ListSchemaVersions;
use obnam::cmd::list_files::ListFiles;
use obnam::cmd::resolve::Resolve;
use obnam::cmd::restore::Restore;
@@ -41,7 +43,9 @@ fn main_program() -> anyhow::Result<()> {
match opt.cmd {
Command::Init(x) => x.run(&config),
+ Command::ListBackupVersions(x) => x.run(&config),
Command::Backup(x) => x.run(&config),
+ Command::Inspect(x) => x.run(&config),
Command::Chunkify(x) => x.run(&config),
Command::List(x) => x.run(&config),
Command::ShowGeneration(x) => x.run(&config),
@@ -101,8 +105,10 @@ struct Opt {
enum Command {
Init(Init),
Backup(Backup),
+ Inspect(Inspect),
Chunkify(Chunkify),
List(List),
+ ListBackupVersions(ListSchemaVersions),
ListFiles(ListFiles),
Restore(Restore),
GenInfo(GenInfo),
diff --git a/src/cmd/backup.rs b/src/cmd/backup.rs
index 51d0329..6983de4 100644
--- a/src/cmd/backup.rs
+++ b/src/cmd/backup.rs
@@ -34,7 +34,7 @@ impl Backup {
let major = self.backup_version.or(Some(DEFAULT_SCHEMA_MAJOR)).unwrap();
let schema = schema_version(major)?;
- eprintln!("backup: schema: {schema}");
+ eprintln!("backup: schema: {}", schema);
let client = BackupClient::new(config)?;
let genlist = client.list_generations().await?;
diff --git a/src/cmd/inspect.rs b/src/cmd/inspect.rs
new file mode 100644
index 0000000..d5a75c6
--- /dev/null
+++ b/src/cmd/inspect.rs
@@ -0,0 +1,40 @@
+//! The `inspect` subcommand.
+
+use crate::client::BackupClient;
+use crate::config::ClientConfig;
+use crate::error::ObnamError;
+
+use log::info;
+use structopt::StructOpt;
+use tempfile::NamedTempFile;
+use tokio::runtime::Runtime;
+
+/// Make a backup.
+#[derive(Debug, StructOpt)]
+pub struct Inspect {
+ /// Reference to generation to inspect.
+ #[structopt()]
+ gen_id: String,
+}
+
+impl Inspect {
+ /// Run the command.
+ pub fn run(&self, config: &ClientConfig) -> Result<(), ObnamError> {
+ let rt = Runtime::new()?;
+ rt.block_on(self.run_async(config))
+ }
+
+ async fn run_async(&self, config: &ClientConfig) -> Result<(), ObnamError> {
+ let temp = NamedTempFile::new()?;
+ let client = BackupClient::new(config)?;
+ let genlist = client.list_generations().await?;
+ let gen_id = genlist.resolve(&self.gen_id)?;
+ info!("generation id is {}", gen_id.as_chunk_id());
+
+ let gen = client.fetch_generation(&gen_id, temp.path()).await?;
+ let meta = gen.meta()?;
+ println!("schema_version: {}", meta.schema_version());
+
+ Ok(())
+ }
+}
diff --git a/src/cmd/list_backup_versions.rs b/src/cmd/list_backup_versions.rs
new file mode 100644
index 0000000..859d91c
--- /dev/null
+++ b/src/cmd/list_backup_versions.rs
@@ -0,0 +1,31 @@
+//! The `backup` subcommand.
+
+use crate::config::ClientConfig;
+use crate::dbgen::{schema_version, DEFAULT_SCHEMA_MAJOR, SCHEMA_MAJORS};
+use crate::error::ObnamError;
+
+use structopt::StructOpt;
+
+/// List supported backup schema versions.
+#[derive(Debug, StructOpt)]
+pub struct ListSchemaVersions {
+ /// List only the default version.
+ #[structopt(long)]
+ default_only: bool,
+}
+
+impl ListSchemaVersions {
+ /// Run the command.
+ pub fn run(&self, _config: &ClientConfig) -> Result<(), ObnamError> {
+ if self.default_only {
+ let schema = schema_version(DEFAULT_SCHEMA_MAJOR)?;
+ println!("{}", schema);
+ } else {
+ for major in SCHEMA_MAJORS {
+ let schema = schema_version(*major)?;
+ println!("{}", schema);
+ }
+ }
+ Ok(())
+ }
+}
diff --git a/src/cmd/mod.rs b/src/cmd/mod.rs
index 5e5226f..af7457b 100644
--- a/src/cmd/mod.rs
+++ b/src/cmd/mod.rs
@@ -6,7 +6,9 @@ pub mod chunkify;
pub mod gen_info;
pub mod get_chunk;
pub mod init;
+pub mod inspect;
pub mod list;
+pub mod list_backup_versions;
pub mod list_files;
pub mod resolve;
pub mod restore;