diff --git a/src/borg/repository.py b/src/borg/repository.py index e53cec6d0..53b512781 100644 --- a/src/borg/repository.py +++ b/src/borg/repository.py @@ -2,6 +2,7 @@ import mmap import os import shutil +import stat import struct import time from binascii import hexlify, unhexlify @@ -233,11 +234,17 @@ def check_can_create_repository(self, path): repository, user's can only use the quota'd repository, when their --restrict-to-path points at the user's repository. """ - if os.path.exists(path): + try: + st = os.stat(path) + except FileNotFoundError: + pass # nothing there! + else: + # there is something already there! if self.is_repository(path): raise self.AlreadyExists(path) - if not os.path.isdir(path) or os.listdir(path): + if not stat.S_ISDIR(st.st_mode) or os.listdir(path): raise self.PathAlreadyExists(path) + # an empty directory is acceptable for us. while True: # Check all parent directories for Borg's repository README @@ -386,8 +393,12 @@ def migrate_lock(self, old_id, new_id): def open(self, path, exclusive, lock_wait=None, lock=True): self.path = path - if not os.path.isdir(path): + try: + st = os.stat(path) + except FileNotFoundError: raise self.DoesNotExist(path) + if not stat.S_ISDIR(st.st_mode): + raise self.InvalidRepository(path) if lock: self.lock = Lock(os.path.join(path, 'lock'), exclusive, timeout=lock_wait).acquire() else: