Author: rinrab
Date: Sun Oct 20 16:11:54 2024
New Revision: 1921441

URL: http://svn.apache.org/viewvc?rev=1921441&view=rev
Log:
Factor-out diff tree processor tee implementation from diff_tree.c to
a new file, diff_tree_tee.c.

* subversion/libsvn_diff/diff_tree.c
  (
    tee_dir_opened
    tee_dir_added
    tee_dir_deleted
    tee_dir_changed
    tee_dir_closed
    tee_file_opened
    tee_file_added
    tee_file_deleted
    tee_file_changed
    tee_file_closed
    tee_node_absent
    svn_diff__tree_processor_tee_create
   ): Removed, since they were moved to a new file.
* subversion/libsvn_diff/diff_tree_tee.c: Copied from diff_tree.c, keeping
  only the moved functions.

Added:
    subversion/trunk/subversion/libsvn_diff/diff_tree_tee.c
      - copied, changed from r1921434, 
subversion/trunk/subversion/libsvn_diff/diff_tree.c
Modified:
    subversion/trunk/subversion/libsvn_diff/diff_tree.c

Modified: subversion/trunk/subversion/libsvn_diff/diff_tree.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_diff/diff_tree.c?rev=1921441&r1=1921440&r2=1921441&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_diff/diff_tree.c (original)
+++ subversion/trunk/subversion/libsvn_diff/diff_tree.c Sun Oct 20 16:11:54 2024
@@ -1227,426 +1227,6 @@ svn_diff__tree_processor_copy_as_changed
   return filter;
 }
 
