br...@apache.org wrote on Wed, 26 Dec 2018 04:28 +0000:
> Reimplement exceptions in SVN++.
> 
> Instead of extracting error messages from the svn_error_t when the exception
> is created, keep the svn_error_t embedded in the exception and use its 
> contents
> only when needed.

> +++ subversion/trunk/subversion/bindings/cxx/include/svnxx/exception.hpp Wed 
> Dec 26 04:28:25 2018
> @@ -31,6 +31,46 @@
> +/**
> + * @defgroup svnxx_exceptions Exceptions
> + *
> + * Exceptions in SVN++
> + * ===================
> + *
> + * SVN++ uses exceptions for the following purposes:
> + * @li Reporting memory allocation failure; where Subversion's
> + *     default hehaviour is to abort when an allocation from an APR
> + *     pool fails, SVN++ throws an exception instead.
> + * @li Reporting errors; Subversion's error messages are wrapped in
> + *     exceptions.
> + * @li Reporting cancelled operations; an operation that was
> + *     cancelled from user code will report this by throwing a
> + *     specific exception type.
> + * @li Terminating iteration; user-level callbacks may throw a
> + *     specific exception type to cancel an ongoing operation that
> + *     is generating the callback messages. Other exceptions from
> + *     user-level callbacks will be propagated back to the calling
> + *     application.

This part is an excellent overview; if it's not already in the C doxygen
docs or in HACKING, it should be (mutatis mutandis).

> + * Exception Hierarchy
> + * -------------------
> + *
> + * All SVN++ exceptions are ultimately derived from @c std:::exception.
> + *
> + * * <em>std::exception</em>
> + *   + <em>std::runtime_error</em>
> + *     - apache::subversion::svnxx::allocation_failed\n
> + *       Thrown when memory cannot be allocated from an APR pool
> + *   + apache::subversion::svnxx::error\n
> + *     Thrown when an operation failed (see @ref svn_error_t)
> + *     - apache::subversion::svnxx::canceled\n
> + *       Thrown when an operation was canceled
> + *   + apache::subversion::svnxx::cancel\n
> + *     Thrown by user callbacks to terminate iteration

I think the last two names here are too similar; it'll be way too easy
to mis-tab-complete them for each other.  Suggest to rename the second
one to stop_iteration to match the name of SVN_ERR_STOP_ITERATION.

Haven't reviewed the rest of the patch, nor the mapping of
svn_error_t::apr_err values to this hierarchy.

Cheers,

Daniel

Reply via email to