Hyrum K Wright <hy...@hyrumwright.org> writes:

> I've been looking at which bugs can be closed by the pending
> completion of wc-ng.  In particular, I've been looking at issue #1284:
> http://subversion.tigris.org/issues/show_bug.cgi?id=1284
>
> The issue is essentially a complaint about the performance of 'svn mv
> somedir targetdir' when the number of files in somedir is very large,
> in the thousands.  It's a performance bug with no real good feeling
> for done, but given the performance improvements of wc-ng, I'm marking
> it as so.

I believe there is a relatively small change that could make it better
still.  Look at libsvn_client/copy.c:do_wc_to_wc_moves_with_locks2

  SVN_ERR(svn_wc_copy3(b->ctx->wc_ctx, b->pair->src_abspath_or_url,
                       dst_abspath, FALSE /* metadata_only */,
                       b->ctx->cancel_func, b->ctx->cancel_baton,
                       b->ctx->notify_func2, b->ctx->notify_baton2,
                       scratch_pool));

  SVN_ERR(svn_wc_delete4(b->ctx->wc_ctx, b->pair->src_abspath_or_url,
                         FALSE, FALSE,
                         b->ctx->cancel_func, b->ctx->cancel_baton,
                         b->ctx->notify_func2, b->ctx->notify_baton2,
                         scratch_pool));

Have svn_wc_copy3 set metadata_only to TRUE, this will be faster.  Then
do svn_io_rename to move the working tree, it's a single rename so it
should be fast.  The svn_wc_delete4 call should still operate if the
working tree is missing and could be marginally faster.

Overall this should be significantly faster as it doesn't have to copy
all the working files.  It has the additional benefit that it preserves
timestamps in the working tree.  The only reason I haven't implemented
it yet is that I haven't decided whether we should use a workqueue.

-- 
Philip

Reply via email to