-
-/* Processor baton for the tee tree processor */
-struct tee_baton_t
-{
-  const svn_diff_tree_processor_t *p1;
-  const svn_diff_tree_processor_t *p2;
-};
-
-/* Wrapper baton for file and directory batons in the tee processor */
-struct tee_node_baton_t
-{
-  void *baton1;
-  void *baton2;
-};
-
-static svn_error_t *
-tee_dir_opened(void **new_dir_baton,
-               svn_boolean_t *skip,
-               svn_boolean_t *skip_children,
-               const char *relpath,
-               const svn_diff_source_t *left_source,
-               const svn_diff_source_t *right_source,
-               const svn_diff_source_t *copyfrom_source,
-               void *parent_dir_baton,
-               const svn_diff_tree_processor_t *processor,
-               apr_pool_t *result_pool,
-               apr_pool_t *scratch_pool)
-{
-  struct tee_baton_t *tb = processor->baton;
-  struct tee_node_baton_t *pb = parent_dir_baton;
-  struct tee_node_baton_t *nb = apr_pcalloc(result_pool, sizeof(*nb));
-
-  SVN_ERR(tb->p1->dir_opened(&(nb->baton1),
-                             skip,
-                             skip_children,
-                             relpath,
-                             left_source,
-                             right_source,
-                             copyfrom_source,
-                             pb ? pb->baton1 : NULL,
-                             tb->p1,
-                             result_pool,
-                             scratch_pool));
-
-  SVN_ERR(tb->p2->dir_opened(&(nb->baton2),
-                             skip,
-                             skip_children,
-                             relpath,
-                             left_source,
-                             right_source,
-                             copyfrom_source,
-                             pb ? pb->baton2 : NULL,
-                             tb->p2,
-                             result_pool,
-                             scratch_pool));
-
-  *new_dir_baton = nb;
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-tee_dir_added(const char *relpath,
-              const svn_diff_source_t *copyfrom_source,
-              const svn_diff_source_t *right_source,
-              /*const*/ apr_hash_t *copyfrom_props,
-              /*const*/ apr_hash_t *right_props,
-              void *dir_baton,
-              const svn_diff_tree_processor_t *processor,
-              apr_pool_t *scratch_pool)
-{
-  struct tee_baton_t *tb = processor->baton;
-  struct tee_node_baton_t *db = dir_baton;
-
-  SVN_ERR(tb->p1->dir_added(relpath,
-                            copyfrom_source,
-                            right_source,
-                            copyfrom_props,
-                            right_props,
-                            db->baton1,
-                            tb->p1,
-                            scratch_pool));
-
-  SVN_ERR(tb->p2->dir_added(relpath,
-                            copyfrom_source,
-                            right_source,
-                            copyfrom_props,
-                            right_props,
-                            db->baton2,
-                            tb->p2,
-                            scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-tee_dir_deleted(const char *relpath,
-                const svn_diff_source_t *left_source,
-                /*const*/ apr_hash_t *left_props,
-                void *dir_baton,
-                const svn_diff_tree_processor_t *processor,
-                apr_pool_t *scratch_pool)
-{
-  struct tee_baton_t *tb = processor->baton;
-  struct tee_node_baton_t *db = dir_baton;
-
-  SVN_ERR(tb->p1->dir_deleted(relpath,
-                              left_source,
-                              left_props,
-                              db->baton1,
-                              tb->p1,
-                              scratch_pool));
-
-  SVN_ERR(tb->p2->dir_deleted(relpath,
-                              left_source,
-                              left_props,
-                              db->baton2,
-                              tb->p2,
-                              scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-tee_dir_changed(const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    const svn_diff_source_t *right_source,
-                    /*const*/ apr_hash_t *left_props,
-                    /*const*/ apr_hash_t *right_props,
-                    const apr_array_header_t *prop_changes,
-                    void *dir_baton,
-                    const struct svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  struct tee_baton_t *tb = processor->baton;
-  struct tee_node_baton_t *db = dir_baton;
-
-  SVN_ERR(tb->p1->dir_changed(relpath,
-                              left_source,
-                              right_source,
-                              left_props,
-                              right_props,
-                              prop_changes,
-                              db->baton1,
-                              tb->p1,
-                              scratch_pool));
-
-  SVN_ERR(tb->p2->dir_changed(relpath,
-                              left_source,
-                              right_source,
-                              left_props,
-                              right_props,
-                              prop_changes,
-                              db->baton2,
-                              tb->p2,
-                              scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-tee_dir_closed(const char *relpath,
-               const svn_diff_source_t *left_source,
-               const svn_diff_source_t *right_source,
-               void *dir_baton,
-               const svn_diff_tree_processor_t *processor,
-               apr_pool_t *scratch_pool)
-{
-  struct tee_baton_t *tb = processor->baton;
-  struct tee_node_baton_t *db = dir_baton;
-
-  SVN_ERR(tb->p1->dir_closed(relpath,
-                             left_source,
-                             right_source,
-                             db->baton1,
-                             tb->p1,
-                             scratch_pool));
-
-  SVN_ERR(tb->p2->dir_closed(relpath,
-                             left_source,
-                             right_source,
-                             db->baton2,
-                             tb->p2,
-                             scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-tee_file_opened(void **new_file_baton,
-                svn_boolean_t *skip,
-                const char *relpath,
-                const svn_diff_source_t *left_source,
-                const svn_diff_source_t *right_source,
-                const svn_diff_source_t *copyfrom_source,
-                void *dir_baton,
-                const svn_diff_tree_processor_t *processor,
-                apr_pool_t *result_pool,
-                apr_pool_t *scratch_pool)
-{
-  struct tee_baton_t *tb = processor->baton;
-  struct tee_node_baton_t *pb = dir_baton;
-  struct tee_node_baton_t *nb = apr_pcalloc(result_pool, sizeof(*nb));
-
-  SVN_ERR(tb->p1->file_opened(&(nb->baton1),
-                              skip,
-                              relpath,
-                              left_source,
-                              right_source,
-                              copyfrom_source,
-                              pb ? pb->baton1 : NULL,
-                              tb->p1,
-                              result_pool,
-                              scratch_pool));
-
-  SVN_ERR(tb->p2->file_opened(&(nb->baton2),
-                              skip,
-                              relpath,
-                              left_source,
-                              right_source,
-                              copyfrom_source,
-                              pb ? pb->baton2 : NULL,
-                              tb->p2,
-                              result_pool,
-                              scratch_pool));
-
-  *new_file_baton = nb;
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-tee_file_added(const char *relpath,
-               const svn_diff_source_t *copyfrom_source,
-               const svn_diff_source_t *right_source,
-               const char *copyfrom_file,
-               const char *right_file,
-               /*const*/ apr_hash_t *copyfrom_props,
-               /*const*/ apr_hash_t *right_props,
-               void *file_baton,
-               const svn_diff_tree_processor_t *processor,
-               apr_pool_t *scratch_pool)
-{
-  struct tee_baton_t *tb = processor->baton;
-  struct tee_node_baton_t *fb = file_baton;
-
-  SVN_ERR(tb->p1->file_added(relpath,
-                             copyfrom_source,
-                             right_source,
-                             copyfrom_file,
-                             right_file,
-                             copyfrom_props,
-                             right_props,
-                             fb->baton1,
-                             tb->p1,
-                             scratch_pool));
-
-  SVN_ERR(tb->p2->file_added(relpath,
-                             copyfrom_source,
-                             right_source,
-                             copyfrom_file,
-                             right_file,
-                             copyfrom_props,
-                             right_props,
-                             fb->baton2,
-                             tb->p2,
-                             scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-tee_file_deleted(const char *relpath,
-                 const svn_diff_source_t *left_source,
-                 const char *left_file,
-                 /*const*/ apr_hash_t *left_props,
-                 void *file_baton,
-                 const svn_diff_tree_processor_t *processor,
-                 apr_pool_t *scratch_pool)
-{
-  struct tee_baton_t *tb = processor->baton;
-  struct tee_node_baton_t *fb = file_baton;
-
-  SVN_ERR(tb->p1->file_deleted(relpath,
-                               left_source,
-                               left_file,
-                               left_props,
-                               fb->baton1,
-                               tb->p1,
-                               scratch_pool));
-
-  SVN_ERR(tb->p2->file_deleted(relpath,
-                               left_source,
-                               left_file,
-                               left_props,
-                               fb->baton2,
-                               tb->p2,
-                               scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-tee_file_changed(const char *relpath,
-                 const svn_diff_source_t *left_source,
-                 const svn_diff_source_t *right_source,
-                 const char *left_file,
-                 const char *right_file,
-                 /*const*/ apr_hash_t *left_props,
-                 /*const*/ apr_hash_t *right_props,
-                 svn_boolean_t file_modified,
-                 const apr_array_header_t *prop_changes,
-                 void *file_baton,
-                 const svn_diff_tree_processor_t *processor,
-                 apr_pool_t *scratch_pool)
-{
-  struct tee_baton_t *tb = processor->baton;
-  struct tee_node_baton_t *fb = file_baton;
-
-  SVN_ERR(tb->p1->file_changed(relpath,
-                               left_source,
-                               right_source,
-                               left_file,
-                               right_file,
-                               left_props,
-                               right_props,
-                               file_modified,
-                               prop_changes,
-                               fb->baton1,
-                               tb->p1,
-                               scratch_pool));
-
-  SVN_ERR(tb->p2->file_changed(relpath,
-                               left_source,
-                               right_source,
-                               left_file,
-                               right_file,
-                               left_props,
-                               right_props,
-                               file_modified,
-                               prop_changes,
-                               fb->baton2,
-                               tb->p2,
-                               scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-tee_file_closed(const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    const svn_diff_source_t *right_source,
-                    void *file_baton,
-                    const svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  struct tee_baton_t *tb = processor->baton;
-  struct tee_node_baton_t *fb = file_baton;
-
-  SVN_ERR(tb->p1->file_closed(relpath,
-                              left_source,
-                              right_source,
-                              fb->baton1,
-                              tb->p1,
-                              scratch_pool));
-
-  SVN_ERR(tb->p2->file_closed(relpath,
-                              left_source,
-                              right_source,
-                              fb->baton2,
-                              tb->p2,
-                              scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-tee_node_absent(const char *relpath,
-                void *dir_baton,
-                const svn_diff_tree_processor_t *processor,
-                apr_pool_t *scratch_pool)
-{
-  struct tee_baton_t *tb = processor->baton;
-  struct tee_node_baton_t *db = dir_baton;
-
-  SVN_ERR(tb->p1->node_absent(relpath,
-                              db ? db->baton1 : NULL,
-                              tb->p1,
-                              scratch_pool));
-
-  SVN_ERR(tb->p2->node_absent(relpath,
-                              db ? db->baton2 : NULL,
-                              tb->p2,
-                              scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-const svn_diff_tree_processor_t *
-svn_diff__tree_processor_tee_create(const svn_diff_tree_processor_t 
*processor1,
-                                    const svn_diff_tree_processor_t 
*processor2,
-                                    apr_pool_t *result_pool)
-{
-  struct tee_baton_t *tb = apr_pcalloc(result_pool, sizeof(*tb));
-  svn_diff_tree_processor_t *tee;
-  tb->p1 = processor1;
-  tb->p2 = processor2;
-
-  tee = svn_diff__tree_processor_create(tb, result_pool);
-
-  tee->dir_opened    = tee_dir_opened;
-  tee->dir_added     = tee_dir_added;
-  tee->dir_deleted   = tee_dir_deleted;
-  tee->dir_changed   = tee_dir_changed;
-  tee->dir_closed    = tee_dir_closed;
-  tee->file_opened   = tee_file_opened;
-  tee->file_added    = tee_file_added;
-  tee->file_deleted  = tee_file_deleted;
-  tee->file_changed  = tee_file_changed;
-  tee->file_closed   = tee_file_closed;
-  tee->node_absent   = tee_node_absent;
-
-  return tee;
-}
-
 svn_diff_source_t *
 svn_diff__source_create(svn_revnum_t revision,
                         apr_pool_t *result_pool)

Copied: subversion/trunk/subversion/libsvn_diff/diff_tree_tee.c (from r1921434, 
subversion/trunk/subversion/libsvn_diff/diff_tree.c)
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_diff/diff_tree_tee.c?p2=subversion/trunk/subversion/libsvn_diff/diff_tree_tee.c&p1=subversion/trunk/subversion/libsvn_diff/diff_tree.c&r1=1921434&r2=1921441&rev=1921441&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_diff/diff_tree.c (original)
+++ subversion/trunk/subversion/libsvn_diff/diff_tree_tee.c Sun Oct 20 16:11:54 
2024
@@ -22,1211 +22,11 @@
  */
 
 #include <apr.h>
-#include <apr_pools.h>
-#include <apr_general.h>
 
-#include <assert.h>
-
-#include "svn_dirent_uri.h"
 #include "svn_error.h"
-#include "svn_io.h"
-#include "svn_pools.h"
-#include "svn_props.h"
 #include "svn_types.h"
 
 #include "private/svn_diff_tree.h"
-#include "svn_private_config.h"
-
-static svn_error_t *
-default_dir_opened(void **new_dir_baton,
-                   svn_boolean_t *skip,
-                   svn_boolean_t *skip_children,
-                   const char *relpath,
-                   const svn_diff_source_t *left_source,
-                   const svn_diff_source_t *right_source,
-                   const svn_diff_source_t *copyfrom_source,
-                   void *parent_dir_baton,
-                   const svn_diff_tree_processor_t *processor,
-                   apr_pool_t *result_pool,
-                   apr_pool_t *scratch_pool)
-{
-  *new_dir_baton = NULL;
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-default_dir_added(const char *relpath,
-                  const svn_diff_source_t *copyfrom_source,
-                  const svn_diff_source_t *right_source,
-                  /*const*/ apr_hash_t *copyfrom_props,
-                  /*const*/ apr_hash_t *right_props,
-                  void *dir_baton,
-                  const svn_diff_tree_processor_t *processor,
-                  apr_pool_t *scratch_pool)
-{
-  SVN_ERR(processor->dir_closed(relpath, NULL, right_source,
-                                dir_baton, processor,
-                                scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-default_dir_deleted(const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    /*const*/ apr_hash_t *left_props,
-                    void *dir_baton,
-                    const svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  SVN_ERR(processor->dir_closed(relpath, left_source, NULL,
-                                dir_baton, processor,
-                                scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-default_dir_changed(const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    const svn_diff_source_t *right_source,
-                    /*const*/ apr_hash_t *left_props,
-                    /*const*/ apr_hash_t *right_props,
-                    const apr_array_header_t *prop_changes,
-                    void *dir_baton,
-                    const struct svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  SVN_ERR(processor->dir_closed(relpath,
-                                left_source, right_source,
-                                dir_baton,
-                                processor, scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-default_dir_closed(const char *relpath,
-                   const svn_diff_source_t *left_source,
-                   const svn_diff_source_t *right_source,
-                   void *dir_baton,
-                   const svn_diff_tree_processor_t *processor,
-                   apr_pool_t *scratch_pool)
-{
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-default_file_opened(void **new_file_baton,
-                    svn_boolean_t *skip,
-                    const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    const svn_diff_source_t *right_source,
-                    const svn_diff_source_t *copyfrom_source,
-                    void *dir_baton,
-                    const svn_diff_tree_processor_t *processor,
-                    apr_pool_t *result_pool,
-                    apr_pool_t *scratch_pool)
-{
-  *new_file_baton = dir_baton;
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-default_file_added(const char *relpath,
-                   const svn_diff_source_t *copyfrom_source,
-                   const svn_diff_source_t *right_source,
-                   const char *copyfrom_file,
-                   const char *right_file,
-                   /*const*/ apr_hash_t *copyfrom_props,
-                   /*const*/ apr_hash_t *right_props,
-                   void *file_baton,
-                   const svn_diff_tree_processor_t *processor,
-                   apr_pool_t *scratch_pool)
-{
-  SVN_ERR(processor->file_closed(relpath,
-                                 NULL, right_source,
-                                 file_baton, processor, scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-default_file_deleted(const char *relpath,
-                     const svn_diff_source_t *left_source,
-                     const char *left_file,
-                     /*const*/ apr_hash_t *left_props,
-                     void *file_baton,
-                     const svn_diff_tree_processor_t *processor,
-                     apr_pool_t *scratch_pool)
-{
-  SVN_ERR(processor->file_closed(relpath,
-                                 left_source, NULL,
-                                 file_baton, processor, scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-default_file_changed(const char *relpath,
-                     const svn_diff_source_t *left_source,
-                     const svn_diff_source_t *right_source,
-                     const char *left_file,
-                     const char *right_file,
-                     /*const*/ apr_hash_t *left_props,
-                     /*const*/ apr_hash_t *right_props,
-                     svn_boolean_t file_modified,
-                     const apr_array_header_t *prop_changes,
-                     void *file_baton,
-                     const svn_diff_tree_processor_t *processor,
-                     apr_pool_t *scratch_pool)
-{
-  SVN_ERR(processor->file_closed(relpath,
-                                 left_source, right_source,
-                                 file_baton, processor, scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-default_file_closed(const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    const svn_diff_source_t *right_source,
-                    void *file_baton,
-                    const svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-default_node_absent(const char *relpath,
-                    void *dir_baton,
-                    const svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  return SVN_NO_ERROR;
-}
-
-svn_diff_tree_processor_t *
-svn_diff__tree_processor_create(void *baton,
-                                apr_pool_t *result_pool)
-{
-  svn_diff_tree_processor_t *tp = apr_pcalloc(result_pool, sizeof(*tp));
-
-  tp->baton        = baton;
-
-  tp->dir_opened   = default_dir_opened;
-  tp->dir_added    = default_dir_added;
-  tp->dir_deleted  = default_dir_deleted;
-  tp->dir_changed  = default_dir_changed;
-  tp->dir_closed   = default_dir_closed;
-
-  tp->file_opened  = default_file_opened;
-  tp->file_added   = default_file_added;
-  tp->file_deleted = default_file_deleted;
-  tp->file_changed = default_file_changed;
-  tp->file_closed  = default_file_closed;
-
-  tp->node_absent  = default_node_absent;
-
-  return tp;
-}
-
-struct reverse_tree_baton_t
-{
-  const svn_diff_tree_processor_t *processor;
-};
-
-static svn_error_t *
-reverse_dir_opened(void **new_dir_baton,
-                   svn_boolean_t *skip,
-                   svn_boolean_t *skip_children,
-                   const char *relpath,
-                   const svn_diff_source_t *left_source,
-                   const svn_diff_source_t *right_source,
-                   const svn_diff_source_t *copyfrom_source,
-                   void *parent_dir_baton,
-                   const svn_diff_tree_processor_t *processor,
-                   apr_pool_t *result_pool,
-                   apr_pool_t *scratch_pool)
-{
-  struct reverse_tree_baton_t *rb = processor->baton;
-
-  SVN_ERR(rb->processor->dir_opened(new_dir_baton, skip, skip_children,
-                                    relpath,
-                                    right_source, left_source,
-                                    NULL /* copyfrom */,
-                                    parent_dir_baton,
-                                    rb->processor,
-                                    result_pool, scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-reverse_dir_added(const char *relpath,
-                  const svn_diff_source_t *copyfrom_source,
-                  const svn_diff_source_t *right_source,
-                  /*const*/ apr_hash_t *copyfrom_props,
-                  /*const*/ apr_hash_t *right_props,
-                  void *dir_baton,
-                  const svn_diff_tree_processor_t *processor,
-                  apr_pool_t *scratch_pool)
-{
-  struct reverse_tree_baton_t *rb = processor->baton;
-
-  SVN_ERR(rb->processor->dir_deleted(relpath,
-                                     right_source,
-                                     right_props,
-                                     dir_baton,
-                                     rb->processor,
-                                     scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-reverse_dir_deleted(const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    /*const*/ apr_hash_t *left_props,
-                    void *dir_baton,
-                    const svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  struct reverse_tree_baton_t *rb = processor->baton;
-
-  SVN_ERR(rb->processor->dir_added(relpath,
-                                   NULL,
-                                   left_source,
-                                   NULL,
-                                   left_props,
-                                   dir_baton,
-                                   rb->processor,
-                                   scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-reverse_dir_changed(const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    const svn_diff_source_t *right_source,
-                    /*const*/ apr_hash_t *left_props,
-                    /*const*/ apr_hash_t *right_props,
-                    const apr_array_header_t *prop_changes,
-                    void *dir_baton,
-                    const struct svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  struct reverse_tree_baton_t *rb = processor->baton;
-  apr_array_header_t *reversed_prop_changes = NULL;
-
-  if (prop_changes)
-    {
-      SVN_ERR_ASSERT(left_props != NULL && right_props != NULL);
-      SVN_ERR(svn_prop_diffs(&reversed_prop_changes, left_props, right_props,
-                             scratch_pool));
-    }
-
-  SVN_ERR(rb->processor->dir_changed(relpath,
-                                     right_source,
-                                     left_source,
-                                     right_props,
-                                     left_props,
-                                     reversed_prop_changes,
-                                     dir_baton,
-                                     rb->processor,
-                                     scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-reverse_dir_closed(const char *relpath,
-                   const svn_diff_source_t *left_source,
-                   const svn_diff_source_t *right_source,
-                   void *dir_baton,
-                   const svn_diff_tree_processor_t *processor,
-                   apr_pool_t *scratch_pool)
-{
-  struct reverse_tree_baton_t *rb = processor->baton;
-
-  SVN_ERR(rb->processor->dir_closed(relpath,
-                                    right_source,
-                                    left_source,
-                                    dir_baton,
-                                    rb->processor,
-                                    scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-reverse_file_opened(void **new_file_baton,
-                    svn_boolean_t *skip,
-                    const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    const svn_diff_source_t *right_source,
-                    const svn_diff_source_t *copyfrom_source,
-                    void *dir_baton,
-                    const svn_diff_tree_processor_t *processor,
-                    apr_pool_t *result_pool,
-                    apr_pool_t *scratch_pool)
-{
-  struct reverse_tree_baton_t *rb = processor->baton;
-
-  SVN_ERR(rb->processor->file_opened(new_file_baton,
-                                     skip,
-                                     relpath,
-                                     right_source,
-                                     left_source,
-                                     NULL /* copy_from */,
-                                     dir_baton,
-                                     rb->processor,
-                                     result_pool,
-                                     scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-reverse_file_added(const char *relpath,
-                   const svn_diff_source_t *copyfrom_source,
-                   const svn_diff_source_t *right_source,
-                   const char *copyfrom_file,
-                   const char *right_file,
-                   /*const*/ apr_hash_t *copyfrom_props,
-                   /*const*/ apr_hash_t *right_props,
-                   void *file_baton,
-                   const svn_diff_tree_processor_t *processor,
-                   apr_pool_t *scratch_pool)
-{
-  struct reverse_tree_baton_t *rb = processor->baton;
-
-  SVN_ERR(rb->processor->file_deleted(relpath,
-                                      right_source,
-                                      right_file,
-                                      right_props,
-                                      file_baton,
-                                      rb->processor,
-                                      scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-reverse_file_deleted(const char *relpath,
-                     const svn_diff_source_t *left_source,
-                     const char *left_file,
-                     /*const*/ apr_hash_t *left_props,
-                     void *file_baton,
-                     const svn_diff_tree_processor_t *processor,
-                     apr_pool_t *scratch_pool)
-{
-  struct reverse_tree_baton_t *rb = processor->baton;
-
-  SVN_ERR(rb->processor->file_added(relpath,
-                                    NULL /* copyfrom src */,
-                                    left_source,
-                                    NULL /* copyfrom file */,
-                                    left_file,
-                                    NULL /* copyfrom props */,
-                                    left_props,
-                                    file_baton,
-                                    rb->processor,
-                                    scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-reverse_file_changed(const char *relpath,
-                     const svn_diff_source_t *left_source,
-                     const svn_diff_source_t *right_source,
-                     const char *left_file,
-                     const char *right_file,
-                     /*const*/ apr_hash_t *left_props,
-                     /*const*/ apr_hash_t *right_props,
-                     svn_boolean_t file_modified,
-                     const apr_array_header_t *prop_changes,
-                     void *file_baton,
-                     const svn_diff_tree_processor_t *processor,
-                     apr_pool_t *scratch_pool)
-{
-  struct reverse_tree_baton_t *rb = processor->baton;
-  apr_array_header_t *reversed_prop_changes = NULL;
-
-  if (prop_changes)
-    {
-      SVN_ERR_ASSERT(left_props != NULL && right_props != NULL);
-      SVN_ERR(svn_prop_diffs(&reversed_prop_changes, left_props, right_props,
-                             scratch_pool));
-    }
-
-  SVN_ERR(rb->processor->file_changed(relpath,
-                                      right_source,
-                                      left_source,
-                                      right_file,
-                                      left_file,
-                                      right_props,
-                                      left_props,
-                                      file_modified,
-                                      reversed_prop_changes,
-                                      file_baton,
-                                      rb->processor,
-                                      scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-reverse_file_closed(const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    const svn_diff_source_t *right_source,
-                    void *file_baton,
-                    const svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  struct reverse_tree_baton_t *rb = processor->baton;
-
-  SVN_ERR(rb->processor->file_closed(relpath,
-                                     right_source,
-                                     left_source,
-                                     file_baton,
-                                     rb->processor,
-                                     scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-reverse_node_absent(const char *relpath,
-                    void *dir_baton,
-                    const svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  struct reverse_tree_baton_t *rb = processor->baton;
-
-  SVN_ERR(rb->processor->node_absent(relpath,
-                                    dir_baton,
-                                    rb->processor,
-                                    scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-
-const svn_diff_tree_processor_t *
-svn_diff__tree_processor_reverse_create(const svn_diff_tree_processor_t * 
processor,
-                                        apr_pool_t *result_pool)
-{
-  struct reverse_tree_baton_t *rb;
-  svn_diff_tree_processor_t *reverse;
-
-  rb = apr_pcalloc(result_pool, sizeof(*rb));
-  rb->processor = processor;
-
-  reverse = svn_diff__tree_processor_create(rb, result_pool);
-
-  reverse->dir_opened   = reverse_dir_opened;
-  reverse->dir_added    = reverse_dir_added;
-  reverse->dir_deleted  = reverse_dir_deleted;
-  reverse->dir_changed  = reverse_dir_changed;
-  reverse->dir_closed   = reverse_dir_closed;
-
-  reverse->file_opened   = reverse_file_opened;
-  reverse->file_added    = reverse_file_added;
-  reverse->file_deleted  = reverse_file_deleted;
-  reverse->file_changed  = reverse_file_changed;
-  reverse->file_closed   = reverse_file_closed;
-
-  reverse->node_absent   = reverse_node_absent;
-
-  return reverse;
-}
-
-struct filter_tree_baton_t
-{
-  const svn_diff_tree_processor_t *processor;
-  const char *prefix_relpath;
-};
-
-static svn_error_t *
-filter_dir_opened(void **new_dir_baton,
-                  svn_boolean_t *skip,
-                  svn_boolean_t *skip_children,
-                  const char *relpath,
-                  const svn_diff_source_t *left_source,
-                  const svn_diff_source_t *right_source,
-                  const svn_diff_source_t *copyfrom_source,
-                  void *parent_dir_baton,
-                  const svn_diff_tree_processor_t *processor,
-                  apr_pool_t *result_pool,
-                  apr_pool_t *scratch_pool)
-{
-  struct filter_tree_baton_t *fb = processor->baton;
-
-  relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
-
-  if (! relpath)
-    {
-      /* Skip work for this, but NOT for DESCENDANTS */
-      *skip = TRUE;
-      return SVN_NO_ERROR;
-    }
-
-  SVN_ERR(fb->processor->dir_opened(new_dir_baton, skip, skip_children,
-                                    relpath,
-                                    left_source, right_source,
-                                    copyfrom_source,
-                                    parent_dir_baton,
-                                    fb->processor,
-                                    result_pool, scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-filter_dir_added(const char *relpath,
-                 const svn_diff_source_t *copyfrom_source,
-                 const svn_diff_source_t *right_source,
-                 /*const*/ apr_hash_t *copyfrom_props,
-                 /*const*/ apr_hash_t *right_props,
-                 void *dir_baton,
-                 const svn_diff_tree_processor_t *processor,
-                 apr_pool_t *scratch_pool)
-{
-  struct filter_tree_baton_t *fb = processor->baton;
-
-  relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
-  assert(relpath != NULL); /* Driver error */
-
-  SVN_ERR(fb->processor->dir_added(relpath,
-                                   copyfrom_source,
-                                   right_source,
-                                   copyfrom_props,
-                                   right_props,
-                                   dir_baton,
-                                   fb->processor,
-                                   scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-filter_dir_deleted(const char *relpath,
-                   const svn_diff_source_t *left_source,
-                   /*const*/ apr_hash_t *left_props,
-                   void *dir_baton,
-                   const svn_diff_tree_processor_t *processor,
-                   apr_pool_t *scratch_pool)
-{
-  struct filter_tree_baton_t *fb = processor->baton;
-
-  relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
-  assert(relpath != NULL); /* Driver error */
-
-  SVN_ERR(fb->processor->dir_deleted(relpath,
-                                     left_source,
-                                     left_props,
-                                     dir_baton,
-                                     fb->processor,
-                                     scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-filter_dir_changed(const char *relpath,
-                   const svn_diff_source_t *left_source,
-                   const svn_diff_source_t *right_source,
-                   /*const*/ apr_hash_t *left_props,
-                   /*const*/ apr_hash_t *right_props,
-                   const apr_array_header_t *prop_changes,
-                   void *dir_baton,
-                   const struct svn_diff_tree_processor_t *processor,
-                   apr_pool_t *scratch_pool)
-{
-  struct filter_tree_baton_t *fb = processor->baton;
-
-  relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
-  assert(relpath != NULL); /* Driver error */
-
-  SVN_ERR(fb->processor->dir_changed(relpath,
-                                     left_source,
-                                     right_source,
-                                     left_props,
-                                     right_props,
-                                     prop_changes,
-                                     dir_baton,
-                                     fb->processor,
-                                     scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-filter_dir_closed(const char *relpath,
-                  const svn_diff_source_t *left_source,
-                  const svn_diff_source_t *right_source,
-                  void *dir_baton,
-                  const svn_diff_tree_processor_t *processor,
-                  apr_pool_t *scratch_pool)
-{
-  struct filter_tree_baton_t *fb = processor->baton;
-
-  relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
-  assert(relpath != NULL); /* Driver error */
-
-  SVN_ERR(fb->processor->dir_closed(relpath,
-                                    left_source,
-                                    right_source,
-                                    dir_baton,
-                                    fb->processor,
-                                    scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-filter_file_opened(void **new_file_baton,
-                   svn_boolean_t *skip,
-                   const char *relpath,
-                   const svn_diff_source_t *left_source,
-                   const svn_diff_source_t *right_source,
-                   const svn_diff_source_t *copyfrom_source,
-                   void *dir_baton,
-                   const svn_diff_tree_processor_t *processor,
-                   apr_pool_t *result_pool,
-                   apr_pool_t *scratch_pool)
-{
-  struct filter_tree_baton_t *fb = processor->baton;
-
-  relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
-
-  if (! relpath)
-    {
-      *skip = TRUE;
-      return SVN_NO_ERROR;
-    }
-
-  SVN_ERR(fb->processor->file_opened(new_file_baton,
-                                     skip,
-                                     relpath,
-                                     left_source,
-                                     right_source,
-                                     copyfrom_source,
-                                     dir_baton,
-                                     fb->processor,
-                                     result_pool,
-                                     scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-filter_file_added(const char *relpath,
-                  const svn_diff_source_t *copyfrom_source,
-                  const svn_diff_source_t *right_source,
-                  const char *copyfrom_file,
-                  const char *right_file,
-                  /*const*/ apr_hash_t *copyfrom_props,
-                  /*const*/ apr_hash_t *right_props,
-                  void *file_baton,
-                  const svn_diff_tree_processor_t *processor,
-                  apr_pool_t *scratch_pool)
-{
-  struct filter_tree_baton_t *fb = processor->baton;
-
-  relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
-  assert(relpath != NULL); /* Driver error */
-
-  SVN_ERR(fb->processor->file_added(relpath,
-                                    copyfrom_source,
-                                    right_source,
-                                    copyfrom_file,
-                                    right_file,
-                                    copyfrom_props,
-                                    right_props,
-                                    file_baton,
-                                    fb->processor,
-                                    scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-filter_file_deleted(const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    const char *left_file,
-                    /*const*/ apr_hash_t *left_props,
-                    void *file_baton,
-                    const svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  struct filter_tree_baton_t *fb = processor->baton;
-
-  relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
-  assert(relpath != NULL); /* Driver error */
-
-  SVN_ERR(fb->processor->file_deleted(relpath,
-                                      left_source,
-                                      left_file,
-                                      left_props,
-                                      file_baton,
-                                      fb->processor,
-                                      scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-filter_file_changed(const char *relpath,
-                    const svn_diff_source_t *left_source,
-                    const svn_diff_source_t *right_source,
-                    const char *left_file,
-                    const char *right_file,
-                    /*const*/ apr_hash_t *left_props,
-                    /*const*/ apr_hash_t *right_props,
-                    svn_boolean_t file_modified,
-                    const apr_array_header_t *prop_changes,
-                    void *file_baton,
-                    const svn_diff_tree_processor_t *processor,
-                    apr_pool_t *scratch_pool)
-{
-  struct filter_tree_baton_t *fb = processor->baton;
-
-  relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
-  assert(relpath != NULL); /* Driver error */
-
-  SVN_ERR(fb->processor->file_changed(relpath,
-                                      left_source,
-                                      right_source,
-                                      left_file,
-                                      right_file,
-                                      left_props,
-                                      right_props,
-                                      file_modified,
-                                      prop_changes,
-                                      file_baton,
-                                      fb->processor,
-                                      scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-filter_file_closed(const char *relpath,
-                   const svn_diff_source_t *left_source,
-                   const svn_diff_source_t *right_source,
-                   void *file_baton,
-                   const svn_diff_tree_processor_t *processor,
-                   apr_pool_t *scratch_pool)
-{
-  struct filter_tree_baton_t *fb = processor->baton;
-
-  relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
-  assert(relpath != NULL); /* Driver error */
-
-  SVN_ERR(fb->processor->file_closed(relpath,
-                                     left_source,
-                                     right_source,
-                                     file_baton,
-                                     fb->processor,
-                                     scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-filter_node_absent(const char *relpath,
-                   void *dir_baton,
-                   const svn_diff_tree_processor_t *processor,
-                   apr_pool_t *scratch_pool)
-{
-  struct filter_tree_baton_t *fb = processor->baton;
-
-  relpath = svn_relpath_skip_ancestor(fb->prefix_relpath, relpath);
-  assert(relpath != NULL); /* Driver error */
-
-  SVN_ERR(fb->processor->node_absent(relpath,
-                                    dir_baton,
-                                    fb->processor,
-                                    scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-
-const svn_diff_tree_processor_t *
-svn_diff__tree_processor_filter_create(const svn_diff_tree_processor_t * 
processor,
-                                        const char *prefix_relpath,
-                                        apr_pool_t *result_pool)
-{
-  struct filter_tree_baton_t *fb;
-  svn_diff_tree_processor_t *filter;
-
-  fb = apr_pcalloc(result_pool, sizeof(*fb));
-  fb->processor = processor;
-  if (prefix_relpath)
-    fb->prefix_relpath = apr_pstrdup(result_pool, prefix_relpath);
-
-  filter = svn_diff__tree_processor_create(fb, result_pool);
-
-  filter->dir_opened   = filter_dir_opened;
-  filter->dir_added    = filter_dir_added;
-  filter->dir_deleted  = filter_dir_deleted;
-  filter->dir_changed  = filter_dir_changed;
-  filter->dir_closed   = filter_dir_closed;
-
-  filter->file_opened   = filter_file_opened;
-  filter->file_added    = filter_file_added;
-  filter->file_deleted  = filter_file_deleted;
-  filter->file_changed  = filter_file_changed;
-  filter->file_closed   = filter_file_closed;
-
-  filter->node_absent   = filter_node_absent;
-
-  return filter;
-}
-
-struct copy_as_changed_baton_t
-{
-  const svn_diff_tree_processor_t *processor;
-};
-
-static svn_error_t *
-copy_as_changed_dir_opened(void **new_dir_baton,
-                           svn_boolean_t *skip,
-                           svn_boolean_t *skip_children,
-                           const char *relpath,
-                           const svn_diff_source_t *left_source,
-                           const svn_diff_source_t *right_source,
-                           const svn_diff_source_t *copyfrom_source,
-                           void *parent_dir_baton,
-                           const svn_diff_tree_processor_t *processor,
-                           apr_pool_t *result_pool,
-                           apr_pool_t *scratch_pool)
-{
-  struct copy_as_changed_baton_t *cb = processor->baton;
-
-  if (!left_source && copyfrom_source)
-    {
-      assert(right_source != NULL);
-
-      left_source = copyfrom_source;
-      copyfrom_source = NULL;
-    }
-
-  SVN_ERR(cb->processor->dir_opened(new_dir_baton, skip, skip_children,
-                                    relpath,
-                                    left_source, right_source,
-                                    copyfrom_source,
-                                    parent_dir_baton,
-                                    cb->processor,
-                                    result_pool, scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-copy_as_changed_dir_added(const char *relpath,
-                          const svn_diff_source_t *copyfrom_source,
-                          const svn_diff_source_t *right_source,
-                          /*const*/ apr_hash_t *copyfrom_props,
-                          /*const*/ apr_hash_t *right_props,
-                          void *dir_baton,
-                          const svn_diff_tree_processor_t *processor,
-                          apr_pool_t *scratch_pool)
-{
-  struct copy_as_changed_baton_t *cb = processor->baton;
-
-  if (copyfrom_source)
-    {
-      apr_array_header_t *propchanges;
-      SVN_ERR(svn_prop_diffs(&propchanges, right_props, copyfrom_props,
-                             scratch_pool));
-      SVN_ERR(cb->processor->dir_changed(relpath,
-                                         copyfrom_source,
-                                         right_source,
-                                         copyfrom_props,
-                                         right_props,
-                                         propchanges,
-                                         dir_baton,
-                                         cb->processor,
-                                         scratch_pool));
-    }
-  else
-    {
-      SVN_ERR(cb->processor->dir_added(relpath,
-                                       copyfrom_source,
-                                       right_source,
-                                       copyfrom_props,
-                                       right_props,
-                                       dir_baton,
-                                       cb->processor,
-                                       scratch_pool));
-    }
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-copy_as_changed_dir_deleted(const char *relpath,
-                            const svn_diff_source_t *left_source,
-                            /*const*/ apr_hash_t *left_props,
-                            void *dir_baton,
-                            const svn_diff_tree_processor_t *processor,
-                            apr_pool_t *scratch_pool)
-{
-  struct copy_as_changed_baton_t *cb = processor->baton;
-
-  SVN_ERR(cb->processor->dir_deleted(relpath,
-                                     left_source,
-                                     left_props,
-                                     dir_baton,
-                                     cb->processor,
-                                     scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-copy_as_changed_dir_changed(const char *relpath,
-                            const svn_diff_source_t *left_source,
-                            const svn_diff_source_t *right_source,
-                            /*const*/ apr_hash_t *left_props,
-                            /*const*/ apr_hash_t *right_props,
-                            const apr_array_header_t *prop_changes,
-                            void *dir_baton,
-                            const struct svn_diff_tree_processor_t *processor,
-                            apr_pool_t *scratch_pool)
-{
-  struct copy_as_changed_baton_t *cb = processor->baton;
-
-  SVN_ERR(cb->processor->dir_changed(relpath,
-                                     left_source,
-                                     right_source,
-                                     left_props,
-                                     right_props,
-                                     prop_changes,
-                                     dir_baton,
-                                     cb->processor,
-                                     scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-copy_as_changed_dir_closed(const char *relpath,
-                           const svn_diff_source_t *left_source,
-                           const svn_diff_source_t *right_source,
-                           void *dir_baton,
-                           const svn_diff_tree_processor_t *processor,
-                           apr_pool_t *scratch_pool)
-{
-  struct copy_as_changed_baton_t *cb = processor->baton;
-
-  SVN_ERR(cb->processor->dir_closed(relpath,
-                                    left_source,
-                                    right_source,
-                                    dir_baton,
-                                    cb->processor,
-                                    scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-copy_as_changed_file_opened(void **new_file_baton,
-                            svn_boolean_t *skip,
-                            const char *relpath,
-                            const svn_diff_source_t *left_source,
-                            const svn_diff_source_t *right_source,
-                            const svn_diff_source_t *copyfrom_source,
-                            void *dir_baton,
-                            const svn_diff_tree_processor_t *processor,
-                            apr_pool_t *result_pool,
-                            apr_pool_t *scratch_pool)
-{
-  struct copy_as_changed_baton_t *cb = processor->baton;
-
-  if (!left_source && copyfrom_source)
-    {
-      assert(right_source != NULL);
-
-      left_source = copyfrom_source;
-      copyfrom_source = NULL;
-    }
-
-  SVN_ERR(cb->processor->file_opened(new_file_baton,
-                                     skip,
-                                     relpath,
-                                     left_source,
-                                     right_source,
-                                     copyfrom_source,
-                                     dir_baton,
-                                     cb->processor,
-                                     result_pool,
-                                     scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-copy_as_changed_file_added(const char *relpath,
-                           const svn_diff_source_t *copyfrom_source,
-                           const svn_diff_source_t *right_source,
-                           const char *copyfrom_file,
-                           const char *right_file,
-                           /*const*/ apr_hash_t *copyfrom_props,
-                           /*const*/ apr_hash_t *right_props,
-                           void *file_baton,
-                           const svn_diff_tree_processor_t *processor,
-                           apr_pool_t *scratch_pool)
-{
-  struct copy_as_changed_baton_t *cb = processor->baton;
-
-  if (copyfrom_source)
-    {
-      apr_array_header_t *propchanges;
-      svn_boolean_t same;
-      SVN_ERR(svn_prop_diffs(&propchanges, right_props, copyfrom_props,
-                             scratch_pool));
-
-      /* "" is sometimes a marker for just modified (E.g. no-textdeltas),
-         and it is certainly not a file */
-      if (*copyfrom_file && *right_file)
-        {
-          SVN_ERR(svn_io_files_contents_same_p(&same, copyfrom_file,
-                                               right_file, scratch_pool));
-        }
-      else
-        same = FALSE;
-
-      SVN_ERR(cb->processor->file_changed(relpath,
-                                          copyfrom_source,
-                                          right_source,
-                                          copyfrom_file,
-                                          right_file,
-                                          copyfrom_props,
-                                          right_props,
-                                          !same,
-                                          propchanges,
-                                          file_baton,
-                                          cb->processor,
-                                          scratch_pool));
-    }
-  else
-    {
-      SVN_ERR(cb->processor->file_added(relpath,
-                                        copyfrom_source,
-                                        right_source,
-                                        copyfrom_file,
-                                        right_file,
-                                        copyfrom_props,
-                                        right_props,
-                                        file_baton,
-                                        cb->processor,
-                                        scratch_pool));
-    }
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-copy_as_changed_file_deleted(const char *relpath,
-                             const svn_diff_source_t *left_source,
-                             const char *left_file,
-                             /*const*/ apr_hash_t *left_props,
-                             void *file_baton,
-                             const svn_diff_tree_processor_t *processor,
-                             apr_pool_t *scratch_pool)
-{
-  struct copy_as_changed_baton_t *cb = processor->baton;
-
-  SVN_ERR(cb->processor->file_deleted(relpath,
-                                      left_source,
-                                      left_file,
-                                      left_props,
-                                      file_baton,
-                                      cb->processor,
-                                      scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-copy_as_changed_file_changed(const char *relpath,
-                             const svn_diff_source_t *left_source,
-                             const svn_diff_source_t *right_source,
-                             const char *left_file,
-                             const char *right_file,
-                             /*const*/ apr_hash_t *left_props,
-                             /*const*/ apr_hash_t *right_props,
-                             svn_boolean_t file_modified,
-                             const apr_array_header_t *prop_changes,
-                             void *file_baton,
-                             const svn_diff_tree_processor_t *processor,
-                             apr_pool_t *scratch_pool)
-{
-  struct copy_as_changed_baton_t *cb = processor->baton;
-
-  SVN_ERR(cb->processor->file_changed(relpath,
-                                      left_source,
-                                      right_source,
-                                      left_file,
-                                      right_file,
-                                      left_props,
-                                      right_props,
-                                      file_modified,
-                                      prop_changes,
-                                      file_baton,
-                                      cb->processor,
-                                      scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-copy_as_changed_file_closed(const char *relpath,
-                            const svn_diff_source_t *left_source,
-                            const svn_diff_source_t *right_source,
-                            void *file_baton,
-                            const svn_diff_tree_processor_t *processor,
-                            apr_pool_t *scratch_pool)
-{
-  struct copy_as_changed_baton_t *cb = processor->baton;
-
-  SVN_ERR(cb->processor->file_closed(relpath,
-                                     left_source,
-                                     right_source,
-                                     file_baton,
-                                     cb->processor,
-                                     scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-copy_as_changed_node_absent(const char *relpath,
-                            void *dir_baton,
-                            const svn_diff_tree_processor_t *processor,
-                            apr_pool_t *scratch_pool)
-{
-  struct copy_as_changed_baton_t *cb = processor->baton;
-
-  SVN_ERR(cb->processor->node_absent(relpath,
-                                    dir_baton,
-                                    cb->processor,
-                                    scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-
-const svn_diff_tree_processor_t *
-svn_diff__tree_processor_copy_as_changed_create(
-                        const svn_diff_tree_processor_t * processor,
-                        apr_pool_t *result_pool)
-{
-  struct copy_as_changed_baton_t *cb;
-  svn_diff_tree_processor_t *filter;
-
-  cb = apr_pcalloc(result_pool, sizeof(*cb));
-  cb->processor = processor;
-
-  filter = svn_diff__tree_processor_create(cb, result_pool);
-  filter->dir_opened   = copy_as_changed_dir_opened;
-  filter->dir_added    = copy_as_changed_dir_added;
-  filter->dir_deleted  = copy_as_changed_dir_deleted;
-  filter->dir_changed  = copy_as_changed_dir_changed;
-  filter->dir_closed   = copy_as_changed_dir_closed;
-
-  filter->file_opened   = copy_as_changed_file_opened;
-  filter->file_added    = copy_as_changed_file_added;
-  filter->file_deleted  = copy_as_changed_file_deleted;
-  filter->file_changed  = copy_as_changed_file_changed;
-  filter->file_closed   = copy_as_changed_file_closed;
-
-  filter->node_absent   = copy_as_changed_node_absent;
-
-  return filter;
-}
-
 
 /* Processor baton for the tee tree processor */
 struct tee_baton_t
@@ -1646,13 +446,3 @@ svn_diff__tree_processor_tee_create(cons
 
   return tee;
 }
-
-svn_diff_source_t *
-svn_diff__source_create(svn_revnum_t revision,
-                        apr_pool_t *result_pool)
-{
-  svn_diff_source_t *src = apr_pcalloc(result_pool, sizeof(*src));
-
-  src->revision = revision;
-  return src;
-}


Reply via email to