Improve error handling and presentation
Review Request #10446 — Created March 16, 2019 and updated
Previously almost every error that was generated, where it be by
rb-gateway itself or a by a support library, was presented to the user
as-is. We had no distinction between a user-visible error (such as when
a requested commit or file does not exist) and an internal error (such
as when the call to
We now make the distinction explicit with two new kinds of errors:
InternalError, which is visible only in log messages and if
returned in an API response will be a generic HTTP 500, and
UserVisibleError, which must be explicitly opted-in to and should
only contain sanitized information suitable for the end user.
Both of these errors also support the new
ErrorChain interface, which
allows errors to declare a cause, e.g., a user visible error that
branches could not be retrieved would have a cause that is the internal
error from hg.
Error causes are not presently returned in API responses, due to them
mostly being internal, but the entire chain will be shown in log
A few other cleanups have been made:
- All error responses are now JSON instead of plain text.
- Some incorrect json field tags have been corrected.
- Built and ran rb-gateway. Observed errors were logged correctly.
- Ran unit tests.
- Failed a POST to the
/sessionendpoint and got a JSON response.
Use WriteError in api.withRepository.
Revision 2 (+824 -200)