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 2014/03/20 12:11:13 UTC
svn commit: r1579590 - in /subversion/branches/1.8.x-r1579588: ./
subversion/libsvn_ra_serf/locks.c subversion/tests/cmdline/lock_tests.py
Author: rhuijben
Date: Thu Mar 20 11:11:13 2014
New Revision: 1579590
URL: http://svn.apache.org/r1579590
Log:
Merge r1579588 from trunk, accounting for lock code refactoring
Modified:
subversion/branches/1.8.x-r1579588/ (props changed)
subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/locks.c
subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/lock_tests.py
Propchange: subversion/branches/1.8.x-r1579588/
------------------------------------------------------------------------------
Merged /subversion/trunk:r1579588
Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/locks.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/locks.c?rev=1579590&r1=1579589&r2=1579590&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/locks.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/locks.c Thu Mar 20 11:11:13 2014
@@ -156,11 +156,20 @@ locks_closed(svn_ra_serf__xml_estate_t *
if (leaving_state == TIMEOUT)
{
- if (strcmp(cdata->data, "Infinite") == 0)
+ if (strcasecmp(cdata->data, "Infinite") == 0)
lock_ctx->lock->expiration_date = 0;
+ else if (strncasecmp(cdata->data, "Second-", 7) == 0)
+ {
+ unsigned n;
+ SVN_ERR(svn_cstring_atoui(&n, cdata->data+7));
+
+ lock_ctx->lock->expiration_date = apr_time_now() +
+ apr_time_from_sec(n);
+ }
else
- SVN_ERR(svn_time_from_cstring(&lock_ctx->lock->creation_date,
- cdata->data, lock_ctx->pool));
+ return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("Invalid LOCK timeout value '%s'"),
+ cdata->data);
}
else if (leaving_state == HREF)
{
Modified: subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/lock_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/lock_tests.py?rev=1579590&r1=1579589&r2=1579590&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/lock_tests.py (original)
+++ subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/lock_tests.py Thu Mar 20 11:11:13 2014
@@ -1890,6 +1890,56 @@ def drop_locks_on_parent_deletion(sbox):
wc_dir)
+@SkipUnless(svntest.main.is_ra_type_dav)
+def dav_lock_timeout(sbox):
+ "unlock a lock with timeout"
+
+ import httplib
+ from urlparse import urlparse
+ import base64
+
+ sbox.build()
+ loc = urlparse(sbox.repo_url)
+
+ if loc.scheme == 'http':
+ h = httplib.HTTPConnection(loc.hostname, loc.port)
+ else:
+ h = httplib.HTTPSConnection(loc.hostname, loc.port)
+
+ lock_body = '<?xml version="1.0" encoding="utf-8" ?>' \
+ '<D:lockinfo xmlns:D="DAV:">' \
+ ' <D:lockscope><D:exclusive/></D:lockscope>' \
+ ' <D:locktype><D:write/></D:locktype>' \
+ ' <D:owner>' \
+ ' <D:href>http://a/test</D:href>' \
+ ' </D:owner>' \
+ '</D:lockinfo>'
+
+ lock_headers = {
+ 'Authorization': 'Basic ' + base64.b64encode('jconstant:rayjandom'),
+ 'Timeout': 'Second-86400'
+ }
+
+ # Enabling the following line makes this test easier to debug
+ h.set_debuglevel(9)
+
+ h.request('LOCK', sbox.repo_url + '/iota', lock_body, lock_headers)
+
+ r = h.getresponse()
+
+ # Verify that there is a lock, by trying to obtain one
+ svntest.actions.run_and_verify_svn2(None, None, ".*locked by user", 0,
+ 'lock', '-m', '', sbox.ospath('iota'))
+
+ # Before this patch this used to fail with a parse error of the timeout
+ svntest.actions.run_and_verify_svn2(None, None, ".*Unlock.*iota' failed", 0,
+ 'unlock', sbox.repo_url + '/iota')
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'unlock', sbox.ospath('iota'), '--force')
+
+
+
########################################################################
# Run the tests
@@ -1943,6 +1993,7 @@ test_list = [ None,
lock_unlock_deleted,
commit_stolen_lock,
drop_locks_on_parent_deletion,
+ dav_lock_timeout,
]
if __name__ == '__main__':