Standardize error handling for Subversion.

Review Request #13226 — Created Aug. 20, 2023 and submitted — Latest diff uploaded

Information

Review Board
release-6.x

Reviewers

Our Subversion support split the responsibility for error handling up
into SVNTool.normalize_error() and into individual backend functions.
The SVNTool version was even checking for backend-specific errors, a
holdover from when backends were first introduced.

In general, error handling for Subversion is iffy, as it depends on
backend internals. libsvn and PySVN may produce error strings that are
all wrapped by a single exception, which may be used for backend errors,
PySVN configuration errors, or repository errors. If operating inside a
callback, we also can't raise our own exceptions (which will come up and
be addressed in a future change).

This change redoes all our error and operation handling. Now, SVNTool
leaves all error handling up to the client backends. Backends are
expected to invoke operations within a with self.communicate(): block,
which will capture any errors and then hand them to the backend to turn
into proper exceptions. This will also give us an avenue to raise our
own exceptions within callbacks later, for SSL.

PySVN backend communication code has been updated to work with
communicate(). _do_on_path() now better wraps this as a context
manager as well, simplifying various backend implementations and letting
us remove some private callback functions.

All unit tests pass.

Commits

Files

    Loading...