svn commit: r1921444 - in /subversion/trunk/subversion/libsvn_diff: diff_tree.c diff_tree_filter.c

[email protected]
Newsgroups gmane.comp.version-control.subversion.svn
Message-ID <[email protected]>
Author: rinrab
Date: Sun Oct 20 16:35:13 2024
New Revision: 1921444

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

[in subversion/libsvn_diff]

* diff_tree.c
  (svn_diff__tree_processor_filter_create): Removed with the private, static
   functions, since they were moved to a new file.
* diff_tree_filter.c: Copied from diff_tree.c, keeping only the functions,
  which should be moved here.

Added:
    subversion/trunk/subversion/libsvn_diff/diff_tree_filter.c
      - copied, changed from r1921441, 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=1921444&r1=1921443&r2=1921444&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_diff/diff_tree.c (original)
+++ subversion/trunk/subversion/libsvn_diff/diff_tree.c Sun Oct 20 16:35:13 2024
@@ -532,344 +532,6 @@ svn_diff__tree_processor_reverse_create(
   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;

Copied: subversion/trunk/subversion/libsvn_diff/diff_tree_filter.c (from r1921441, subversion/trunk/subversion/libsvn_diff/diff_tree.c)
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_diff/diff_tree_filter.c?p2=subversion/trunk/subversion/libsvn_diff/diff_tree_filter.c&p1=subversion/trunk/subversion/libsvn_diff/diff_tree.c&r1=1921441&r2=1921444&rev=1921444&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_diff/diff_tree.c (original)
+++ subversion/trunk/subversion/libsvn_diff/diff_tree_filter.c Sun Oct 20 16:35:13 2024
@@ -1,5 +1,5 @@
 /*
- * diff_tree.c :  default diff tree processor
+ * diff_tree_filter.c :  filter diff tree processor
  *
  * ====================================================================
  *    Licensed to the Apache Software Foundation (ASF) under one
@@ -29,509 +29,11 @@
 
 #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;
@@ -869,370 +371,3 @@ svn_diff__tree_processor_filter_create(c
 
   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;
-}
-
-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.