summaryrefslogtreecommitdiff
path: root/subversion/libsvn_ra_serf/getlocks.c
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/libsvn_ra_serf/getlocks.c')
-rw-r--r--subversion/libsvn_ra_serf/getlocks.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/subversion/libsvn_ra_serf/getlocks.c b/subversion/libsvn_ra_serf/getlocks.c
index 04e5561799361..df201a7506f55 100644
--- a/subversion/libsvn_ra_serf/getlocks.c
+++ b/subversion/libsvn_ra_serf/getlocks.c
@@ -116,6 +116,7 @@ getlocks_closed(svn_ra_serf__xml_estate_t *xes,
if (leaving_state == LOCK)
{
const char *path = svn_hash_gets(attrs, "path");
+ const char *token = svn_hash_gets(attrs, "token");
svn_boolean_t save_lock = FALSE;
/* Filter out unwanted paths. Since Subversion only allows
@@ -128,6 +129,12 @@ getlocks_closed(svn_ra_serf__xml_estate_t *xes,
c) we've asked for depth=files or depth=immediates, and this
lock is on an immediate child of our query path.
*/
+ if (! token)
+ {
+ /* A lock without a token is not a lock; just an answer that there
+ is no lock on the node. */
+ save_lock = FALSE;
+ }
if (strcmp(lock_ctx->path, path) == 0
|| lock_ctx->requested_depth == svn_depth_infinity)
{
@@ -154,7 +161,7 @@ getlocks_closed(svn_ra_serf__xml_estate_t *xes,
them may have not been sent, so the value will be NULL. */
lock.path = path;
- lock.token = svn_hash_gets(attrs, "token");
+ lock.token = token;
lock.owner = svn_hash_gets(attrs, "owner");
lock.comment = svn_hash_gets(attrs, "comment");
@@ -234,6 +241,7 @@ svn_ra_serf__get_locks(svn_ra_session_t *ra_session,
svn_ra_serf__handler_t *handler;
svn_ra_serf__xml_context_t *xmlctx;
const char *req_url, *rel_path;
+ svn_error_t *err;
req_url = svn_path_url_add_component2(session->session_url.path, path, pool);
SVN_ERR(svn_ra_serf__get_relative_path(&rel_path, req_url, session,
@@ -260,7 +268,14 @@ svn_ra_serf__get_locks(svn_ra_session_t *ra_session,
handler->body_delegate = create_getlocks_body;
handler->body_delegate_baton = lock_ctx;
- SVN_ERR(svn_ra_serf__context_run_one(handler, pool));
+ err = svn_ra_serf__context_run_one(handler, pool);
+
+ /* Wrap the server generated error for an unsupported report with the
+ documented error for this ra function. */
+ if (svn_error_find_cause(err, SVN_ERR_UNSUPPORTED_FEATURE))
+ err = svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, err, NULL);
+
+ SVN_ERR(err);
/* We get a 404 when a path doesn't exist in HEAD, but it might
have existed earlier (E.g. 'svn ls http://s/svn/trunk/file@1' */