http://subversion.tigris.org/issues/show_bug.cgi?id=4369

If I have broken locks the commit fails:

svnadmin create repo
svn -mm import repo/format file://`pwd`/repo/A/f
svn co http://localhost/obj/repo wc
svn lock wc/A/f
echo xx >> wc/A/f
svn lock --force file://`pwd`/repo/A/f
svn -mm ci wc

With 1.8/serf

svn: E175002: Commit failed (details follow):
svn: E175002: PUT of '/obj/repo/!svn/txr/1-2/A/f': 412 Precondition Failed

With 1.7/neon

svn: E195022: File '/home/pm/sw/subversion/obj/wc/A/f' is locked in another 
working copy
svn: E170007: No lock on path '/obj/repo/!svn/txr/1-3/A/f' (Status 423 on PUT 
Request)
svn: E175002: Server sent unexpected return value (423 Locked) in response to 
PUT request for '/obj/repo/!svn/txr/1-3/A/f'

The reason appears to be that 1.8/serf sends lock tokens in If headers
without an URI:

If: (<opaquelocktoken:d5b2cb02-34e1-4893-ba8d-ccbcc22fd953>)

and apache responds with a 412 while 1.7/neon sends an URI:

If: <http://localhost:9630/obj/repo/A/f> 
(<opaquelocktoken:ad688167-ca91-43b9-9d28-f3b8b672ecb9>)

and apache responds with a 423.

What sort of URI do we have to supply?  Will a session relative <f> do?
Or a server relative </obj/repo/A/f>?  Or a full scheme/host/port/path?

How about this for server relative:

Index: subversion/libsvn_ra_serf/commit.c
===================================================================
--- subversion/libsvn_ra_serf/commit.c  (revision 1488294)
+++ subversion/libsvn_ra_serf/commit.c  (working copy)
@@ -804,8 +804,12 @@
       if (token)
         {
           const char *token_header;
+          const char *token_path
+            = 
svn_path_url_add_component2(commit_ctx->session->session_url.path,
+                                          relpath, pool);
 
-          token_header = apr_pstrcat(pool, "(<", token, ">)", (char *)NULL);
+          token_header = apr_pstrcat(pool, "<", token_path, "> (<", token, 
">)",
+                                     (char *)NULL);
           serf_bucket_headers_set(headers, "If", token_header);
         }
     }

-- 
Certified & Supported Apache Subversion Downloads:
http://www.wandisco.com/subversion/download

Reply via email to