You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2011/04/27 02:54:14 UTC
svn commit: r1096975 - in /subversion/trunk/subversion:
libsvn_ra_serf/locks.c tests/cmdline/lock_tests.py
Author: rhuijben
Date: Wed Apr 27 00:54:14 2011
New Revision: 1096975
URL: http://svn.apache.org/viewvc?rev=1096975&view=rev
Log:
Fix issue #3794 and #3801, for ra_serf.
* subversion/libsvn_ra_serf/locks.c
(svn_ra_serf__unlock): On http status 403 provide the expected error type to
the lock callback.
* subversion/tests/cmdline/lock_tests.py
(unlock_wrong_token,
unlocked_lock_of_other_user): Remove XFail for these tests for ra_serf,
by making the XFail neon specific.
Modified:
subversion/trunk/subversion/libsvn_ra_serf/locks.c
subversion/trunk/subversion/tests/cmdline/lock_tests.py
Modified: subversion/trunk/subversion/libsvn_ra_serf/locks.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/locks.c?rev=1096975&r1=1096974&r2=1096975&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/locks.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/locks.c Wed Apr 27 00:54:14 2011
@@ -695,7 +695,9 @@ svn_ra_serf__unlock(svn_ra_session_t *ra
const char *req_url, *path, *token;
const void *key;
void *val;
+ svn_lock_t *existing_lock;
struct unlock_context_t unlock_ctx;
+ svn_error_t *lock_err = NULL;
svn_pool_clear(subpool);
@@ -707,10 +709,9 @@ svn_ra_serf__unlock(svn_ra_session_t *ra
if (force && (!token || token[0] == '\0'))
{
- svn_lock_t *lock;
-
- SVN_ERR(svn_ra_serf__get_lock(ra_session, &lock, path, subpool));
- token = lock->token;
+ SVN_ERR(svn_ra_serf__get_lock(ra_session, &existing_lock, path,
+ subpool));
+ token = existing_lock->token;
if (!token)
{
svn_error_t *err;
@@ -753,15 +754,28 @@ svn_ra_serf__unlock(svn_ra_session_t *ra
svn_ra_serf__request_create(handler);
SVN_ERR(svn_ra_serf__context_run_wait(&ctx->done, session, subpool));
- if (ctx->status != 204)
+ switch (ctx->status)
{
- return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
- _("Unlock request failed: %d %s"),
- ctx->status, ctx->reason);
+ case 204:
+ break; /* OK */
+ case 403:
+ /* Api users expect this specific error code to detect failures */
+ lock_err = svn_error_createf(SVN_ERR_FS_LOCK_OWNER_MISMATCH, NULL,
+ _("Unlock request failed: %d %s"),
+ ctx->status, ctx->reason);
+ break;
+ default:
+ lock_err = svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
+ _("Unlock request failed: %d %s"),
+ ctx->status, ctx->reason);
}
if (lock_func)
- SVN_ERR(lock_func(lock_baton, path, FALSE, NULL, NULL, subpool));
+ {
+ SVN_ERR(lock_func(lock_baton, path, FALSE, existing_lock,
+ lock_err, subpool));
+ svn_error_clear(lock_err);
+ }
}
return SVN_NO_ERROR;
Modified: subversion/trunk/subversion/tests/cmdline/lock_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/lock_tests.py?rev=1096975&r1=1096974&r2=1096975&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/lock_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/lock_tests.py Wed Apr 27 00:54:14 2011
@@ -1318,7 +1318,7 @@ def ls_url_encoded(sbox):
#----------------------------------------------------------------------
# Make sure unlocking a path with the wrong lock token fails.
-@XFail(svntest.main.is_ra_type_dav)
+@XFail(svntest.main.is_ra_type_dav_neon)
@Issue(3794)
def unlock_wrong_token(sbox):
"verify unlocking with wrong lock token"
@@ -1380,7 +1380,7 @@ def examine_lock_encoded_recurse(sbox):
svntest.main.wc_author)
# Trying to unlock someone else's lock with --force should fail.
-@XFail(svntest.main.is_ra_type_dav)
+@XFail(svntest.main.is_ra_type_dav_neon)
@Issue(3801)
def unlocked_lock_of_other_user(sbox):
"unlock file locked by other user"