Avoid dropping errors when handling locking requests over serf. I
don't know whether a standard server will ever trigger the code path
that drops the error but it's simple for a modified server to return
an error, 412 for example, that gets dropped.
* subversion/libsvn_ra_serf/locks.c
(determine_error): Check status line if err is not set, check
reason string is not null.
(svn_ra_serf__get_lock, svn_ra_serf__lock): Add tracing.
git-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1489526 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/subversion/libsvn_ra_serf/locks.c b/subversion/libsvn_ra_serf/locks.c
index db2d371..c54ef55 100644
--- a/subversion/libsvn_ra_serf/locks.c
+++ b/subversion/libsvn_ra_serf/locks.c
@@ -214,29 +214,26 @@
determine_error(svn_ra_serf__handler_t *handler,
svn_error_t *err)
{
- {
- apr_status_t errcode;
+ apr_status_t errcode;
- if (handler->sline.code == 423)
- errcode = SVN_ERR_FS_PATH_ALREADY_LOCKED;
- else if (handler->sline.code == 403)
- errcode = SVN_ERR_RA_DAV_FORBIDDEN;
- else
- return err;
+ if (err)
+ return err;
- /* Client-side or server-side error already. Return it. */
- if (err != NULL)
- return err;
+ if (handler->sline.code == 200 || handler->sline.code == 207)
+ return SVN_NO_ERROR;
+ else if (handler->sline.code == 423)
+ errcode = SVN_ERR_FS_PATH_ALREADY_LOCKED;
+ else if (handler->sline.code == 403)
+ errcode = SVN_ERR_RA_DAV_FORBIDDEN;
+ else
+ errcode = SVN_ERR_RA_DAV_REQUEST_FAILED;
- /* The server did not send us a detailed human-readable error.
- Provide a generic error. */
- err = svn_error_createf(errcode, NULL,
- _("Lock request failed: %d %s"),
- handler->sline.code,
- handler->sline.reason);
- }
-
- return err;
+ /* The server did not send us a detailed human-readable error.
+ Provide a generic error. */
+ return svn_error_createf(errcode, NULL,
+ _("Lock request failed: %d %s"),
+ handler->sline.code,
+ handler->sline.reason ? handler->sline.reason : "");
}
@@ -406,7 +403,7 @@
lock_ctx->handler = handler;
err = svn_ra_serf__context_run_one(handler, pool);
- err = determine_error(handler, err);
+ err = svn_error_trace(determine_error(handler, err));
if (handler->sline.code == 404)
{
@@ -497,7 +494,7 @@
lock_ctx->handler = handler;
err = svn_ra_serf__context_run_one(handler, iterpool);
- err = determine_error(handler, err);
+ err = svn_error_trace(determine_error(handler, err));
if (lock_func)
new_err = lock_func(lock_baton, lock_ctx->path, TRUE, lock_ctx->lock,