Marcus Comstedt <marcus@mc.pp.se> writes:
> Ben Collins-Sussman <sussman@collab.net> writes:
> 
> > Vladmir,
> > 
> > You're asking the server to compare two trees, namely '/' and '/'.  Do
> > you have any idea how *big* those trees are?  We have the /trunk tree,
> > and at least 4 copies of it in /branches, and 2 more copies of it in
> > /tags.  And each source tree is itself pretty large, over 800 files
> > and directories to compare.
> 
> Um, that sounds wrong.  Why would it start comparing files in
> /branches and /tags?  Shouldn't they have the same node id in both
> revisions, thus eliminating the need for further comparison?  The same
> for any subdirectory in trunk which doesn't contain modified files.
Hm, yeah, you're right.  As soon as svn_repos_dir_delta() sees that
the nodes are identical, it won't recurse.  I take back my stupid
analysis.  :-)
I think I have a better explanation of the problem now:  it's that
stupid <resource-walk> tree being appended to the normal update
response.  Generating that <resource-walk> tree means returning the
vsn-rsc-url for *every* item in the tree!  *That's* probably why the
server is taking anywhere from 20 seconds to a minute to chug.
The underlying problem:  'svn diff -rX:Y' and 'svn merge -rX:Y' are
calling RA->do_switch() under the hood, which is a variant of
RA->do_update().  Because it's a switch, the <resource-walk> is being
sent.  The design problem here is that only 'svn switch' actually
wants the resource walk.  'svn diff' and 'svn merge' don't care one
whit.
We need a way to prevent that resource walk from happening for two of
the three callers to RA->do_switch().
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Wed Jul 24 18:04:34 2002