|
@@ -241,6 +241,24 @@ class RemoteRepository:
|
|
|
del self.cache[args]
|
|
|
return msgid
|
|
|
|
|
|
+ def handle_error(error, res):
|
|
|
+ if error == b'DoesNotExist':
|
|
|
+ raise Repository.DoesNotExist(self.location.orig)
|
|
|
+ elif error == b'AlreadyExists':
|
|
|
+ raise Repository.AlreadyExists(self.location.orig)
|
|
|
+ elif error == b'CheckNeeded':
|
|
|
+ raise Repository.CheckNeeded(self.location.orig)
|
|
|
+ elif error == b'IntegrityError':
|
|
|
+ raise IntegrityError(res)
|
|
|
+ elif error == b'PathNotAllowed':
|
|
|
+ raise PathNotAllowed(*res)
|
|
|
+ elif error == b'ObjectNotFound':
|
|
|
+ raise Repository.ObjectNotFound(res[0], self.location.orig)
|
|
|
+ elif error == b'InvalidRPCMethod':
|
|
|
+ raise InvalidRPCMethod(*res)
|
|
|
+ else:
|
|
|
+ raise self.RPCError(res.decode('utf-8'))
|
|
|
+
|
|
|
calls = list(calls)
|
|
|
waiting_for = []
|
|
|
w_fds = [self.stdin_fd]
|
|
@@ -250,22 +268,7 @@ class RemoteRepository:
|
|
|
error, res = self.responses.pop(waiting_for[0])
|
|
|
waiting_for.pop(0)
|
|
|
if error:
|
|
|
- if error == b'DoesNotExist':
|
|
|
- raise Repository.DoesNotExist(self.location.orig)
|
|
|
- elif error == b'AlreadyExists':
|
|
|
- raise Repository.AlreadyExists(self.location.orig)
|
|
|
- elif error == b'CheckNeeded':
|
|
|
- raise Repository.CheckNeeded(self.location.orig)
|
|
|
- elif error == b'IntegrityError':
|
|
|
- raise IntegrityError(res)
|
|
|
- elif error == b'PathNotAllowed':
|
|
|
- raise PathNotAllowed(*res)
|
|
|
- elif error == b'ObjectNotFound':
|
|
|
- raise Repository.ObjectNotFound(res[0], self.location.orig)
|
|
|
- elif error == b'InvalidRPCMethod':
|
|
|
- raise InvalidRPCMethod(*res)
|
|
|
- else:
|
|
|
- raise self.RPCError(res.decode('utf-8'))
|
|
|
+ handle_error(error, res)
|
|
|
else:
|
|
|
yield res
|
|
|
if not waiting_for and not calls:
|
|
@@ -287,6 +290,8 @@ class RemoteRepository:
|
|
|
type, msgid, error, res = unpacked
|
|
|
if msgid in self.ignore_responses:
|
|
|
self.ignore_responses.remove(msgid)
|
|
|
+ if error:
|
|
|
+ handle_error(error, res)
|
|
|
else:
|
|
|
self.responses[msgid] = error, res
|
|
|
elif fd is self.stderr_fd:
|