Re: svn commit: r9485 - in trunk/subversion: libsvn_delta libsvn_fs tests/libsvn_delta

Branko Čibej <[email protected]> Wed, 28 Apr 2004 08:56:26 +0100
Newsgroups gmane.comp.version-control.subversion.svn,gmane.mail.eyebrowse.devel
Message-ID <[email protected]>
[email protected] wrote:

>Author: ghudson
>Date: Sat Apr 24 19:28:41 2004
>New Revision: 9485
>
>Modified:
>   trunk/subversion/libsvn_delta/compose_delta.c
>   trunk/subversion/libsvn_delta/delta.h
>   trunk/subversion/libsvn_fs/reps-strings.c
>   trunk/subversion/tests/libsvn_delta/random-test.c
>Log:
>Simplify the delta combiner interface.
>
>
>Modified: trunk/subversion/libsvn_fs/reps-strings.c
>==============================================================================
>--- trunk/subversion/libsvn_fs/reps-strings.c	(original)
>+++ trunk/subversion/libsvn_fs/reps-strings.c	Sat Apr 24 19:28:41 2004
>@@ -183,30 +183,12 @@
>       /* Combine the incoming window with whatever's in the baton. */
>       apr_pool_t *composite_pool = svn_pool_create (cb->trail->pool);
>       svn_txdelta_window_t *composite;
>-      svn_txdelta__compose_ctx_t context = { 0 };
> 
>-      composite = svn_txdelta__compose_windows
>-        (window, cb->window, &context, composite_pool);
>-
>-      if (composite)
>-        {
>-          svn_pool_destroy (cb->window_pool);
>-          cb->window = composite;
>-          cb->window_pool = composite_pool;
>-        }
>-      else if (context.use_second)
>-        {
>-          svn_pool_destroy (composite_pool);
>-          cb->window->sview_offset = context.sview_offset;
>-          cb->window->sview_len = context.sview_len;
>-
>-          /* This can only happen if the window doesn't touch
>-             source data; so ... */
>-          cb->done = TRUE;
>-        }
>-      else
>-        /* Can't happen, because cb->window can't be NULL. */
>-        abort ();
>+      composite = svn_txdelta__compose_windows (window, cb->window,
>+                                                composite_pool);
>+      svn_pool_destroy (cb->window_pool);
>+      cb->window = composite;
>+      cb->window_pool = composite_pool;
>     }
>   else if (window)
>     {
>  
>
A consequence of removing the baton and checks from compose_window is 
that now compose_handler only checks B->src_ops when it sets up the 
initial baton, but those are never checked later. Which means that if a 
windoe in the middle of the delta uses no source ops, we'll still do the 
combination. Given your cnahges in this commit, I think 
svn_txdelta__compose_windows should check B->src_ops. I'd also change 
the allocation guarantee slightly, so that compose_windows can return B 
without having to copy it to the pool (the compose_handler 
implementation already assumes so, but that't not documented).

-- Brane