Author: hwright
Date: Fri Jan 27 22:55:07 2012
New Revision: 1236917
URL: http://svn.apache.org/viewvc?rev=1236917&view=rev
Log:
Ev2 shims: Add an implementation of the fetch base callback for svnrdump.
Current number of Ev2 test failures: 18
* subversion/svnrdump/dump_editor.c
(dump_edit_baton): Add ra_session member.
(fetch_basefunc): Implement.
(svn_rdump_get_dump_editor): Add ra_session param, and stash it in the edit
baton.
* subversion/svnrdump/svnrdump.c
(replay_revisions): Add extra param, and pass through to the editor request
function.
(dump_cmd): Open a second ra_session for use within the dump editor.
* subversion/svnrdump/svnrdump.h
(svn_rdump__get_dump_editor): Add param.
Modified:
subversion/trunk/subversion/svnrdump/dump_editor.c
subversion/trunk/subversion/svnrdump/svnrdump.c
subversion/trunk/subversion/svnrdump/svnrdump.h
Modified: subversion/trunk/subversion/svnrdump/dump_editor.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnrdump/dump_editor.c?rev=1236917&r1=1236916&r2=1236917&view=diff
==============================================================================
--- subversion/trunk/subversion/svnrdump/dump_editor.c (original)
+++ subversion/trunk/subversion/svnrdump/dump_editor.c Fri Jan 27 22:55:07 2012
@@ -81,6 +81,9 @@ struct dump_edit_baton {
/* The output stream we write the dumpfile to */
svn_stream_t *stream;
+ /* A backdoor ra session to fetch additional information during the edit. */
+ svn_ra_session_t *ra_session;
+
/* Pool for per-revision allocations */
apr_pool_t *pool;
@@ -854,7 +857,32 @@ fetch_base_func(const char **filename,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- *filename = NULL;
+ struct dump_edit_baton *eb = baton;
+ svn_stream_t *fstream;
+ svn_error_t *err;
+
+ if (path[0] == '/')
+ path += 1;
+
+ SVN_ERR(svn_stream_open_unique(&fstream, filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, scratch_pool));
+
+ err = svn_ra_get_file(eb->ra_session, path, base_revision,
+ fstream, NULL, NULL, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ SVN_ERR(svn_stream_close(fstream));
+
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ SVN_ERR(svn_stream_close(fstream));
+
return SVN_NO_ERROR;
}
@@ -862,6 +890,7 @@ svn_error_t *
svn_rdump__get_dump_editor(const svn_delta_editor_t **editor,
void **edit_baton,
svn_stream_t *stream,
+ svn_ra_session_t *ra_session,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *pool)
@@ -873,6 +902,7 @@ svn_rdump__get_dump_editor(const svn_del
eb = apr_pcalloc(pool, sizeof(struct dump_edit_baton));
eb->stream = stream;
+ eb->ra_session = ra_session;
/* Create a special per-revision pool */
eb->pool = svn_pool_create(pool);
Modified: subversion/trunk/subversion/svnrdump/svnrdump.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnrdump/svnrdump.c?rev=1236917&r1=1236916&r2=1236917&view=diff
==============================================================================
--- subversion/trunk/subversion/svnrdump/svnrdump.c (original)
+++ subversion/trunk/subversion/svnrdump/svnrdump.c Fri Jan 27 22:55:07 2012
@@ -343,6 +343,7 @@ dump_revision_header(svn_ra_session_t *s
*/
static svn_error_t *
replay_revisions(svn_ra_session_t *session,
+ svn_ra_session_t *extra_ra_session,
const char *url,
svn_revnum_t start_revision,
svn_revnum_t end_revision,
@@ -359,7 +360,8 @@ replay_revisions(svn_ra_session_t *sessi
SVN_ERR(svn_stream_for_stdout(&stdout_stream, pool));
SVN_ERR(svn_rdump__get_dump_editor(&dump_editor, &dump_baton, stdout_stream,
- check_cancel, NULL, pool));
+ extra_ra_session, check_cancel, NULL,
+ pool));
replay_baton = apr_pcalloc(pool, sizeof(*replay_baton));
replay_baton->editor = dump_editor;
@@ -531,7 +533,14 @@ dump_cmd(apr_getopt_t *os,
apr_pool_t *pool)
{
opt_baton_t *opt_baton = baton;
- return replay_revisions(opt_baton->session, opt_baton->url,
+ svn_ra_session_t *extra_ra_session;
+
+ SVN_ERR(svn_client_open_ra_session(&extra_ra_session,
+ opt_baton->url,
+ opt_baton->ctx, pool));
+
+ return replay_revisions(opt_baton->session, extra_ra_session,
+ opt_baton->url,
opt_baton->start_revision.value.number,
opt_baton->end_revision.value.number,
opt_baton->quiet, opt_baton->incremental, pool);
Modified: subversion/trunk/subversion/svnrdump/svnrdump.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnrdump/svnrdump.h?rev=1236917&r1=1236916&r2=1236917&view=diff
==============================================================================
--- subversion/trunk/subversion/svnrdump/svnrdump.h (original)
+++ subversion/trunk/subversion/svnrdump/svnrdump.h Fri Jan 27 22:55:07 2012
@@ -47,6 +47,7 @@ svn_error_t *
svn_rdump__get_dump_editor(const svn_delta_editor_t **editor,
void **edit_baton,
svn_stream_t *stream,
+ svn_ra_session_t *ra_session,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *pool);