Move check for config file at beginning

This commit is contained in:
Alexander Weiss 2022-05-05 21:14:44 +02:00
parent f5b6186d4a
commit b6693bbdc2
3 changed files with 18 additions and 15 deletions

View File

@ -13,8 +13,9 @@ use crate::archiver::{Archiver, Parent};
use crate::backend::{
DecryptFullBackend, DryRunBackend, LocalSource, LocalSourceOptions, ReadSource,
};
use crate::id::Id;
use crate::index::IndexBackend;
use crate::repo::{ConfigFile, Id, SnapshotFile, StringList};
use crate::repo::{ConfigFile, SnapshotFile, StringList};
#[derive(Parser)]
pub(super) struct Opts {
@ -44,6 +45,7 @@ pub(super) struct Opts {
pub(super) async fn execute(
be: &impl DecryptFullBackend,
opts: Opts,
config_id: &Id,
command: String,
) -> Result<()> {
let mut snap = SnapshotFile {
@ -51,7 +53,7 @@ pub(super) async fn execute(
..Default::default()
};
let config: ConfigFile = be.get_file(&Id::default()).await?;
let config: ConfigFile = be.get_file(config_id).await?;
let poly = config.poly()?;
let be = DryRunBackend::new(be.clone(), opts.dry_run);

View File

@ -1,7 +1,7 @@
use std::fs::File;
use std::io::BufReader;
use anyhow::{bail, Result};
use anyhow::Result;
use clap::Parser;
use rpassword::{prompt_password_stderr, read_password_with_reader};
@ -21,10 +21,6 @@ pub(super) struct Opts {
pub(super) async fn execute(be: &impl WriteBackend, opts: Opts) -> Result<()> {
let key = Key::new();
let ids = be.list(FileType::Config).await?;
if !ids.is_empty() {
bail!("Config file already exists. Aborting.")
}
be.create().await?;
let key_opts = opts.key_opts;

View File

@ -1,9 +1,9 @@
use std::path::PathBuf;
use anyhow::Result;
use anyhow::{bail, Result};
use clap::{Parser, Subcommand};
use crate::backend::{ChooseBackend, DecryptBackend};
use crate::backend::{ChooseBackend, DecryptBackend, FileType, ReadBackend};
mod backup;
mod cat;
@ -104,17 +104,22 @@ pub async fn execute() -> Result<()> {
let be = ChooseBackend::from_url(&args.repository);
let (key, dbe) = match args.command {
Command::Init(opts) => return init::execute(&be, opts).await,
_ => {
let config_ids = be.list(FileType::Config).await?;
let (cmd, key, dbe, config_id) = match (args.command, config_ids.len()) {
(Command::Init(opts), 0) => return init::execute(&be, opts).await,
(Command::Init(_), _) => bail!("Config file already exists. Aborting."),
(cmd, 1) => {
let key = get_key(&be, args.password_file).await?;
let dbe = DecryptBackend::new(&be, key.clone());
(key, dbe)
(cmd, key, dbe, &config_ids[0])
}
(_, 0) => bail!("No config file found. Is there a repo?"),
_ => bail!("More than one config file. Aborting."),
};
match args.command {
Command::Backup(opts) => backup::execute(&dbe, opts, command).await?,
match cmd {
Command::Backup(opts) => backup::execute(&dbe, opts, config_id, command).await?,
Command::Cat(opts) => cat::execute(&dbe, opts).await?,
Command::Check(opts) => check::execute(&dbe, opts).await?,
Command::Diff(opts) => diff::execute(&dbe, opts).await?,