You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2014/04/09 22:06:22 UTC

svn commit: r1586122 - in /subversion/trunk/subversion/libsvn_ra_svn: client.c marshal.c protocol

Author: philip
Date: Wed Apr  9 20:06:22 2014
New Revision: 1586122

URL: http://svn.apache.org/r1586122
Log:
Add a client-side workaround for an svnserve properties bug
in 1.8.0-1.8.8.

* subversion/libsvn_ra_svn/protocol
  (get-file, get-dir): Update to match released implementation.

* subversion/libsvn_ra_svn/client.c
  (ra_svn_get_dir): Send want-iprops as "false".

* subversion/libsvn_ra_svn/marshal.c
  (svn_ra_svn__write_cmd_get_file): Send want-iprops as "false".

Modified:
    subversion/trunk/subversion/libsvn_ra_svn/client.c
    subversion/trunk/subversion/libsvn_ra_svn/marshal.c
    subversion/trunk/subversion/libsvn_ra_svn/protocol

Modified: subversion/trunk/subversion/libsvn_ra_svn/client.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/client.c?rev=1586122&r1=1586121&r2=1586122&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_svn/client.c (original)
+++ subversion/trunk/subversion/libsvn_ra_svn/client.c Wed Apr  9 20:06:22 2014
@@ -1375,8 +1375,11 @@ static svn_error_t *ra_svn_get_dir(svn_r
     SVN_ERR(svn_ra_svn__write_word(conn, pool, SVN_RA_SVN_DIRENT_TIME));
   if (dirent_fields & SVN_DIRENT_LAST_AUTHOR)
     SVN_ERR(svn_ra_svn__write_word(conn, pool, SVN_RA_SVN_DIRENT_LAST_AUTHOR));
-
-  SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!))"));
+  
+  /* Always send the, nominally optional, want-iprops as "false" to
+     workaround a bug in svnserve 1.8.0-1.8.8 that causes the server
+     to see "true" if it is omitted. */
+  SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)b)", FALSE));
 
   SVN_ERR(handle_auth_request(sess_baton, pool));
   SVN_ERR(svn_ra_svn__read_cmd_response(conn, pool, "rll", &rev, &proplist,

Modified: subversion/trunk/subversion/libsvn_ra_svn/marshal.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/marshal.c?rev=1586122&r1=1586121&r2=1586122&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_svn/marshal.c (original)
+++ subversion/trunk/subversion/libsvn_ra_svn/marshal.c Wed Apr  9 20:06:22 2014
@@ -2092,7 +2092,11 @@ svn_ra_svn__write_cmd_get_file(svn_ra_sv
   SVN_ERR(write_tuple_end_list(conn, pool));
   SVN_ERR(write_tuple_boolean(conn, pool, props));
   SVN_ERR(write_tuple_boolean(conn, pool, stream));
-  SVN_ERR(writebuf_write_short_string(conn, pool, ") ) ", 4));
+
+  /* Always send the, nominally optional, want-iprops as "false" to
+     workaround a bug in svnserve 1.8.0-1.8.8 that causes the server
+     to see "true" if it is omitted. */
+  SVN_ERR(writebuf_write_short_string(conn, pool, " false ) ) ", 11));
 
   return SVN_NO_ERROR;
 }

Modified: subversion/trunk/subversion/libsvn_ra_svn/protocol
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/protocol?rev=1586122&r1=1586121&r2=1586122&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_svn/protocol (original)
+++ subversion/trunk/subversion/libsvn_ra_svn/protocol Wed Apr  9 20:06:22 2014
@@ -303,18 +303,20 @@ second place for auth-request point as n
 
   get-file
     params:   ( path:string [ rev:number ] want-props:bool want-contents:bool
-                [ want-iprops:bool ] )
+                ? want-iprops:bool )
     response: ( [ checksum:string ] rev:number props:proplist
                 [ inherited-props:iproplist ] )
     If want-contents is specified, then after sending response, server
      sends file contents as a series of strings, terminated by the empty
      string, followed by a second empty command response to indicate
      whether an error occurred during the sending of the file.
-    NOTE: the standard client never sends want-iprops, it uses get-iprops. 
+    NOTE: the standard client doesn't send want-iprops as true, it uses
+     get-iprops, but does send want-iprops as false to workaround a server
+     bug in 1.8.0-1.8.8.
 
   get-dir
     params:   ( path:string [ rev:number ] want-props:bool want-contents:bool
-                ? ( field:dirent-field ... ) [ want-iprops:bool ] )
+                ? ( field:dirent-field ... ) ? want-iprops:bool )
     response: ( rev:number props:proplist ( entry:dirent ... )
                 [ inherited-props:iproplist ] )]
     dirent:   ( name:string kind:node-kind size:number has-props:bool
@@ -322,7 +324,9 @@ second place for auth-request point as n
                 [ last-author:string ] )
     dirent-field: kind | size | has-props | created-rev | time | last-author
                   | word
-    NOTE: the standard client never sends want-iprops, it uses get-iprops. 
+    NOTE: the standard client doesn't send want-iprops as true, it uses
+     get-iprops, but does send want-iprops as false to workaround a server
+     bug in 1.8.0-1.8.8.
 
   check-path
     params:   ( path:string [ rev:number ] )