From 4843719f72de2f535dd1f15b8e91317d325ac30f Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Thu, 4 Feb 2016 23:19:35 +0100 Subject: [PATCH] Cache: fix exception handling in __init__, release lock, fixes #610 --- borg/cache.py | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/borg/cache.py b/borg/cache.py index ea3ecb970..c46fa6be8 100644 --- a/borg/cache.py +++ b/borg/cache.py @@ -58,23 +58,27 @@ class Cache: raise self.CacheInitAbortedError() self.create() self.open(lock_wait=lock_wait) - # Warn user before sending data to a relocated repository - if self.previous_location and self.previous_location != repository._location.canonical_path(): - msg = ("Warning: The repository at location {} was previously located at {}".format(repository._location.canonical_path(), self.previous_location) + - "\n" + - "Do you want to continue? [yN] ") - if not yes(msg, false_msg="Aborting.", env_var_override='BORG_RELOCATED_REPO_ACCESS_IS_OK'): - raise self.RepositoryAccessAborted() + try: + # Warn user before sending data to a relocated repository + if self.previous_location and self.previous_location != repository._location.canonical_path(): + msg = ("Warning: The repository at location {} was previously located at {}".format(repository._location.canonical_path(), self.previous_location) + + "\n" + + "Do you want to continue? [yN] ") + if not yes(msg, false_msg="Aborting.", env_var_override='BORG_RELOCATED_REPO_ACCESS_IS_OK'): + raise self.RepositoryAccessAborted() - if sync and self.manifest.id != self.manifest_id: - # If repository is older than the cache something fishy is going on - if self.timestamp and self.timestamp > manifest.timestamp: - raise self.RepositoryReplay() - # Make sure an encrypted repository has not been swapped for an unencrypted repository - if self.key_type is not None and self.key_type != str(key.TYPE): - raise self.EncryptionMethodMismatch() - self.sync() - self.commit() + if sync and self.manifest.id != self.manifest_id: + # If repository is older than the cache something fishy is going on + if self.timestamp and self.timestamp > manifest.timestamp: + raise self.RepositoryReplay() + # Make sure an encrypted repository has not been swapped for an unencrypted repository + if self.key_type is not None and self.key_type != str(key.TYPE): + raise self.EncryptionMethodMismatch() + self.sync() + self.commit() + except: + self.close() + raise def __enter__(self): return self