You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2012/09/26 14:47:23 UTC
svn commit: r1390443 - in /subversion/trunk: ./
subversion/include/svn_ra_svn.h subversion/libsvn_ra_svn/client.c
subversion/libsvn_ra_svn/editorp.c subversion/libsvn_ra_svn/marshal.c
Author: stefan2
Date: Wed Sep 26 12:47:23 2012
New Revision: 1390443
URL: http://svn.apache.org/viewvc?rev=1390443&view=rev
Log:
Merge third batch of changes from the 10Gb branch.
Switch ra_svn to templated commands.
Revisions 1388276,1390209
Modified:
subversion/trunk/ (props changed)
subversion/trunk/subversion/include/svn_ra_svn.h
subversion/trunk/subversion/libsvn_ra_svn/client.c
subversion/trunk/subversion/libsvn_ra_svn/editorp.c
subversion/trunk/subversion/libsvn_ra_svn/marshal.c
Propchange: subversion/trunk/
------------------------------------------------------------------------------
Merged /subversion/branches/10Gb:r1388276,1390209
Modified: subversion/trunk/subversion/include/svn_ra_svn.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_ra_svn.h?rev=1390443&r1=1390442&r2=1390443&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_ra_svn.h (original)
+++ subversion/trunk/subversion/include/svn_ra_svn.h Wed Sep 26 12:47:23 2012
@@ -158,6 +158,64 @@ typedef struct svn_ra_svn_item_t
typedef svn_error_t *(*svn_ra_svn_edit_callback)(void *baton);
/**
+ * List of all commands supported by the SVN:// protocol.
+ *
+ * @since New in 1.9.
+ */
+typedef enum svn_ra_svn_cmd_t
+{
+ svn_ra_svn_cmd_target_rev,
+ svn_ra_svn_cmd_open_root,
+ svn_ra_svn_cmd_delete_entry,
+ svn_ra_svn_cmd_add_dir,
+ svn_ra_svn_cmd_open_dir,
+ svn_ra_svn_cmd_change_dir_prop,
+ svn_ra_svn_cmd_close_dir,
+ svn_ra_svn_cmd_absent_dir,
+ svn_ra_svn_cmd_add_file,
+ svn_ra_svn_cmd_open_file,
+ svn_ra_svn_cmd_change_file_prop,
+ svn_ra_svn_cmd_close_file,
+ svn_ra_svn_cmd_absent_file,
+ svn_ra_svn_cmd_textdelta_chunk,
+ svn_ra_svn_cmd_textdelta_end,
+ svn_ra_svn_cmd_apply_textdelta,
+ svn_ra_svn_cmd_close_edit,
+ svn_ra_svn_cmd_abort_edit,
+
+ svn_ra_svn_cmd_set_path,
+ svn_ra_svn_cmd_delete_path,
+ svn_ra_svn_cmd_link_path,
+ svn_ra_svn_cmd_finish_report,
+ svn_ra_svn_cmd_abort_report,
+
+ svn_ra_svn_cmd_reparent,
+ svn_ra_svn_cmd_get_latest_rev,
+ svn_ra_svn_cmd_get_dated_rev,
+ svn_ra_svn_cmd_change_rev_prop2,
+ svn_ra_svn_cmd_change_rev_prop,
+ svn_ra_svn_cmd_rev_proplist,
+ svn_ra_svn_cmd_rev_prop,
+ svn_ra_svn_cmd_get_file,
+ svn_ra_svn_cmd_update,
+ svn_ra_svn_cmd_switch,
+ svn_ra_svn_cmd_status,
+ svn_ra_svn_cmd_diff,
+ svn_ra_svn_cmd_check_path,
+ svn_ra_svn_cmd_stat,
+ svn_ra_svn_cmd_get_file_revs,
+ svn_ra_svn_cmd_lock,
+ svn_ra_svn_cmd_unlock,
+ svn_ra_svn_cmd_get_lock,
+ svn_ra_svn_cmd_get_locks,
+ svn_ra_svn_cmd_replay,
+ svn_ra_svn_cmd_replay_range,
+ svn_ra_svn_cmd_get_deleted_rev,
+
+ svn_ra_svn_cmd__last
+} svn_ra_svn_cmd_t;
+
+/**
* Set the shim callbacks to be used by @a conn to @a shim_callbacks.
*
* @note This is a private API, external consumers should not use it.
@@ -448,13 +506,26 @@ svn_ra_svn_handle_commands(svn_ra_svn_co
/** Write a command over the network, using the same format string notation
* as svn_ra_svn_write_tuple().
+ *
+ * @deprecated Provided for backward compatibility with the 1.9 API.
+ * Use svn_ra_svn_write_templated_cmd instead.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_svn_write_cmd(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
const char *cmdname,
const char *fmt, ...);
+/** Write a command of type @a cmd over the network connection @a conn.
+ * The parameters to be provided are command-specific. @a pool will be
+ * used for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_templated_cmd(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_ra_svn_cmd_t cmd, ...);
+
/** Write a successful command response over the network, using the
* same format string notation as svn_ra_svn_write_tuple(). Do not use
* partial tuples with this function; if you need to use partial
Modified: subversion/trunk/subversion/libsvn_ra_svn/client.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/client.c?rev=1390443&r1=1390442&r2=1390443&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_svn/client.c (original)
+++ subversion/trunk/subversion/libsvn_ra_svn/client.c Wed Sep 26 12:47:23 2012
@@ -258,7 +258,7 @@ static svn_error_t *ra_svn_set_path(void
{
ra_svn_reporter_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "set-path", "crb(?c)w",
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_set_path,
path, rev, start_empty, lock_token,
svn_depth_to_word(depth)));
return SVN_NO_ERROR;
@@ -269,7 +269,8 @@ static svn_error_t *ra_svn_delete_path(v
{
ra_svn_reporter_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "delete-path", "c", path));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool,
+ svn_ra_svn_cmd_delete_path, path));
return SVN_NO_ERROR;
}
@@ -283,9 +284,11 @@ static svn_error_t *ra_svn_link_path(voi
{
ra_svn_reporter_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "link-path", "ccrb(?c)w",
- path, url, rev, start_empty, lock_token,
- svn_depth_to_word(depth)));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool,
+ svn_ra_svn_cmd_link_path,
+ path, url, rev, start_empty,
+ lock_token,
+ svn_depth_to_word(depth)));
return SVN_NO_ERROR;
}
@@ -294,7 +297,8 @@ static svn_error_t *ra_svn_finish_report
{
ra_svn_reporter_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, b->pool, "finish-report", ""));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, b->pool,
+ svn_ra_svn_cmd_finish_report));
SVN_ERR(handle_auth_request(b->sess_baton, b->pool));
SVN_ERR(svn_ra_svn_drive_editor2(b->conn, b->pool, b->editor, b->edit_baton,
NULL, FALSE));
@@ -307,7 +311,8 @@ static svn_error_t *ra_svn_abort_report(
{
ra_svn_reporter_baton_t *b = baton;
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, b->pool, "abort-report", ""));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, b->pool,
+ svn_ra_svn_cmd_abort_report));
return SVN_NO_ERROR;
}
@@ -753,7 +758,8 @@ static svn_error_t *ra_svn_reparent(svn_
svn_ra_svn__session_baton_t *new_sess;
apr_uri_t uri;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "reparent", "c", url));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_reparent, url));
err = handle_auth_request(sess, pool);
if (! err)
{
@@ -802,7 +808,8 @@ static svn_error_t *ra_svn_get_latest_re
svn_ra_svn__session_baton_t *sess_baton = session->priv;
svn_ra_svn_conn_t *conn = sess_baton->conn;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-latest-rev", ""));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_get_latest_rev));
SVN_ERR(handle_auth_request(sess_baton, pool));
SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "r", rev));
return SVN_NO_ERROR;
@@ -815,7 +822,8 @@ static svn_error_t *ra_svn_get_dated_rev
svn_ra_svn__session_baton_t *sess_baton = session->priv;
svn_ra_svn_conn_t *conn = sess_baton->conn;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-dated-rev", "c",
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_get_dated_rev,
svn_time_to_cstring(tm, pool)));
SVN_ERR(handle_auth_request(sess_baton, pool));
SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "r", rev));
@@ -859,11 +867,14 @@ static svn_error_t *ra_svn_change_rev_pr
}
if (has_atomic_revprops)
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "change-rev-prop2", "rc(?s)(b?s)",
- rev, name, value, dont_care, old_value));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_change_rev_prop2,
+ rev, name, value, dont_care,
+ old_value));
else
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "change-rev-prop", "rc?s",
- rev, name, value));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_change_rev_prop,
+ rev, name, value));
SVN_ERR(handle_auth_request(sess_baton, pool));
SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, ""));
@@ -900,7 +911,8 @@ static svn_error_t *ra_svn_rev_proplist(
svn_ra_svn_conn_t *conn = sess_baton->conn;
apr_array_header_t *proplist;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "rev-proplist", "r", rev));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_rev_proplist, rev));
SVN_ERR(handle_auth_request(sess_baton, pool));
SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "l", &proplist));
SVN_ERR(svn_ra_svn_parse_proplist(proplist, pool, props));
@@ -914,7 +926,8 @@ static svn_error_t *ra_svn_rev_prop(svn_
svn_ra_svn__session_baton_t *sess_baton = session->priv;
svn_ra_svn_conn_t *conn = sess_baton->conn;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "rev-prop", "rc", rev, name));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_rev_prop, rev, name));
SVN_ERR(handle_auth_request(sess_baton, pool));
SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "(?s)", value));
return SVN_NO_ERROR;
@@ -1023,8 +1036,9 @@ static svn_error_t *ra_svn_get_file(svn_
svn_checksum_ctx_t *checksum_ctx;
apr_pool_t *iterpool;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-file", "c(?r)bb", path,
- rev, (props != NULL), (stream != NULL)));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_get_file, path, rev,
+ (props != NULL), (stream != NULL)));
SVN_ERR(handle_auth_request(sess_baton, pool));
SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "(?c)rl",
&expected_digest,
@@ -1254,9 +1268,10 @@ static svn_error_t *ra_svn_update(svn_ra
svn_boolean_t recurse = DEPTH_TO_RECURSE(depth);
/* Tell the server we want to start an update. */
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "update", "(?r)cbwb", rev, target,
- recurse, svn_depth_to_word(depth),
- send_copyfrom_args));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool, svn_ra_svn_cmd_update,
+ rev, target, recurse,
+ svn_depth_to_word(depth),
+ send_copyfrom_args));
SVN_ERR(handle_auth_request(sess_baton, pool));
/* Fetch a reporter for the caller to drive. The reporter will drive
@@ -1279,9 +1294,9 @@ static svn_error_t *ra_svn_switch(svn_ra
svn_boolean_t recurse = DEPTH_TO_RECURSE(depth);
/* Tell the server we want to start a switch. */
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "switch", "(?r)cbcw", rev,
- target, recurse, switch_url,
- svn_depth_to_word(depth)));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool, svn_ra_svn_cmd_switch,
+ rev, target, recurse, switch_url,
+ svn_depth_to_word(depth)));
SVN_ERR(handle_auth_request(sess_baton, pool));
/* Fetch a reporter for the caller to drive. The reporter will drive
@@ -1304,9 +1319,9 @@ static svn_error_t *ra_svn_status(svn_ra
svn_boolean_t recurse = DEPTH_TO_RECURSE(depth);
/* Tell the server we want to start a status operation. */
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "status", "cb(?r)w",
- target, recurse, rev,
- svn_depth_to_word(depth)));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool, svn_ra_svn_cmd_status,
+ target, recurse, rev,
+ svn_depth_to_word(depth)));
SVN_ERR(handle_auth_request(sess_baton, pool));
/* Fetch a reporter for the caller to drive. The reporter will drive
@@ -1332,10 +1347,10 @@ static svn_error_t *ra_svn_diff(svn_ra_s
svn_boolean_t recurse = DEPTH_TO_RECURSE(depth);
/* Tell the server we want to start a diff. */
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "diff", "(?r)cbbcbw", rev,
- target, recurse, ignore_ancestry,
- versus_url, text_deltas,
- svn_depth_to_word(depth)));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool, svn_ra_svn_cmd_diff,
+ rev, target, recurse, ignore_ancestry,
+ versus_url, text_deltas,
+ svn_depth_to_word(depth)));
SVN_ERR(handle_auth_request(sess_baton, pool));
/* Fetch a reporter for the caller to drive. The reporter will drive
@@ -1567,7 +1582,9 @@ static svn_error_t *ra_svn_check_path(sv
svn_ra_svn_conn_t *conn = sess_baton->conn;
const char *kind_word;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "check-path", "c(?r)", path, rev));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_check_path,
+ path, rev));
SVN_ERR(handle_auth_request(sess_baton, pool));
SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "w", &kind_word));
*kind = svn_node_kind_from_word(kind_word);
@@ -1596,7 +1613,8 @@ static svn_error_t *ra_svn_stat(svn_ra_s
apr_array_header_t *list = NULL;
svn_dirent_t *the_dirent;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "stat", "c(?r)", path, rev));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool, svn_ra_svn_cmd_stat,
+ path, rev));
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess_baton, pool),
N_("'stat' not implemented")));
@@ -1774,9 +1792,10 @@ static svn_error_t *ra_svn_get_file_revs
rev_pool = svn_pool_create(pool);
chunk_pool = svn_pool_create(pool);
- SVN_ERR(svn_ra_svn_write_cmd(sess_baton->conn, pool, "get-file-revs",
- "c(?r)(?r)b", path, start, end,
- include_merged_revisions));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(sess_baton->conn, pool,
+ svn_ra_svn_cmd_get_file_revs,
+ path, start, end,
+ include_merged_revisions));
/* Servers before 1.1 don't support this command. Check for this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess_baton, pool),
@@ -1905,9 +1924,10 @@ static svn_error_t *ra_svn_lock_compat(s
path = key;
revnum = val;
- SVN_ERR(svn_ra_svn_write_cmd(conn, iterpool, "lock", "c(?c)b(?r)",
- path, comment,
- steal_lock, *revnum));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, iterpool,
+ svn_ra_svn_cmd_lock,
+ path, comment,
+ steal_lock, *revnum));
/* Servers before 1.2 doesn't support locking. Check this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, pool),
@@ -1970,8 +1990,9 @@ static svn_error_t *ra_svn_unlock_compat
else
token = NULL;
- SVN_ERR(svn_ra_svn_write_cmd(conn, iterpool, "unlock", "c(?c)b",
- path, token, break_lock));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, iterpool,
+ svn_ra_svn_cmd_unlock,
+ path, token, break_lock));
/* Servers before 1.2 don't support locking. Check this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, iterpool),
@@ -2258,7 +2279,8 @@ static svn_error_t *ra_svn_get_lock(svn_
svn_ra_svn_conn_t* conn = sess->conn;
apr_array_header_t *list;
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-lock", "c", path));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_get_lock, path));
/* Servers before 1.2 doesn't support locking. Check this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, pool),
@@ -2310,8 +2332,9 @@ static svn_error_t *ra_svn_get_locks(svn
SVN_ERR(path_relative_to_root(session, &abs_path, full_url, pool));
abs_path = svn_fspath__canonicalize(abs_path, pool);
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-locks", "c(w)", path,
- svn_depth_to_word(depth)));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_get_locks, path,
+ svn_depth_to_word(depth)));
/* Servers before 1.2 doesn't support locking. Check this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, pool),
@@ -2368,8 +2391,9 @@ static svn_error_t *ra_svn_replay(svn_ra
{
svn_ra_svn__session_baton_t *sess = session->priv;
- SVN_ERR(svn_ra_svn_write_cmd(sess->conn, pool, "replay", "rrb", revision,
- low_water_mark, send_deltas));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(sess->conn, pool,
+ svn_ra_svn_cmd_replay, revision,
+ low_water_mark, send_deltas));
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, pool),
N_("Server doesn't support the replay "
@@ -2398,9 +2422,10 @@ ra_svn_replay_range(svn_ra_session_t *se
svn_revnum_t rev;
svn_boolean_t drive_aborted = FALSE;
- SVN_ERR(svn_ra_svn_write_cmd(sess->conn, pool, "replay-range", "rrrb",
- start_revision, end_revision,
- low_water_mark, send_deltas));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(sess->conn, pool,
+ svn_ra_svn_cmd_replay_range,
+ start_revision, end_revision,
+ low_water_mark, send_deltas));
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess, pool),
N_("Server doesn't support the "
@@ -2497,8 +2522,9 @@ ra_svn_get_deleted_rev(svn_ra_session_t
svn_ra_svn_conn_t *conn = sess_baton->conn;
/* Transmit the parameters. */
- SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "get-deleted-rev", "crr",
- path, peg_revision, end_revision));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(conn, pool,
+ svn_ra_svn_cmd_get_deleted_rev,
+ path, peg_revision, end_revision));
/* Servers before 1.6 don't support this command. Check for this here. */
SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess_baton, pool),
Modified: subversion/trunk/subversion/libsvn_ra_svn/editorp.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/editorp.c?rev=1390443&r1=1390442&r2=1390443&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_svn/editorp.c (original)
+++ subversion/trunk/subversion/libsvn_ra_svn/editorp.c Wed Sep 26 12:47:23 2012
@@ -127,7 +127,7 @@ static svn_error_t *check_for_error(ra_s
if (svn_ra_svn__input_waiting(eb->conn, pool))
{
eb->got_status = TRUE;
- SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "abort-edit", ""));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(eb->conn, pool, svn_ra_svn_cmd_abort_edit));
SVN_ERR(svn_ra_svn_read_cmd_response(eb->conn, pool, ""));
/* We shouldn't get here if the consumer is doing its job. */
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
@@ -142,7 +142,7 @@ static svn_error_t *ra_svn_target_rev(vo
ra_svn_edit_baton_t *eb = edit_baton;
SVN_ERR(check_for_error(eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "target-rev", "r", rev));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(eb->conn, pool, svn_ra_svn_cmd_target_rev, rev));
return SVN_NO_ERROR;
}
@@ -153,7 +153,7 @@ static svn_error_t *ra_svn_open_root(voi
const char *token = make_token('d', eb, pool);
SVN_ERR(check_for_error(eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "open-root", "(?r)c", rev,
+ SVN_ERR(svn_ra_svn_write_templated_cmd(eb->conn, pool, svn_ra_svn_cmd_open_root, rev,
token));
*root_baton = ra_svn_make_baton(eb->conn, pool, eb, token);
return SVN_NO_ERROR;
@@ -165,7 +165,7 @@ static svn_error_t *ra_svn_delete_entry(
ra_svn_baton_t *b = parent_baton;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "delete-entry", "c(?r)c",
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_delete_entry,
path, rev, b->token));
return SVN_NO_ERROR;
}
@@ -181,7 +181,7 @@ static svn_error_t *ra_svn_add_dir(const
SVN_ERR_ASSERT((copy_path && SVN_IS_VALID_REVNUM(copy_rev))
|| (!copy_path && !SVN_IS_VALID_REVNUM(copy_rev)));
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "add-dir", "ccc(?cr)", path,
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_add_dir, path,
b->token, token, copy_path, copy_rev));
*child_baton = ra_svn_make_baton(b->conn, pool, b->eb, token);
return SVN_NO_ERROR;
@@ -195,7 +195,7 @@ static svn_error_t *ra_svn_open_dir(cons
const char *token = make_token('d', b->eb, pool);
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "open-dir", "ccc(?r)",
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_open_dir,
path, b->token, token, rev));
*child_baton = ra_svn_make_baton(b->conn, pool, b->eb, token);
return SVN_NO_ERROR;
@@ -208,7 +208,7 @@ static svn_error_t *ra_svn_change_dir_pr
ra_svn_baton_t *b = dir_baton;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "change-dir-prop", "cc(?s)",
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_change_dir_prop,
b->token, name, value));
return SVN_NO_ERROR;
}
@@ -218,7 +218,7 @@ static svn_error_t *ra_svn_close_dir(voi
ra_svn_baton_t *b = dir_baton;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "close-dir", "c", b->token));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_close_dir, b->token));
return SVN_NO_ERROR;
}
@@ -233,7 +233,7 @@ static svn_error_t *ra_svn_absent_dir(co
return SVN_NO_ERROR;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "absent-dir", "cc", path,
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_absent_dir, path,
b->token));
return SVN_NO_ERROR;
}
@@ -251,7 +251,7 @@ static svn_error_t *ra_svn_add_file(cons
SVN_ERR_ASSERT((copy_path && SVN_IS_VALID_REVNUM(copy_rev))
|| (!copy_path && !SVN_IS_VALID_REVNUM(copy_rev)));
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "add-file", "ccc(?cr)", path,
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_add_file, path,
b->token, token, copy_path, copy_rev));
*file_baton = ra_svn_make_baton(b->conn, pool, b->eb, token);
return SVN_NO_ERROR;
@@ -267,7 +267,7 @@ static svn_error_t *ra_svn_open_file(con
const char *token = make_token('c', b->eb, pool);
SVN_ERR(check_for_error(b->eb, b->pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "open-file", "ccc(?r)",
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_open_file,
path, b->token, token, rev));
*file_baton = ra_svn_make_baton(b->conn, pool, b->eb, token);
return SVN_NO_ERROR;
@@ -282,7 +282,7 @@ static svn_error_t *ra_svn_svndiff_handl
SVN_ERR(check_for_error(b->eb, b->pool));
str.data = data;
str.len = *len;
- return svn_ra_svn_write_cmd(b->conn, b->pool, "textdelta-chunk", "cs",
+ return svn_ra_svn_write_templated_cmd(b->conn, b->pool, svn_ra_svn_cmd_textdelta_chunk,
b->token, &str);
}
@@ -291,7 +291,7 @@ static svn_error_t *ra_svn_svndiff_close
ra_svn_baton_t *b = baton;
SVN_ERR(check_for_error(b->eb, b->pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, b->pool, "textdelta-end", "c",
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, b->pool, svn_ra_svn_cmd_textdelta_end,
b->token));
return SVN_NO_ERROR;
}
@@ -307,7 +307,7 @@ static svn_error_t *ra_svn_apply_textdel
/* Tell the other side we're starting a text delta. */
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "apply-textdelta", "c(?c)",
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_apply_textdelta,
b->token, base_checksum));
/* Transform the window stream to an svndiff stream. Reuse the
@@ -337,7 +337,7 @@ static svn_error_t *ra_svn_change_file_p
ra_svn_baton_t *b = file_baton;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "change-file-prop", "cc(?s)",
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_change_file_prop,
b->token, name, value));
return SVN_NO_ERROR;
}
@@ -349,7 +349,7 @@ static svn_error_t *ra_svn_close_file(vo
ra_svn_baton_t *b = file_baton;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "close-file", "c(?c)",
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_close_file,
b->token, text_checksum));
return SVN_NO_ERROR;
}
@@ -365,7 +365,7 @@ static svn_error_t *ra_svn_absent_file(c
return SVN_NO_ERROR;
SVN_ERR(check_for_error(b->eb, pool));
- SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "absent-file", "cc", path,
+ SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_absent_file, path,
b->token));
return SVN_NO_ERROR;
}
@@ -377,11 +377,11 @@ static svn_error_t *ra_svn_close_edit(vo
SVN_ERR_ASSERT(!eb->got_status);
eb->got_status = TRUE;
- SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "close-edit", ""));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(eb->conn, pool, svn_ra_svn_cmd_close_edit));
err = svn_ra_svn_read_cmd_response(eb->conn, pool, "");
if (err)
{
- svn_error_clear(svn_ra_svn_write_cmd(eb->conn, pool, "abort-edit", ""));
+ svn_error_clear(svn_ra_svn_write_templated_cmd(eb->conn, pool, svn_ra_svn_cmd_abort_edit));
return err;
}
if (eb->callback)
@@ -395,7 +395,7 @@ static svn_error_t *ra_svn_abort_edit(vo
if (eb->got_status)
return SVN_NO_ERROR;
- SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "abort-edit", ""));
+ SVN_ERR(svn_ra_svn_write_templated_cmd(eb->conn, pool, svn_ra_svn_cmd_abort_edit));
SVN_ERR(svn_ra_svn_read_cmd_response(eb->conn, pool, ""));
return SVN_NO_ERROR;
}
Modified: subversion/trunk/subversion/libsvn_ra_svn/marshal.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/marshal.c?rev=1390443&r1=1390442&r2=1390443&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_svn/marshal.c (original)
+++ subversion/trunk/subversion/libsvn_ra_svn/marshal.c Wed Sep 26 12:47:23 2012
@@ -589,13 +589,557 @@ svn_error_t *svn_ra_svn_flush(svn_ra_svn
/* --- WRITING TUPLES --- */
+static svn_error_t *
+vwrite_tuple_cstring(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ const char *cstr = va_arg(ap, const char *);
+ SVN_ERR_ASSERT(cstr);
+ return svn_ra_svn_write_cstring(conn, pool, cstr);
+}
+
+static svn_error_t *
+vwrite_tuple_cstring_opt(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ const char *cstr = va_arg(ap, const char *);
+ return cstr ? svn_ra_svn_write_cstring(conn, pool, cstr) : SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_tuple_string(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ const svn_string_t *str = va_arg(ap, const svn_string_t *);
+ SVN_ERR_ASSERT(str);
+ return svn_ra_svn_write_string(conn, pool, str);
+}
+
+static svn_error_t *
+vwrite_tuple_string_opt(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ const svn_string_t *str = va_arg(ap, const svn_string_t *);
+ return str ? svn_ra_svn_write_string(conn, pool, str) : SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_tuple_start_list(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ return svn_ra_svn_start_list(conn, pool);
+}
+
+static svn_error_t *
+vwrite_tuple_end_list(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ return svn_ra_svn_end_list(conn, pool);
+}
+
+static svn_error_t *
+vwrite_tuple_word(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ const char *cstr = va_arg(ap, const char *);
+ SVN_ERR_ASSERT(cstr);
+ return svn_ra_svn_write_word(conn, pool, cstr);
+}
+
+static svn_error_t *
+vwrite_tuple_word_opt(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ const char *cstr = va_arg(ap, const char *);
+ return cstr ? svn_ra_svn_write_word(conn, pool, cstr) : SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_tuple_revision(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ svn_revnum_t rev = va_arg(ap, svn_revnum_t);
+ SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(rev));
+ return svn_ra_svn_write_number(conn, pool, rev);
+}
+
+static svn_error_t *
+vwrite_tuple_revision_opt(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ svn_revnum_t rev = va_arg(ap, svn_revnum_t);
+ return SVN_IS_VALID_REVNUM(rev)
+ ? svn_ra_svn_write_number(conn, pool, rev)
+ : SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_tuple_number(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ return svn_ra_svn_write_number(conn, pool, va_arg(ap, apr_uint64_t));
+}
+
+static svn_error_t *
+vwrite_tuple_boolean(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ const char *cstr = va_arg(ap, svn_boolean_t) ? "true" : "false";
+ return svn_ra_svn_write_word(conn, pool, cstr);
+}
+
+static svn_error_t *
+vwrite_cmd_open_root(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_delete_entry(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_add_dir(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_open_dir(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_change_dir_prop(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_string_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_absent_dir(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_add_file(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_open_file(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_change_file_prop(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_string_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_close_file(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_absent_file(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_textdelta_chunk(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_string(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_apply_textdelta(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_no_op(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_set_path(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_word(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_link_path(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_word(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_change_rev_prop2(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_string_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_string_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_change_rev_prop(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_string_opt(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_rev_prop(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_get_file(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_update(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_word(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_switch(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_word(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_status(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_word(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_diff(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_word(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_check_path(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_stat(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_get_file_revs(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_lock(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_unlock(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_cstring_opt(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_get_locks(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_word(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_replay(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_replay_range(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+vwrite_cmd_get_deleted_rev(svn_ra_svn_conn_t *conn, apr_pool_t *pool, va_list ap)
+{
+ SVN_ERR(vwrite_tuple_cstring(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+ SVN_ERR(vwrite_tuple_revision(conn, pool, ap));
+
+ return SVN_NO_ERROR;
+}
+
+
+typedef svn_error_t *
+(*vwrite_tuple_func)(svn_ra_svn_conn_t *, apr_pool_t *, va_list);
+
+typedef struct cmd_template_t
+{
+ const char *start_sequence;
+ apr_size_t start_sequence_length;
+ vwrite_tuple_func write_ops;
+} cmd_template_t;
+
+static const cmd_template_t cmd_templates[svn_ra_svn_cmd__last]
+ = { {"( target-rev ( " , 15, vwrite_tuple_revision },
+ {"( open-root ( " , 14, vwrite_cmd_open_root },
+ {"( delete-entry ( " , 17, vwrite_cmd_delete_entry },
+ {"( add-dir ( " , 12, vwrite_cmd_add_dir },
+ {"( open-dir ( " , 13, vwrite_cmd_open_dir },
+ {"( change-dir-prop ( " , 20, vwrite_cmd_change_dir_prop },
+ {"( close-dir ( " , 14, vwrite_tuple_cstring },
+ {"( absent-dir ( " , 15, vwrite_cmd_absent_dir },
+ {"( add-file ( " , 13, vwrite_cmd_add_file },
+ {"( open-file ( " , 14, vwrite_cmd_open_file },
+ {"( change-file-prop ( ", 21, vwrite_cmd_change_file_prop },
+ {"( close-file ( " , 15, vwrite_cmd_close_file },
+ {"( absent-file ( " , 16, vwrite_cmd_absent_file },
+ {"( textdelta-chunk ( " , 20, vwrite_cmd_textdelta_chunk },
+ {"( textdelta-end ( " , 18, vwrite_tuple_cstring },
+ {"( apply-textdelta ( " , 20, vwrite_cmd_apply_textdelta },
+ {"( close-edit ( " , 15, vwrite_cmd_no_op },
+ {"( abort-edit ( " , 15, vwrite_cmd_no_op },
+
+ {"( set-path ( " , 13, vwrite_cmd_set_path },
+ {"( delete-path ( " , 16, vwrite_tuple_cstring },
+ {"( link-path ( " , 14, vwrite_cmd_link_path },
+ {"( finish-report ( " , 18, vwrite_cmd_no_op },
+ {"( abort-report ( " , 17, vwrite_cmd_no_op },
+
+ {"( reparent ( " , 13, vwrite_tuple_cstring },
+ {"( get-latest-rev ( " , 19, vwrite_cmd_no_op },
+ {"( get-dated-rev ( " , 18, vwrite_tuple_cstring },
+ {"( change-rev-prop2 ( ", 21, vwrite_cmd_change_rev_prop2 },
+ {"( change-rev-prop ( " , 20, vwrite_cmd_change_rev_prop },
+ {"( rev-proplist ( " , 17, vwrite_tuple_revision },
+ {"( rev-prop ( " , 13, vwrite_cmd_rev_prop },
+ {"( get-file ( " , 13, vwrite_cmd_get_file },
+ {"( update ( " , 11, vwrite_cmd_update },
+ {"( switch ( " , 11, vwrite_cmd_switch },
+ {"( status ( " , 11, vwrite_cmd_status },
+ {"( diff ( " , 9, vwrite_cmd_diff },
+ {"( check-path ( " , 15, vwrite_cmd_check_path },
+ {"( stat ( " , 9, vwrite_cmd_stat },
+ {"( get-file-revs ( " , 18, vwrite_cmd_get_file_revs },
+ {"( lock ( " , 9, vwrite_cmd_lock },
+ {"( unlock ( " , 11, vwrite_cmd_unlock },
+ {"( get-lock ( " , 13, vwrite_tuple_cstring },
+ {"( get-locks ( " , 14, vwrite_cmd_get_locks },
+ {"( replay ( " , 11, vwrite_cmd_replay },
+ {"( replay-range ( " , 17, vwrite_cmd_replay_range },
+ {"( get-deleted-rev ( " , 20, vwrite_cmd_get_deleted_rev }
+ };
+
+
+
+
static svn_error_t *vwrite_tuple(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *fmt, va_list ap)
{
svn_boolean_t opt = FALSE;
- svn_revnum_t rev;
- const char *cstr;
- const svn_string_t *str;
if (*fmt == '!')
fmt++;
@@ -604,53 +1148,30 @@ static svn_error_t *vwrite_tuple(svn_ra_
for (; *fmt; fmt++)
{
if (*fmt == 'c')
- {
- cstr = va_arg(ap, const char *);
- if (cstr)
- SVN_ERR(svn_ra_svn_write_cstring(conn, pool, cstr));
- else
- SVN_ERR_ASSERT(opt);
- }
+ SVN_ERR(opt ? vwrite_tuple_cstring_opt(conn, pool, ap)
+ : vwrite_tuple_cstring(conn, pool, ap));
else if (*fmt == 's')
- {
- str = va_arg(ap, const svn_string_t *);
- if (str)
- SVN_ERR(svn_ra_svn_write_string(conn, pool, str));
- else
- SVN_ERR_ASSERT(opt);
- }
+ SVN_ERR(opt ? vwrite_tuple_string_opt(conn, pool, ap)
+ : vwrite_tuple_string(conn, pool, ap));
else if (*fmt == '(' && !opt)
- SVN_ERR(svn_ra_svn_start_list(conn, pool));
+ SVN_ERR(vwrite_tuple_start_list(conn, pool, ap));
else if (*fmt == ')')
{
- SVN_ERR(svn_ra_svn_end_list(conn, pool));
+ SVN_ERR(vwrite_tuple_end_list(conn, pool, ap));
opt = FALSE;
}
else if (*fmt == '?')
opt = TRUE;
else if (*fmt == 'w')
- {
- cstr = va_arg(ap, const char *);
- if (cstr)
- SVN_ERR(svn_ra_svn_write_word(conn, pool, cstr));
- else
- SVN_ERR_ASSERT(opt);
- }
+ SVN_ERR(opt ? vwrite_tuple_word_opt(conn, pool, ap)
+ : vwrite_tuple_word(conn, pool, ap));
else if (*fmt == 'r')
- {
- rev = va_arg(ap, svn_revnum_t);
- if (SVN_IS_VALID_REVNUM(rev))
- SVN_ERR(svn_ra_svn_write_number(conn, pool, rev));
- else
- SVN_ERR_ASSERT(opt);
- }
+ SVN_ERR(opt ? vwrite_tuple_revision_opt(conn, pool, ap)
+ : vwrite_tuple_revision(conn, pool, ap));
else if (*fmt == 'n' && !opt)
- SVN_ERR(svn_ra_svn_write_number(conn, pool, va_arg(ap, apr_uint64_t)));
+ SVN_ERR(vwrite_tuple_number(conn, pool, ap));
else if (*fmt == 'b' && !opt)
- {
- cstr = va_arg(ap, svn_boolean_t) ? "true" : "false";
- SVN_ERR(svn_ra_svn_write_word(conn, pool, cstr));
- }
+ SVN_ERR(vwrite_tuple_boolean(conn, pool, ap));
else if (*fmt == '!' && !*(fmt + 1))
return SVN_NO_ERROR;
else
@@ -1281,6 +1802,23 @@ svn_error_t *svn_ra_svn_write_cmd(svn_ra
return err ? svn_error_trace(err) : svn_ra_svn_end_list(conn, pool);
}
+svn_error_t *svn_ra_svn_write_templated_cmd(svn_ra_svn_conn_t *conn,
+ apr_pool_t *pool,
+ svn_ra_svn_cmd_t cmd, ...)
+{
+ va_list ap;
+ svn_error_t *err;
+
+ SVN_ERR(writebuf_write_short_string(conn, pool,
+ cmd_templates[cmd].start_sequence,
+ cmd_templates[cmd].start_sequence_length));
+ va_start(ap, cmd);
+ err = cmd_templates[cmd].write_ops(conn, pool, ap);
+ va_end(ap);
+
+ return err ? err : writebuf_write_short_string(conn, pool, ") ) ", 4);
+}
+
svn_error_t *svn_ra_svn_write_cmd_response(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
const char *fmt, ...)
Re: svn commit: r1390443 - in /subversion/trunk: ./
subversion/include/svn_ra_svn.h subversion/libsvn_ra_svn/client.c
subversion/libsvn_ra_svn/editorp.c subversion/libsvn_ra_svn/marshal.c
Posted by Stefan Fuhrmann <st...@wandisco.com>.
On Wed, Sep 26, 2012 at 3:40 PM, C. Michael Pilato <cm...@collab.net>wrote:
> On 09/26/2012 08:47 AM, stefan2@apache.org wrote:
> > Author: stefan2
> > Date: Wed Sep 26 12:47:23 2012
> > New Revision: 1390443
>
> [...]
>
> > Modified: subversion/trunk/subversion/libsvn_ra_svn/client.c
> > URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/client.c?rev=1390443&r1=1390442&r2=1390443&view=diff
> >
> ==============================================================================
> > --- subversion/trunk/subversion/libsvn_ra_svn/client.c (original)
> > +++ subversion/trunk/subversion/libsvn_ra_svn/client.c Wed Sep 26
> 12:47:23 2012
> > @@ -258,7 +258,7 @@ static svn_error_t *ra_svn_set_path(void
> > {
> > ra_svn_reporter_baton_t *b = baton;
> >
> > - SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "set-path", "crb(?c)w",
> > + SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool,
> svn_ra_svn_cmd_set_path,
> > path, rev, start_empty, lock_token,
> > svn_depth_to_word(depth)));
>
> Missed an indentation update here.
>
> > Modified: subversion/trunk/subversion/libsvn_ra_svn/editorp.c
> > URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/editorp.c?rev=1390443&r1=1390442&r2=1390443&view=diff
> >
> ==============================================================================
> > --- subversion/trunk/subversion/libsvn_ra_svn/editorp.c (original)
> > +++ subversion/trunk/subversion/libsvn_ra_svn/editorp.c Wed Sep 26
> 12:47:23 2012
> > @@ -127,7 +127,7 @@ static svn_error_t *check_for_error(ra_s
> > if (svn_ra_svn__input_waiting(eb->conn, pool))
> > {
> > eb->got_status = TRUE;
> > - SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "abort-edit", ""));
> > + SVN_ERR(svn_ra_svn_write_templated_cmd(eb->conn, pool,
> svn_ra_svn_cmd_abort_edit));
> > SVN_ERR(svn_ra_svn_read_cmd_response(eb->conn, pool, ""));
> > /* We shouldn't get here if the consumer is doing its job. */
> > return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
> > @@ -142,7 +142,7 @@ static svn_error_t *ra_svn_target_rev(vo
> > ra_svn_edit_baton_t *eb = edit_baton;
> >
> > SVN_ERR(check_for_error(eb, pool));
> > - SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "target-rev", "r", rev));
> > + SVN_ERR(svn_ra_svn_write_templated_cmd(eb->conn, pool,
> svn_ra_svn_cmd_target_rev, rev));
> > return SVN_NO_ERROR;
> > }
> >
> > @@ -153,7 +153,7 @@ static svn_error_t *ra_svn_open_root(voi
> > const char *token = make_token('d', eb, pool);
> >
> > SVN_ERR(check_for_error(eb, pool));
> > - SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "open-root", "(?r)c",
> rev,
> > + SVN_ERR(svn_ra_svn_write_templated_cmd(eb->conn, pool,
> svn_ra_svn_cmd_open_root, rev,
> > token));
>
> ...and here (and lots of places in this file, actually).
>
Fixed in r1390570. Thanks for the review!
-- Stefan^2.
--
*
Join us this October at Subversion Live
2012<http://www.wandisco.com/svn-live-2012>
for two days of best practice SVN training, networking, live demos,
committer meet and greet, and more! Space is limited, so get signed up
today<http://www.wandisco.com/svn-live-2012>
!
*
Re: svn commit: r1390443 - in /subversion/trunk: ./ subversion/include/svn_ra_svn.h
subversion/libsvn_ra_svn/client.c subversion/libsvn_ra_svn/editorp.c subversion/libsvn_ra_svn/marshal.c
Posted by "C. Michael Pilato" <cm...@collab.net>.
On 09/26/2012 08:47 AM, stefan2@apache.org wrote:
> Author: stefan2
> Date: Wed Sep 26 12:47:23 2012
> New Revision: 1390443
[...]
> Modified: subversion/trunk/subversion/libsvn_ra_svn/client.c
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/client.c?rev=1390443&r1=1390442&r2=1390443&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/libsvn_ra_svn/client.c (original)
> +++ subversion/trunk/subversion/libsvn_ra_svn/client.c Wed Sep 26 12:47:23 2012
> @@ -258,7 +258,7 @@ static svn_error_t *ra_svn_set_path(void
> {
> ra_svn_reporter_baton_t *b = baton;
>
> - SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "set-path", "crb(?c)w",
> + SVN_ERR(svn_ra_svn_write_templated_cmd(b->conn, pool, svn_ra_svn_cmd_set_path,
> path, rev, start_empty, lock_token,
> svn_depth_to_word(depth)));
Missed an indentation update here.
> Modified: subversion/trunk/subversion/libsvn_ra_svn/editorp.c
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/editorp.c?rev=1390443&r1=1390442&r2=1390443&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/libsvn_ra_svn/editorp.c (original)
> +++ subversion/trunk/subversion/libsvn_ra_svn/editorp.c Wed Sep 26 12:47:23 2012
> @@ -127,7 +127,7 @@ static svn_error_t *check_for_error(ra_s
> if (svn_ra_svn__input_waiting(eb->conn, pool))
> {
> eb->got_status = TRUE;
> - SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "abort-edit", ""));
> + SVN_ERR(svn_ra_svn_write_templated_cmd(eb->conn, pool, svn_ra_svn_cmd_abort_edit));
> SVN_ERR(svn_ra_svn_read_cmd_response(eb->conn, pool, ""));
> /* We shouldn't get here if the consumer is doing its job. */
> return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
> @@ -142,7 +142,7 @@ static svn_error_t *ra_svn_target_rev(vo
> ra_svn_edit_baton_t *eb = edit_baton;
>
> SVN_ERR(check_for_error(eb, pool));
> - SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "target-rev", "r", rev));
> + SVN_ERR(svn_ra_svn_write_templated_cmd(eb->conn, pool, svn_ra_svn_cmd_target_rev, rev));
> return SVN_NO_ERROR;
> }
>
> @@ -153,7 +153,7 @@ static svn_error_t *ra_svn_open_root(voi
> const char *token = make_token('d', eb, pool);
>
> SVN_ERR(check_for_error(eb, pool));
> - SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "open-root", "(?r)c", rev,
> + SVN_ERR(svn_ra_svn_write_templated_cmd(eb->conn, pool, svn_ra_svn_cmd_open_root, rev,
> token));
...and here (and lots of places in this file, actually).
--
C. Michael Pilato <cm...@collab.net>
CollabNet <> www.collab.net <> Enterprise Cloud Development