svn commit: r1921441 - in /subversion/trunk/subversion/libsvn_diff: diff_tree.c diff_tree_tee.c

[email protected]
Newsgroups gmane.comp.version-control.subversion.svn
Message-ID <[email protected]>
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;
-}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.