svn commit: r1922345 [6/10] - in /subversion/branches/pristine-checksum-kind: ./ .github/ build/ build/ac-macros/ build/cmake/ build/generator/ build/generator/swig/ build/generator/templates/ build/hudson/ contrib/client-side/ contrib/client-side/svn_...

[email protected]
Newsgroups gmane.comp.version-control.subversion.svn
Message-ID <[email protected]>
Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_diff/diff_tree.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_diff/diff_tree.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_diff/diff_tree.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_diff/diff_tree.c Fri Dec  6 13:59:05 2024
@@ -27,11 +27,7 @@
 
 #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"
@@ -228,1425 +224,6 @@ svn_diff__tree_processor_create(void *ba
   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
-{
-  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)

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_fs/fs-loader.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_fs/fs-loader.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_fs/fs-loader.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_fs/fs-loader.c Fri Dec  6 13:59:05 2024
@@ -52,6 +52,18 @@
 
 #include "fs-loader.h"
 
+/* Here are the declarations for the FS module init functions.  If we
+   are using DSO loading, they won't actually be linked into
+   libsvn_fs.  Note that these private functions have a common_pool
+   parameter that may be used for fs module scoped variables such as
+   the bdb cache.  This will be the same common_pool that is passed
+   to the create and open functions and these init functions (as well
+   as the open and create functions) are globally serialized so that
+   they have exclusive access to the common_pool. */
+#include "../libsvn_fs_base/fs_init.h"
+#include "../libsvn_fs_fs/fs_init.h"
+#include "../libsvn_fs_x/fs_init.h"
+
 /* This is defined by configure on platforms which use configure, but
    we need to define a fallback for Windows. */
 #ifndef DEFAULT_FS_TYPE

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_fs/fs-loader.h
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_fs/fs-loader.h?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_fs/fs-loader.h (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_fs/fs-loader.h Fri Dec  6 13:59:05 2024
@@ -183,18 +183,6 @@ typedef svn_error_t *(*fs_init_func_t)(c
                                        fs_library_vtable_t **vtable,
                                        apr_pool_t* common_pool);
 
-/* Here are the declarations for the FS module init functions.  If we
-   are using DSO loading, they won't actually be linked into
-   libsvn_fs.  Note that these private functions have a common_pool
-   parameter that may be used for fs module scoped variables such as
-   the bdb cache.  This will be the same common_pool that is passed
-   to the create and open functions and these init functions (as well
-   as the open and create functions) are globally serialized so that
-   they have exclusive access to the common_pool. */
-#include "../libsvn_fs_base/fs_init.h"
-#include "../libsvn_fs_fs/fs_init.h"
-#include "../libsvn_fs_x/fs_init.h"
-
 
 
 /*** vtable types for the abstract FS objects ***/

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_base/fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_base/fs.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_base/fs.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_base/fs.c Fri Dec  6 13:59:05 2024
@@ -36,6 +36,7 @@
 #include "svn_delta.h"
 #include "svn_version.h"
 #include "fs.h"
+#include "fs_init.h"
 #include "err.h"
 #include "dag.h"
 #include "revs-txns.h"

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_base/fs_init.h
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_base/fs_init.h?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_base/fs_init.h (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_base/fs_init.h Fri Dec  6 13:59:05 2024
@@ -22,9 +22,10 @@
  * ====================================================================
  */
 
-#ifndef LIBSVN_FS_LOADER_H
-#error Please include libsvn_fs/fs_loader.h instead of this file
-#else
+#ifndef SVN_LIBSVN_FS_BASE_INIT
+#define SVN_LIBSVN_FS_BASE_INIT
+
+#include "../libsvn_fs/fs-loader.h"
 
 svn_error_t *svn_fs_base__init(const svn_version_t *loader_version,
                                fs_library_vtable_t **vtable,

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_fs/fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_fs/fs.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_fs/fs.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_fs/fs.c Fri Dec  6 13:59:05 2024
@@ -34,6 +34,7 @@
 #include "svn_pools.h"
 #include "fs.h"
 #include "fs_fs.h"
+#include "fs_init.h"
 #include "tree.h"
 #include "lock.h"
 #include "hotcopy.h"

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_fs/fs_init.h
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_fs/fs_init.h?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_fs/fs_init.h (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_fs/fs_init.h Fri Dec  6 13:59:05 2024
@@ -21,12 +21,13 @@
  * ====================================================================
  */
 
-#ifndef LIBSVN_FS_LOADER_H
-#error Please include libsvn_fs/fs_loader.h instead of this file
-#else
+#ifndef SVN_LIBSVN_FS_FS_INIT
+#define SVN_LIBSVN_FS_FS_INIT
+
+#include "../libsvn_fs/fs-loader.h"
 
 svn_error_t *svn_fs_fs__init(const svn_version_t *loader_version,
-  fs_library_vtable_t **vtable,
-  apr_pool_t* common_pool);
+                             fs_library_vtable_t **vtable,
+                             apr_pool_t *common_pool);
 
 #endif

Propchange: subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_x/
------------------------------------------------------------------------------
  Merged /subversion/branches/windows-shared-ra-modules/subversion/libsvn_fs_x:r1920808-1921005
  Merged /subversion/trunk/subversion/libsvn_fs_x:r1908636-1922344

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_x/fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_x/fs.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_x/fs.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_x/fs.c Fri Dec  6 13:59:05 2024
@@ -35,6 +35,7 @@
 #include "batch_fsync.h"
 #include "fs.h"
 #include "fs_x.h"
+#include "fs_init.h"
 #include "pack.h"
 #include "recovery.h"
 #include "hotcopy.h"

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_x/fs_init.h
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_x/fs_init.h?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_x/fs_init.h (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_fs_x/fs_init.h Fri Dec  6 13:59:05 2024
@@ -21,13 +21,14 @@
 * ====================================================================
 */
 
-#ifndef LIBSVN_FS_LOADER_H
-#error Please include libsvn_fs/fs_loader.h instead of this file
-#else
+#ifndef SVN_LIBSVN_FS_X_INIT
+#define SVN_LIBSVN_FS_X_INIT
+
+#include "../libsvn_fs/fs-loader.h"
 
 svn_error_t *svn_fs_x__init(const svn_version_t *loader_version,
-  fs_library_vtable_t **vtable,
-  apr_pool_t* common_pool);
+                            fs_library_vtable_t **vtable,
+                            apr_pool_t *common_pool);
 
 #endif
 

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/deprecated.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/deprecated.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/deprecated.c Fri Dec  6 13:59:05 2024
@@ -34,7 +34,11 @@
 #include "svn_pools.h"
 
 #include "ra_loader.h"
-#include "deprecated.h"
+
+/* Declarations of the init functions for the available RA libraries. */
+#include "../libsvn_ra_local/ra_init.h"
+#include "../libsvn_ra_svn/ra_init.h"
+#include "../libsvn_ra_serf/ra_init.h"
 
 #include "svn_private_config.h"
 
@@ -497,26 +501,52 @@ svn_error_t *svn_ra_get_dir(svn_ra_sessi
                                   path, revision, SVN_DIRENT_ALL, pool);
 }
 
+/* For each libsvn_ra_foo library, provide an implementation of deprecated
+   svn_ra_foo_init function that wraps svn_ra_foo__compat_init, or returns
+   a "not implemented" error if it was not linked. */
+
+#ifndef SVN_LIBSVN_RA_LINKS_RA_NEON
 svn_error_t *
-svn_ra_local__deprecated_init(int abi_version,
-                              apr_pool_t *pool,
-                              apr_hash_t *hash)
+svn_ra_dav_init(int abi_version,
+                apr_pool_t *pool,
+                apr_hash_t *hash)
 {
-  return svn_error_trace(svn_ra_local_init(abi_version, pool, hash));
+  return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, NULL, NULL);
 }
+#endif /* ! SVN_LIBSVN_RA_LINKS_RA_NEON */
 
 svn_error_t *
-svn_ra_svn__deprecated_init(int abi_version,
-                            apr_pool_t *pool,
-                            apr_hash_t *hash)
-{
-  return svn_error_trace(svn_ra_svn_init(abi_version, pool, hash));
+svn_ra_svn_init(int abi_version,
+                apr_pool_t *pool,
+                apr_hash_t *hash)
+{
+#ifdef SVN_LIBSVN_RA_LINKS_RA_SVN
+  return svn_error_trace(svn_ra_svn__compat_init(abi_version, pool, hash));
+#else
+  return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, NULL, NULL);
+#endif /* ! SVN_LIBSVN_RA_LINKS_RA_SVN */
 }
 
 svn_error_t *
-svn_ra_serf__deprecated_init(int abi_version,
-                             apr_pool_t *pool,
-                             apr_hash_t *hash)
-{
-  return svn_error_trace(svn_ra_serf_init(abi_version, pool, hash));
+svn_ra_local_init(int abi_version,
+                  apr_pool_t *pool,
+                  apr_hash_t *hash)
+{
+#ifdef SVN_LIBSVN_RA_LINKS_RA_LOCAL
+  return svn_error_trace(svn_ra_local__compat_init(abi_version, pool, hash));
+#else
+  return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, NULL, NULL);
+#endif /* ! SVN_LIBSVN_RA_LINKS_RA_LOCAL */
+}
+
+svn_error_t *
+svn_ra_serf_init(int abi_version,
+                 apr_pool_t *pool,
+                 apr_hash_t *hash)
+{
+#ifdef SVN_LIBSVN_RA_LINKS_RA_SERF
+  return svn_error_trace(svn_ra_serf__compat_init(abi_version, pool, hash));
+#else
+  return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, NULL, NULL);
+#endif /* ! SVN_LIBSVN_RA_LINKS_RA_SERF */
 }

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/ra_loader.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/ra_loader.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/ra_loader.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/ra_loader.c Fri Dec  6 13:59:05 2024
@@ -50,12 +50,15 @@
 
 #include "svn_config.h"
 #include "ra_loader.h"
-#include "deprecated.h"
 
 #include "private/svn_auth_private.h"
 #include "private/svn_ra_private.h"
 #include "svn_private_config.h"
 
+/* Declarations of the init functions for the available RA libraries. */
+#include "../libsvn_ra_local/ra_init.h"
+#include "../libsvn_ra_svn/ra_init.h"
+#include "../libsvn_ra_serf/ra_init.h"
 
 
 
@@ -82,7 +85,7 @@ static const struct ra_lib_defn {
     svn_schemes,
 #ifdef SVN_LIBSVN_RA_LINKS_RA_SVN
     svn_ra_svn__init,
-    svn_ra_svn__deprecated_init
+    svn_ra_svn__compat_init
 #endif
   },
 
@@ -91,7 +94,7 @@ static const struct ra_lib_defn {
     local_schemes,
 #ifdef SVN_LIBSVN_RA_LINKS_RA_LOCAL
     svn_ra_local__init,
-    svn_ra_local__deprecated_init
+    svn_ra_local__compat_init
 #endif
   },
 
@@ -100,7 +103,7 @@ static const struct ra_lib_defn {
     dav_schemes,
 #ifdef SVN_LIBSVN_RA_LINKS_RA_SERF
     svn_ra_serf__init,
-    svn_ra_serf__deprecated_init
+    svn_ra_serf__compat_init
 #endif
   },
 
@@ -1567,47 +1570,3 @@ svn_ra_get_ra_library(svn_ra_plugin_t **
   return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
                            _("Unrecognized URL scheme '%s'"), url);
 }
-
-/* For each libsvn_ra_foo library that is not linked in, provide a default
-   implementation for svn_ra_foo_init which returns a "not implemented"
-   error. */
-
-#ifndef SVN_LIBSVN_RA_LINKS_RA_NEON
-svn_error_t *
-svn_ra_dav_init(int abi_version,
-                apr_pool_t *pool,
-                apr_hash_t *hash)
-{
-  return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, NULL, NULL);
-}
-#endif /* ! SVN_LIBSVN_RA_LINKS_RA_NEON */
-
-#ifndef SVN_LIBSVN_RA_LINKS_RA_SVN
-svn_error_t *
-svn_ra_svn_init(int abi_version,
-                apr_pool_t *pool,
-                apr_hash_t *hash)
-{
-  return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, NULL, NULL);
-}
-#endif /* ! SVN_LIBSVN_RA_LINKS_RA_SVN */
-
-#ifndef SVN_LIBSVN_RA_LINKS_RA_LOCAL
-svn_error_t *
-svn_ra_local_init(int abi_version,
-                  apr_pool_t *pool,
-                  apr_hash_t *hash)
-{
-  return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, NULL, NULL);
-}
-#endif /* ! SVN_LIBSVN_RA_LINKS_RA_LOCAL */
-
-#ifndef SVN_LIBSVN_RA_LINKS_RA_SERF
-svn_error_t *
-svn_ra_serf_init(int abi_version,
-                 apr_pool_t *pool,
-                 apr_hash_t *hash)
-{
-  return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, NULL, NULL);
-}
-#endif /* ! SVN_LIBSVN_RA_LINKS_RA_SERF */

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/ra_loader.h
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/ra_loader.h?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/ra_loader.h (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_ra/ra_loader.h Fri Dec  6 13:59:05 2024
@@ -419,17 +419,6 @@ typedef svn_error_t *
                        const svn_ra__vtable_t **vtable,
                        apr_pool_t *pool);
 
-/* Declarations of the init functions for the available RA libraries. */
-svn_error_t *svn_ra_local__init(const svn_version_t *loader_version,
-                                const svn_ra__vtable_t **vtable,
-                                apr_pool_t *pool);
-svn_error_t *svn_ra_svn__init(const svn_version_t *loader_version,
-                              const svn_ra__vtable_t **vtable,
-                              apr_pool_t *pool);
-svn_error_t *svn_ra_serf__init(const svn_version_t *loader_version,
-                               const svn_ra__vtable_t **vtable,
-                               apr_pool_t *pool);
-
 
 
 /*** Compat Functions ***/

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_local/ra_plugin.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_local/ra_plugin.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_local/ra_plugin.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_local/ra_plugin.c Fri Dec  6 13:59:05 2024
@@ -22,6 +22,7 @@
  */
 
 #include "ra_local.h"
+#include "ra_init.h"
 #include "svn_hash.h"
 #include "svn_ra.h"
 #include "svn_fs.h"
@@ -1997,5 +1998,5 @@ svn_ra_local__init(const svn_version_t *
 #define DESCRIPTION RA_LOCAL_DESCRIPTION
 #define VTBL ra_local_vtable
 #define INITFUNC svn_ra_local__init
-#define COMPAT_INITFUNC svn_ra_local_init
+#define COMPAT_INITFUNC svn_ra_local__compat_init
 #include "../libsvn_ra/wrapper_template.h"

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/inherited_props.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/inherited_props.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/inherited_props.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/inherited_props.c Fri Dec  6 13:59:05 2024
@@ -23,7 +23,6 @@
 
 
 #include <apr_tables.h>
-#include <apr_xml.h>
 
 #include "svn_hash.h"
 #include "svn_path.h"

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/mergeinfo.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/mergeinfo.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/mergeinfo.c Fri Dec  6 13:59:05 2024
@@ -22,7 +22,6 @@
  */
 
 #include <apr_tables.h>
-#include <apr_xml.h>
 
 #include "svn_hash.h"
 #include "svn_mergeinfo.h"

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/serf.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/serf.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/serf.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_serf/serf.c Fri Dec  6 13:59:05 2024
@@ -49,6 +49,7 @@
 #include "private/svn_subr_private.h"
 #include "svn_private_config.h"
 
+#include "ra_init.h"
 #include "ra_serf.h"
 
 
@@ -1127,5 +1128,5 @@ svn_ra_serf__init(const svn_version_t *l
 #define DESCRIPTION RA_SERF_DESCRIPTION
 #define VTBL serf_vtable
 #define INITFUNC svn_ra_serf__init
-#define COMPAT_INITFUNC svn_ra_serf_init
+#define COMPAT_INITFUNC svn_ra_serf__compat_init
 #include "../libsvn_ra/wrapper_template.h"

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_svn/client.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_svn/client.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_svn/client.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_ra_svn/client.c Fri Dec  6 13:59:05 2024
@@ -56,6 +56,7 @@
 
 #include "../libsvn_ra/ra_loader.h"
 
+#include "ra_init.h"
 #include "ra_svn.h"
 
 #ifdef SVN_HAVE_SASL
@@ -3372,5 +3373,5 @@ svn_ra_svn__init(const svn_version_t *lo
 #define DESCRIPTION RA_SVN_DESCRIPTION
 #define VTBL ra_svn_vtable
 #define INITFUNC svn_ra_svn__init
-#define COMPAT_INITFUNC svn_ra_svn_init
+#define COMPAT_INITFUNC svn_ra_svn__compat_init
 #include "../libsvn_ra/wrapper_template.h"

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/load-fs-vtable.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/load-fs-vtable.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/load-fs-vtable.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/load-fs-vtable.c Fri Dec  6 13:59:05 2024
@@ -42,6 +42,7 @@
 #include "private/svn_dep_compat.h"
 #include "private/svn_mergeinfo_private.h"
 #include "private/svn_repos_private.h"
+#include "private/svn_subr_private.h"
 
 /*----------------------------------------------------------------------*/
 
@@ -77,6 +78,8 @@ struct parse_baton
      contents are allocated in POOL. */
   /* ### See https://issues.apache.org/jira/browse/SVN-3903
      ### for discussion about improving the memory costs of this mapping. */
+  /* Using svn_revnum_t as a key can interact badly with APR's default hash
+     see tools/dev/hash-test.c. Use svn_hash__make to get a suitable hash. */
   apr_hash_t *rev_map;
 
   /* The most recent (youngest) revision from the dump stream mapped in
@@ -1255,7 +1258,7 @@ svn_repos_get_fs_build_parser6(const svn
   pb->parent_dir = parent_dir;
   pb->pool = pool;
   pb->notify_pool = svn_pool_create(pool);
-  pb->rev_map = apr_hash_make(pool);
+  pb->rev_map = svn_hash__make(pool);
   pb->oldest_dumpstream_rev = SVN_INVALID_REVNUM;
   pb->last_rev_mapped = SVN_INVALID_REVNUM;
   pb->start_rev = start_rev;

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/log.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/log.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/log.c Fri Dec  6 13:59:05 2024
@@ -1719,8 +1719,8 @@ do_logs(svn_fs_t *fs,
         int limit,
         svn_boolean_t strict_node_history,
         svn_boolean_t include_merged_revisions,
-        svn_boolean_t handling_merged_revisions,
         svn_boolean_t subtractive_merge,
+        svn_boolean_t handling_merged_revisions,
         svn_boolean_t ignore_missing_locations,
         const apr_array_header_t *revprops,
         svn_boolean_t descending_order,

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/reporter.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/reporter.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/reporter.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_repos/reporter.c Fri Dec  6 13:59:05 2024
@@ -138,7 +138,8 @@ typedef struct report_baton_t
   svn_fs_root_t *s_roots[NUM_CACHED_SOURCE_ROOTS];
 
   /* Cache for revision properties. This is used to eliminate redundant
-     revprop fetching. */
+     revprop fetching. svn_revnum_t keys so use svn_hash__make to get a
+     suitable hash function. */
   apr_hash_t *revision_infos;
 
   /* This will not change. So, fetch it once and reuse it. */
@@ -1628,7 +1629,7 @@ svn_repos_begin_report3(void **report_ba
   b->edit_baton = edit_baton;
   b->authz_read_func = authz_read_func;
   b->authz_read_baton = authz_read_baton;
-  b->revision_infos = apr_hash_make(pool);
+  b->revision_infos = svn_hash__make(pool);
   b->pool = pool;
   b->reader = svn_spillbuf__reader_create(1000 /* blocksize */,
                                           1000000 /* maxsize */,

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/auth.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/auth.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/auth.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/auth.c Fri Dec  6 13:59:05 2024
@@ -508,7 +508,7 @@ svn_auth_get_platform_specific_provider(
       const char *library_label, *library_name;
       const char *provider_function_name, *version_function_name;
       library_name = apr_psprintf(pool,
-                                  "libsvn_auth_%s-%d.so.%d",
+                                  "libsvn_auth_%s-" SVN_DSO_SUFFIX_FMT,
                                   provider_name,
                                   SVN_VER_MAJOR, SVN_SOVERSION);
       library_label = apr_psprintf(pool, "svn_%s", provider_name);

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/cmdline.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/cmdline.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/cmdline.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/cmdline.c Fri Dec  6 13:59:05 2024
@@ -1898,3 +1898,60 @@ svn_cmdline__cancellation_exit(void)
 #endif
     }
 }
+
+#if defined(WIN32)
+
+svn_error_t *
+svn_cmdline__win32_get_cstring_argv(const char **cstring_argv_p[],
+                                    int argc,
+                                    const wchar_t *argv[],
+                                    apr_pool_t *result_pool)
+{
+  apr_array_header_t *cstring_argv;
+  int i;
+
+  cstring_argv = apr_array_make(result_pool, argc + 1, sizeof(const char *));
+
+  for (i = 0; i < argc; i++)
+    {
+      const wchar_t *arg = argv[i];
+      char *cstring_arg;
+      int rv;
+
+      /* Passing -1 for the string length guarantees that the returned length
+         will account for a terminating null character. */
+      rv = WideCharToMultiByte(CP_ACP, 0, arg, -1, NULL, 0, NULL, NULL);
+      if (rv <= 0)
+        {
+          return svn_error_wrap_apr(apr_get_os_error(),
+                                    _("Conversion from UTF-16 failed"));
+        }
+
+      cstring_arg = apr_palloc(result_pool, rv);
+      rv = WideCharToMultiByte(CP_ACP, 0, arg, -1, cstring_arg, rv, NULL, NULL);
+      if (rv <= 0)
+        {
+          return svn_error_wrap_apr(apr_get_os_error(),
+                                    _("Conversion from UTF-16 failed"));
+        }
+
+      APR_ARRAY_PUSH(cstring_argv, const char *) = cstring_arg;
+    }
+
+  APR_ARRAY_PUSH(cstring_argv, const char *) = NULL;
+
+  *cstring_argv_p = (const char **)cstring_argv->elts;
+  return SVN_NO_ERROR;
+}
+
+#endif
+
+svn_error_t *
+svn_cmdline__default_get_cstring_argv(const char **cstring_argv_p[],
+                                      int argc,
+                                      const char *argv[],
+                                      apr_pool_t *result_pool)
+{
+  *cstring_argv_p = argv;
+  return SVN_NO_ERROR;
+}

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/io.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/io.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/io.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/io.c Fri Dec  6 13:59:05 2024
@@ -1899,7 +1899,7 @@ svn_io__utf8_to_unicode_longpath(const W
         }
     }
 
-    SVN_ERR(svn_utf__win32_utf8_to_utf16(&(const WCHAR*)buffer, source,
+    SVN_ERR(svn_utf__win32_utf8_to_utf16(&buffer, source,
                                          prefix, result_pool));
 
     /* Convert slashes to backslashes because the \\?\ path format
@@ -2531,27 +2531,14 @@ svn_io__is_finfo_read_only(svn_boolean_t
                            apr_pool_t *pool)
 {
 #if defined(APR_HAS_USER) && !defined(WIN32) &&!defined(__OS2__)
-  apr_status_t apr_err;
-  apr_uid_t uid;
-  apr_gid_t gid;
-
-  *read_only = FALSE;
-
-  apr_err = apr_uid_current(&uid, &gid, pool);
-
-  if (apr_err)
-    return svn_error_wrap_apr(apr_err, _("Error getting UID of process"));
-
-  /* Check write bit for current user. */
-  if (apr_uid_compare(uid, file_info->user) == APR_SUCCESS)
-    *read_only = !(file_info->protection & APR_UWRITE);
-
-  else if (apr_gid_compare(gid, file_info->group) == APR_SUCCESS)
-    *read_only = !(file_info->protection & APR_GWRITE);
-
-  else
-    *read_only = !(file_info->protection & APR_WWRITE);
-
+  *read_only = (access(file_info->fname, W_OK) != 0);
+  /* svn_io__is_finfo_read_only can be called with a dangling
+   * symlink. access() will check the permission on the missing
+   * target and return -1 and errno = ENOENT. Check for ENOENT
+   * and pretend the file is writeable, otherwise we will get
+   * spurious Reverted messages on the symlink.
+   */
+  if (*read_only && errno == ENOENT) *read_only = FALSE;
 #else  /* WIN32 || __OS2__ || !APR_HAS_USER */
   *read_only = (file_info->protection & APR_FREADONLY);
 #endif
@@ -2564,33 +2551,7 @@ svn_io__is_finfo_executable(svn_boolean_
                             apr_finfo_t *file_info,
                             apr_pool_t *pool)
 {
-#if defined(APR_HAS_USER) && !defined(WIN32) &&!defined(__OS2__)
-  apr_status_t apr_err;
-  apr_uid_t uid;
-  apr_gid_t gid;
-
-  *executable = FALSE;
-
-  apr_err = apr_uid_current(&uid, &gid, pool);
-
-  if (apr_err)
-    return svn_error_wrap_apr(apr_err, _("Error getting UID of process"));
-
-  /* Check executable bit for current user. */
-  if (apr_uid_compare(uid, file_info->user) == APR_SUCCESS)
-    *executable = (file_info->protection & APR_UEXECUTE);
-
-  else if (apr_gid_compare(gid, file_info->group) == APR_SUCCESS)
-    *executable = (file_info->protection & APR_GEXECUTE);
-
-  else
-    *executable = (file_info->protection & APR_WEXECUTE);
-
-#else  /* WIN32 || __OS2__ || !APR_HAS_USER */
-  *executable = FALSE;
-#endif
-
-  return SVN_NO_ERROR;
+  return svn_io_is_file_executable(executable, file_info->fname, pool);
 }
 
 svn_error_t *
@@ -2599,12 +2560,7 @@ svn_io_is_file_executable(svn_boolean_t
                           apr_pool_t *pool)
 {
 #if defined(APR_HAS_USER) && !defined(WIN32) &&!defined(__OS2__)
-  apr_finfo_t file_info;
-
-  SVN_ERR(svn_io_stat(&file_info, path, APR_FINFO_PROT | APR_FINFO_OWNER,
-                      pool));
-  SVN_ERR(svn_io__is_finfo_executable(executable, &file_info, pool));
-
+  *executable = (access(path, X_OK) == 0);
 #else  /* WIN32 || __OS2__ || !APR_HAS_USER */
   *executable = FALSE;
 #endif

Modified: subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/opt.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/opt.c?rev=1922345&r1=1922344&r2=1922345&view=diff
==============================================================================
--- subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/opt.c (original)
+++ subversion/branches/pristine-checksum-kind/subversion/libsvn_subr/opt.c Fri Dec  6 13:59:05 2024
@@ -629,6 +629,86 @@ svn_opt_parse_revision_to_range(apr_arra
   return 0;
 }
 
+int svn_opt_parse_change_to_range(apr_array_header_t *opt_ranges,
+                                  const char *arg,
+                                  apr_pool_t *result_pool)
+{
+  char *end;
+  svn_revnum_t changeno, changeno_end;
+  const char *s = arg;
+  svn_boolean_t is_negative;
+
+  /* Check for a leading minus to allow "-c -r42".
+   * The is_negative flag is used to handle "-c -42" and "-c -r42".
+   * The "-c r-42" case is handled by strtol() returning a
+   * negative number. */
+  is_negative = (*s == '-');
+  if (is_negative)
+    s++;
+
+  /* Allow any number of 'r's to prefix a revision number. */
+  while (*s == 'r')
+    s++;
+  changeno = changeno_end = strtol(s, &end, 10);
+  if (end != s && *end == '-')
+    {
+      /* Negative number in range not supported with -c */
+      if (changeno < 0 || is_negative)
+        return -1;
+
+      s = end + 1;
+      while (*s == 'r')
+        s++;
+      changeno_end = strtol(s, &end, 10);
+
+      /* Negative number in range not supported with -c */
+      if (changeno_end < 0)
+          return -1;
+    }
+
+  /* Non-numeric change argument given to -c? */
+  if (end == arg || *end != '\0')
+    return -1;
+
+  /* There is no change 0 */
+  if (changeno == 0 || changeno_end == 0)
+    return -1;
+
+  /* The revision number cannot contain a double minus */
+  if (changeno < 0 && is_negative)
+    return -1;
+
+  if (is_negative)
+    changeno = -changeno;
+
+  /* Figure out the range:
+        -c N  -> -r N-1:N
+        -c -N -> -r N:N-1
+        -c M-N -> -r M-1:N for M < N
+        -c M-N -> -r M:N-1 for M > N
+        -c -M-N -> error (too confusing/no valid use case)
+  */
+  if (changeno > 0)
+    {
+      if (changeno <= changeno_end)
+        changeno--;
+      else
+        changeno_end--;
+    }
+  else
+    {
+      changeno = -changeno;
+      changeno_end = changeno - 1;
+    }
+
+  APR_ARRAY_PUSH(opt_ranges,
+                  svn_opt_revision_range_t *)
+    = svn_opt__revision_range_from_revnums(changeno, changeno_end,
+                                           result_pool);
+
+  return 0;
+}
+
 svn_error_t *
 svn_opt_resolve_revisions(svn_opt_revision_t *peg_rev,
                           svn_opt_revision_t *op_rev,
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.