Pārlūkot izejas kodu

attic PR #228 - Merge branch 'fix_ro_target' of ../attic

Thomas Waldmann 10 gadi atpakaļ
vecāks
revīzija
ee42ba561f
2 mainītis faili ar 10 papildinājumiem un 2 dzēšanām
  1. 2 1
      attic/remote.py
  2. 8 1
      attic/repository.py

+ 2 - 1
attic/remote.py

@@ -186,7 +186,8 @@ class RemoteRepository:
                             raise Repository.ObjectNotFound(res[0], self.location.orig)
                         elif error == b'InvalidRPCMethod':
                             raise InvalidRPCMethod(*res)
-                        raise self.RPCError(res.decode('utf-8'))
+                        else:
+                            raise self.RPCError(res.decode('utf-8'))
                     else:
                         yield res
                         if not waiting_for and not calls:

+ 8 - 1
attic/repository.py

@@ -145,7 +145,14 @@ class Repository:
 
     def prepare_txn(self, transaction_id, do_cleanup=True):
         self._active_txn = True
-        self.lock.upgrade()
+        try:
+            self.lock.upgrade()
+        except UpgradableLock.WriteLockFailed:
+            # if upgrading the lock to exclusive fails, we do not have an
+            # active transaction. this is important for "serve" mode, where
+            # the repository instance lives on - even if exceptions happened.
+            self._active_txn = False
+            raise
         if not self.index:
             self.index = self.open_index(transaction_id)
         if transaction_id is None: