As an experiment, I tweaked the ra_dav code to request only the 5
properties it needs to fill an svn_dirent_t, rather than requesting
*all* properties.
The time it took to do an 'svn ls -R' against subversion own trunk
URL went from about 30 seconds to 15 seconds.
We're still not out of the woods entirely, though. svn_dirent_t has
an annoying "has_props" boolean field that needs to be filled in.
The current code loops through all the returned properties, and looks
to see if any user-defined properties exist in the list. In order to
complete the patch, we'll have to invent some new server-generated
prop that indicates "this resource contains user-defined properties",
and add it to our list of requested props. It also means that this
speedup will only work against 1.3 mod_dav_svn servers; when talking
to older servers, we'll have to still fetch *all* properties just to
find out if user-defined props exist. :-(
I guess another option is to play with deprecating the 'has_props'
field. Maybe create an svn_ra_get_dir2() which doesn't fill in the
has_props field by default, unless you explicitly ask it to. (Does
any client actually use the 'has_props' field?)
Here's the patch I was playing with. (You can play with it, but not
that it's not complete or totally correct! svn_dirent_t->has_props
is always 0.)
Index: subversion/libsvn_ra_dav/fetch.c
===================================================================
--- subversion/libsvn_ra_dav/fetch.c (revision 15883)
+++ subversion/libsvn_ra_dav/fetch.c (working copy)
@@ -915,6 +915,20 @@
}
+
+/* the properties we need to fill in an svn_dirent_t, used by
+ svn_ra_get_dir(). */
+static const ne_propname dirent_props[] =
+{
+ { "DAV:", "resourcetype" }, /* kind */
+ { "DAV:", "getcontentlength" }, /* size */
+ { "DAV:", "version-name" }, /* created_rev */
+ { "DAV:", "creationdate" }, /* time */
+ { "DAV:", "creator-displayname" }, /* last_author */
+ { NULL }
+};
+
+
svn_error_t *svn_ra_dav__get_dir(svn_ra_session_t *session,
const char *path,
svn_revnum_t revision,
@@ -961,7 +975,7 @@
PROPFIND on the directory of depth 1. */
SVN_ERR( svn_ra_dav__get_props(&resources, ras->sess,
final_url, NE_DEPTH_ONE,
- NULL, NULL /* all props */,
pool) );
+ NULL, dirent_props, pool) );
/* Count the number of path components in final_url. */
final_url_n_components = svn_path_component_count(final_url);
--
www.collab.net <> CollabNet | Distributed Development On Demand
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Mon Aug 22 19:46:31 2005