[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: svn commit: r1296628 - /subversion/trunk/subversion/svnserve/serve.c

From: Daniel Shahaf <danielsh_at_elego.de>
Date: Sun, 4 Mar 2012 12:32:29 +0200

stefan2_at_apache.org wrote on Sat, Mar 03, 2012 at 14:27:51 -0000:
> Author: stefan2
> Date: Sat Mar 3 14:27:51 2012
> New Revision: 1296628
>
> URL: http://svn.apache.org/viewvc?rev=1296628&view=rev
> Log:
> Make svn ls faster and more streamy on svn://
>
> * subversion/svnserve/serve.c
> (get_dir): don't collect entries but send them immediately
>
> Modified:
> subversion/trunk/subversion/svnserve/serve.c
>
> Modified: subversion/trunk/subversion/svnserve/serve.c
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnserve/serve.c?rev=1296628&r1=1296627&r2=1296628&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/svnserve/serve.c (original)
> +++ subversion/trunk/subversion/svnserve/serve.c Sat Mar 3 14:27:51 2012
> @@ -1470,7 +1470,7 @@ static svn_error_t *get_dir(svn_ra_svn_c
> apr_array_header_t *params, void *baton)
> {
> server_baton_t *b = baton;
> - const char *path, *full_path, *file_path, *cauthor, *cdate;
> + const char *path, *full_path, *file_path, *cdate;
> svn_revnum_t rev;
> apr_hash_t *entries, *props = NULL, *file_props;
> apr_hash_index_t *hi;
> @@ -1540,9 +1540,15 @@ static svn_error_t *get_dir(svn_ra_svn_c
> if (want_props)
> SVN_CMD_ERR(get_props(&props, root, full_path, pool));
>
> - /* Fetch the directory entries if requested. */
> + /* Begin response ... */
> + SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(r(!", "success", rev));
> + SVN_ERR(svn_ra_svn_write_proplist(conn, pool, props));
> + SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)(!"));
> +
> + /* Fetch the directory entries if requested and send them immediately. */
> if (want_contents)
> {
> + const char *zero_date = svn_time_to_cstring(0, pool);
> SVN_CMD_ERR(svn_fs_dir_entries(&entries, root, full_path, pool));
>
> /* Transform the hash table's FS entries into dirents. This probably
> @@ -1552,91 +1558,62 @@ static svn_error_t *get_dir(svn_ra_svn_c
> {
> const char *name = svn__apr_hash_index_key(hi);
> svn_fs_dirent_t *fsent = svn__apr_hash_index_val(hi);
> - svn_dirent_t *entry;
> +
> + svn_dirent_t entry;
> + memset(&entry, 0, sizeof(entry));

The old code allocated the struct on the heap, and you do so on the
stack. But the struct has a _dup() function.

Could the size of the struct change in future versions? If so,
shouldn't we add a constructor function for it (and use it here)?
Received on 2012-03-04 11:33:18 CET

This is an archived mail posted to the Subversion Dev mailing list.