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,