소스 검색

Merge pull request #4713 from saurvs/forward-port-4698

Forward port #4698
TW 5 년 전
부모
커밋
97eca3d287
1개의 변경된 파일14개의 추가작업 그리고 3개의 파일을 삭제
  1. 14 3
      src/borg/repository.py

+ 14 - 3
src/borg/repository.py

@@ -2,6 +2,7 @@ import errno
 import mmap
 import os
 import shutil
+import stat
 import struct
 import time
 from binascii import hexlify, unhexlify
@@ -233,11 +234,17 @@ class Repository:
             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 @@ class Repository:
 
     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: