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__':