On Tue, Jan 17, 2012 at 11:10 PM, Daniel Shahaf <danie...@elego.de> wrote: > hwri...@apache.org wrote on Tue, Jan 17, 2012 at 23:04:32 -0000: >> Author: hwright >> Date: Tue Jan 17 23:04:32 2012 >> New Revision: 1232634 >> >> URL: http://svn.apache.org/viewvc?rev=1232634&view=rev >> Log: >> On the ev2-export branch: >> Replace one hack with another, which allows us to remove the vestigal delta >> editor from the export functionality. >> >> * subversion/libsvn_client/export.c >> (dir_baton, file_baton, change_file_prop, close_file): Remove. >> (svn_client_export5): Instead of manually driving the delta editor, >> manually drive an Ev2 editor. This has the happy consequence of only >> requiring one function call, instead of three. >> >> Modified: >> subversion/branches/ev2-export/subversion/libsvn_client/export.c >> >> Modified: subversion/branches/ev2-export/subversion/libsvn_client/export.c >> URL: >> http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_client/export.c?rev=1232634&r1=1232633&r2=1232634&view=diff >> ============================================================================== >> +++ subversion/branches/ev2-export/subversion/libsvn_client/export.c Tue Jan >> 17 23:04:32 2012 >> @@ -671,166 +671,6 @@ struct edit_baton >> }; >> >> >> static svn_error_t * >> fetch_props_func(apr_hash_t **props, >> void *baton, >> @@ -1138,8 +978,8 @@ svn_client_export5(svn_revnum_t *result_ >> if (kind == svn_node_file) >> { >> apr_hash_t *props; >> + svn_stream_t *tmp_stream; >> + const char *tmppath; >> svn_node_kind_t to_kind; >> >> if (svn_path_is_empty(to_path)) >> @@ -1171,41 +1011,21 @@ svn_client_export5(svn_revnum_t *result_ >> "overwrite directory with >> non-directory"), >> svn_dirent_local_style(to_path, pool)); >> >> + SVN_ERR(svn_stream_open_unique(&tmp_stream, &tmppath, >> + svn_dirent_dirname(eb->root_path, >> pool), >> + svn_io_file_del_on_pool_cleanup, >> + pool, pool)); >> >> SVN_ERR(svn_ra_get_file(ra_session, "", revnum, >> + tmp_stream, NULL, &props, pool)); >> + SVN_ERR(svn_stream_close(tmp_stream)); >> >> + SVN_ERR(svn_stream_open_readonly(&tmp_stream, tmppath, pool, >> pool)); >> > > Same question as before. Why the tempfile? Can you avoid it? > (Perhaps that requires an svn_stream_copy() call?)
The tempfile here is due to the way the svn_ra_get_file() interface works. Note that instead of returning a stream, that API accepts and already open stream and then pushes content to it. In contrast, the Ev2 add_file handler, as well as svn_stream_copy3(), pulls content from the source stream. Given this mismatch, a temporary storage location is needed. It may be possible to utilize the new spillbuffer code to build a stream which can act as a buffer when needed and only spill to disk when the file grows beyond a certain threshold, though I've not explored it. -Hyrum -- uberSVN: Apache Subversion Made Easy http://www.uberSVN.com/