From 425a4d819d39f2e5f601e2822e7a427eca2d2058 Mon Sep 17 00:00:00 2001 From: Marian Beermann Date: Mon, 4 Apr 2016 17:09:52 +0200 Subject: [PATCH] Remote: don't print tracebacks for Error exceptions handled downstream (What we'd really want is to have proper exception transporting over the RPC) Fixes #792 --- borg/remote.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/borg/remote.py b/borg/remote.py index b91a4f95e..af74c69d8 100644 --- a/borg/remote.py +++ b/borg/remote.py @@ -93,8 +93,12 @@ class RepositoryServer: # pragma: no cover f = getattr(self.repository, method) res = f(*args) except BaseException as e: - logging.exception('Borg %s: exception in RPC call:', __version__) - logging.error(sysinfo()) + # These exceptions are reconstructed on the client end in RemoteRepository.call_many(), + # and will be handled just like locally raised exceptions. Suppress the remote traceback + # for these, except ErrorWithTraceback, which should always display a traceback. + if not isinstance(e, (Repository.DoesNotExist, Repository.AlreadyExists, PathNotAllowed)): + logging.exception('Borg %s: exception in RPC call:', __version__) + logging.error(sysinfo()) exc = "Remote Exception (see remote log for the traceback)" os.write(stdout_fd, msgpack.packb((1, msgid, e.__class__.__name__, exc))) else: