From cca4e76c3b151c6e1dbc2a3ba7c22eaf83817f27 Mon Sep 17 00:00:00 2001 From: Dennis Schwerdel Date: Sun, 9 Apr 2017 18:48:38 +0200 Subject: [PATCH] No such backup/backup already esists --- TODO.md | 1 - src/cli/mod.rs | 14 +++++++++++++- src/repository/backup.rs | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/TODO.md b/TODO.md index 7f229ab..7a26200 100644 --- a/TODO.md +++ b/TODO.md @@ -10,7 +10,6 @@ * Lock the local repository to avoid index corruption ## Usability -* Error: Backup already exists * Backup directories as a thing (list, remove) * Display backup name and path on backup integrity error * Better control over what is checked in `check` subcommand diff --git a/src/cli/mod.rs b/src/cli/mod.rs index df5dcd2..3aaa37b 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -20,6 +20,7 @@ pub enum ErrorCode { InitializeLogger, CreateRepository, LoadRepository, SaveBackup, LoadBackup, LoadInode, LoadBundle, + NoSuchBackup, BackupAlreadyExists, AddKey, LoadKey, SaveKey, SaveConfig, LoadExcludes, InvalidExcludes, @@ -58,7 +59,10 @@ impl ErrorCode { ErrorCode::DiffRun => 21, ErrorCode::VersionsRun => 22, ErrorCode::ImportRun => 23, - ErrorCode::FuseMount => 24 + ErrorCode::FuseMount => 24, + // + ErrorCode::NoSuchBackup => 25, + ErrorCode::BackupAlreadyExists => 26 } } } @@ -92,6 +96,10 @@ fn open_repository(path: &str) -> Result { } fn get_backup(repo: &Repository, backup_name: &str) -> Result { + if !repo.has_backup(backup_name) { + error!("A backup with that name does not exist"); + return Err(ErrorCode::NoSuchBackup) + } Ok(checked!(repo.get_backup(backup_name), "load backup", ErrorCode::LoadBackup)) } @@ -286,6 +294,10 @@ pub fn run() -> Result<(), ErrorCode> { }, Arguments::Backup{repo_path, backup_name, src_path, full, reference, same_device, mut excludes, excludes_from, no_default_excludes, tar} => { let mut repo = try!(open_repository(&repo_path)); + if repo.has_backup(&backup_name) { + error!("A backup with that name already exists"); + return Err(ErrorCode::BackupAlreadyExists) + } let mut reference_backup = None; if !full && !tar { reference_backup = match reference { diff --git a/src/repository/backup.rs b/src/repository/backup.rs index 7226d7a..ca8575f 100644 --- a/src/repository/backup.rs +++ b/src/repository/backup.rs @@ -41,6 +41,10 @@ impl Repository { Ok(try!(Backup::get_all_from(&self.crypto.lock().unwrap(), self.layout.backups_path()))) } + pub fn has_backup(&self, name: &str) -> bool { + self.layout.backup_path(name).exists() + } + pub fn get_backup(&self, name: &str) -> Result { Ok(try!(Backup::read_from(&self.crypto.lock().unwrap(), self.layout.backup_path(name)))) }