|
@@ -7,6 +7,9 @@ import shutil
|
|
|
from subprocess import Popen, PIPE
|
|
|
import sys
|
|
|
import tempfile
|
|
|
+import traceback
|
|
|
+
|
|
|
+from attic import __version__
|
|
|
|
|
|
from .hashindex import NSIndex
|
|
|
from .helpers import Error, IntegrityError
|
|
@@ -75,8 +78,9 @@ class RepositoryServer:
|
|
|
except AttributeError:
|
|
|
f = getattr(self.repository, method)
|
|
|
res = f(*args)
|
|
|
- except Exception as e:
|
|
|
- os.write(stdout_fd, msgpack.packb((1, msgid, e.__class__.__name__, e.args)))
|
|
|
+ except BaseException as e:
|
|
|
+ exc = "Remote Traceback by Attic %s%s%s" % (__version__, os.linesep, traceback.format_exc())
|
|
|
+ os.write(stdout_fd, msgpack.packb((1, msgid, e.__class__.__name__, exc)))
|
|
|
else:
|
|
|
os.write(stdout_fd, msgpack.packb((1, msgid, None, res)))
|
|
|
if es:
|
|
@@ -182,7 +186,7 @@ class RemoteRepository:
|
|
|
raise Repository.ObjectNotFound(res[0], self.location.orig)
|
|
|
elif error == b'InvalidRPCMethod':
|
|
|
raise InvalidRPCMethod(*res)
|
|
|
- raise self.RPCError(error)
|
|
|
+ raise self.RPCError(res.decode('utf-8'))
|
|
|
else:
|
|
|
yield res
|
|
|
if not waiting_for and not calls:
|