You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/11/27 12:52:46 UTC

svn commit: r1546002 [9/39] - in /subversion/branches/verify-keep-going: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ build/win32/ contrib/client-side/emacs/ contrib/server-side/ contrib/server-side/svncu...

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h Wed Nov 27 11:52:35 2013
@@ -22,8 +22,14 @@
 #ifndef SVN_SWIG_SWIGUTIL_RB_H
 #define SVN_SWIG_SWIGUTIL_RB_H
 
+/* Windows hack: Allow overriding some <ruby.h> defaults */
+#include "swigutil_rb__pre_ruby.h"
 #include <ruby.h>
+#ifdef HAVE_RUBY_REGEX_H
+#include <ruby/regex.h>
+#else
 #include <regex.h>
+#endif
 
 #if SIZEOF_VOIDP == SIZEOF_LONG
 #  define PTR2NUM(x) (ULONG2NUM((unsigned long)(x)))
@@ -45,17 +51,6 @@
 #include "svn_client.h"
 #include "svn_repos.h"
 
-/* Define DLL export magic on Windows. */
-#ifdef WIN32
-#  ifdef SVN_SWIG_SWIGUTIL_RB_C
-#    define SVN_RB_SWIG_SWIGUTIL_EXPORT __declspec(dllexport)
-#  else
-#    define SVN_RB_SWIG_SWIGUTIL_EXPORT __declspec(dllimport)
-#  endif
-#else
-#  define SVN_RB_SWIG_SWIGUTIL_EXPORT
-#endif
-
 /* Ruby <=1.8.5 compatibility */
 #ifndef RARRAY_LEN
 #define RARRAY_LEN(x) RARRAY(x)->len
@@ -89,152 +84,98 @@ typedef struct apr_pool_wrapper_t
   apr_array_header_t *children;
 } apr_pool_wrapper_t;
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_initialize(void);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_pool_t *svn_swig_rb_pool(void);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_allocator_t *svn_swig_rb_allocator(void);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_svn_delta_editor(void);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_svn_delta_text_delta_window_handler(void);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_raise_svn_fs_already_close(void);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_raise_svn_repos_already_close(void);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_svn_error_new(VALUE code, VALUE message,
                                 VALUE file, VALUE line, VALUE child);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_svn_error_to_rb_error(svn_error_t *error);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_handle_svn_error(svn_error_t *error);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void *svn_swig_rb_to_swig_type(VALUE value, const void *ctx, apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_from_swig_type(void *value, void *ctx);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_depth_t svn_swig_rb_to_depth(VALUE value);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_mergeinfo_inheritance_t svn_swig_rb_to_mergeinfo_inheritance(VALUE value);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_svn_date_string_to_time(const char *date);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_hash_to_hash_string(apr_hash_t *hash);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_hash_to_hash_svn_string(apr_hash_t *hash);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_hash_to_hash_swig_type(apr_hash_t *hash,
                                              const char *type_name);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_hash_to_hash_merge_range(apr_hash_t *hash);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_hash_to_hash_merge_range_hash(apr_hash_t *hash);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_prop_hash_to_hash(apr_hash_t *prop_hash);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_revnum_key_hash_to_hash_string(apr_hash_t *hash);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_array_to_array_string(const apr_array_header_t *ary);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_array_to_array_svn_string(const apr_array_header_t *ary);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_array_to_array_svn_rev(const apr_array_header_t *ary);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_array_to_array_proplist_item(const apr_array_header_t *ary);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_array_to_array_external_item2(const apr_array_header_t *ary);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_array_to_array_merge_range(const apr_array_header_t *ary);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_apr_array_to_array_auth_provider_object(const apr_array_header_t *ary);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_prop_apr_array_to_hash_prop(const apr_array_header_t *ary);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_hash_t *svn_swig_rb_hash_to_apr_hash_string(VALUE hash, apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_hash_t *svn_swig_rb_hash_to_apr_hash_svn_string(VALUE hash,
                                                     apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_hash_t *svn_swig_rb_hash_to_apr_hash_swig_type(VALUE hash,
                                                    const char *typename,
                                                    apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_hash_t *svn_swig_rb_hash_to_apr_hash_revnum(VALUE hash,
                                                 apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_hash_t *svn_swig_rb_hash_to_apr_hash_merge_range(VALUE hash,
                                                      apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_array_header_t *svn_swig_rb_strings_to_apr_array(VALUE strings,
                                                      apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_array_header_t *
 svn_swig_rb_array_to_auth_provider_object_apr_array(VALUE array,
                                                     apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_array_header_t *svn_swig_rb_array_to_apr_array_revnum(VALUE array,
                                                           apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_array_header_t *svn_swig_rb_array_to_apr_array_merge_range(VALUE array,
                                                                apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_array_header_t *svn_swig_rb_array_to_apr_array_copy_source(VALUE array,
                                                                apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_array_header_t *svn_swig_rb_array_to_apr_array_revision_range(VALUE array,
                                                                   apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_array_header_t *svn_swig_rb_to_apr_array_prop(VALUE array_or_hash,
                                                   apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_array_header_t *svn_swig_rb_to_apr_array_row_prop(VALUE array_or_hash,
                                                       apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_get_pool(int argc, VALUE *argv, VALUE self, VALUE *rb_pool, apr_pool_t **pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_boolean_t svn_swig_rb_set_pool(VALUE target, VALUE pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_set_pool_for_no_swig_type(VALUE target, VALUE pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_push_pool(VALUE pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_pop_pool(VALUE pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_destroy_pool(VALUE pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_destroy_internal_pool(VALUE pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_make_delta_editor(svn_delta_editor_t **editor,
                                    void **edit_baton,
                                    VALUE rb_editor,
                                    apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_make_baton(VALUE proc, VALUE pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_set_baton(VALUE target, VALUE baton);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_log_receiver(void *baton,
                                       apr_hash_t *changed_paths,
                                       svn_revnum_t revision,
@@ -243,19 +184,16 @@ svn_error_t *svn_swig_rb_log_receiver(vo
                                       const char *message,
                                       apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_log_entry_receiver(void *baton,
                                             svn_log_entry_t *entry,
                                             apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_repos_authz_func(svn_boolean_t *allowed,
                                           svn_fs_root_t *root,
                                           const char *path,
                                           void *baton,
                                           apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_repos_authz_callback(svn_repos_authz_access_t required,
                                               svn_boolean_t *allowed,
                                               svn_fs_root_t *root,
@@ -264,7 +202,6 @@ svn_error_t *svn_swig_rb_repos_authz_cal
                                               apr_pool_t *pool);
 
 /* Implements the svn_client_get_commit_log3_t API. */
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_get_commit_log_func(const char **log_msg,
                                              const char **tmp_file,
                                              const apr_array_header_t *
@@ -272,76 +209,60 @@ svn_error_t *svn_swig_rb_get_commit_log_
                                              void *baton,
                                              apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_notify_func2(void *baton,
                               const svn_wc_notify_t *notify,
                               apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_conflict_resolver_func
     (svn_wc_conflict_result_t **result,
      const svn_wc_conflict_description_t *description,
      void *baton,
      apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_commit_callback(svn_revnum_t new_revision,
                                          const char *date,
                                          const char *author,
                                          void *baton);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_commit_callback2(const svn_commit_info_t *commit_info,
                                           void *baton,
                                           apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_cancel_func(void *cancel_baton);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_info_receiver(void *baton,
                                        const char *path,
                                        const svn_info_t *info,
                                        apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_boolean_t svn_swig_rb_config_enumerator(const char *name,
                                             const char *value,
                                             void *baton,
                                             apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_boolean_t svn_swig_rb_config_section_enumerator(const char *name,
                                                     void *baton,
                                                     apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_delta_path_driver_cb_func(void **dir_baton,
                                                    void *parent_baton,
                                                    void *callback_baton,
                                                    const char *path,
                                                    apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_txdelta_window_handler(svn_txdelta_window_t *window,
                                                 void *baton);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_fs_warning_callback(void *baton, svn_error_t *err);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_fs_warning_callback_baton_register(VALUE baton,
                                                     apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_fs_get_locks_callback(void *baton,
                                                svn_lock_t *lock,
                                                apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_just_call(void *baton);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_setup_ra_callbacks(svn_ra_callbacks2_t **callbacks,
                                     void **baton,
                                     VALUE rb_callbacks,
                                     apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_ra_lock_callback(void *baton,
                                           const char *path,
                                           svn_boolean_t do_lock,
@@ -349,7 +270,6 @@ svn_error_t *svn_swig_rb_ra_lock_callbac
                                           svn_error_t *ra_err,
                                           apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_ra_file_rev_handler(void *baton,
                                              const char *path,
                                              svn_revnum_t rev,
@@ -359,13 +279,11 @@ svn_error_t *svn_swig_rb_ra_file_rev_han
                                              apr_array_header_t *prop_diffs,
                                              apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_repos_history_func(void *baton,
                                             const char *path,
                                             svn_revnum_t revision,
                                             apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_repos_file_rev_handler(void *baton,
                                                 const char *path,
                                                 svn_revnum_t rev,
@@ -375,7 +293,6 @@ svn_error_t *svn_swig_rb_repos_file_rev_
                                                 apr_array_header_t *prop_diffs,
                                                 apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_wc_relocation_validator3(void *baton,
                                                   const char *uuid,
                                                   const char *url,
@@ -384,14 +301,12 @@ svn_error_t *svn_swig_rb_wc_relocation_v
 
 
 /* auth provider callbacks */
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t * svn_swig_rb_auth_gnome_keyring_unlock_prompt_func(
     char **keyring_passwd,
     const char *keyring_name,
     void *baton,
     apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_auth_simple_prompt_func(
     svn_auth_cred_simple_t **cred,
     void *baton,
@@ -400,7 +315,6 @@ svn_error_t *svn_swig_rb_auth_simple_pro
     svn_boolean_t may_save,
     apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_auth_username_prompt_func(
     svn_auth_cred_username_t **cred,
     void *baton,
@@ -408,7 +322,6 @@ svn_error_t *svn_swig_rb_auth_username_p
     svn_boolean_t may_save,
     apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_auth_ssl_server_trust_prompt_func(
     svn_auth_cred_ssl_server_trust_t **cred,
     void *baton,
@@ -418,7 +331,6 @@ svn_error_t *svn_swig_rb_auth_ssl_server
     svn_boolean_t may_save,
     apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_auth_ssl_client_cert_prompt_func(
     svn_auth_cred_ssl_client_cert_t **cred,
     void *baton,
@@ -426,7 +338,6 @@ svn_error_t *svn_swig_rb_auth_ssl_client
     svn_boolean_t may_save,
     apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_auth_ssl_client_cert_pw_prompt_func(
     svn_auth_cred_ssl_client_cert_pw_t **cred,
     void *baton,
@@ -434,27 +345,20 @@ svn_error_t *svn_swig_rb_auth_ssl_client
     svn_boolean_t may_save,
     apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 apr_file_t *svn_swig_rb_make_file(VALUE file, apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_stream_t *svn_swig_rb_make_stream(VALUE io);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_filename_to_temp_file(const char *file_name);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_set_revision(svn_opt_revision_t *rev, VALUE value);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_adjust_arg_for_client_ctx_and_pool(int *argc, VALUE **argv);
 
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 void svn_swig_rb_wc_status_func(void *baton,
                                 const char *path,
                                 svn_wc_status2_t *status);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_client_blame_receiver_func(void *baton,
                                                     apr_int64_t line_no,
                                                     svn_revnum_t revision,
@@ -464,39 +368,27 @@ svn_error_t *svn_swig_rb_client_blame_re
                                                     apr_pool_t *pool);
 
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_wc_entry_callbacks2_t *svn_swig_rb_wc_entry_callbacks2(void);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_wc_diff_callbacks2_t *svn_swig_rb_wc_diff_callbacks2(void);
 
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_make_txdelta_window_handler_wrapper(VALUE *rb_handler_pool,
                                                       apr_pool_t **handler_pool,
                                                       svn_txdelta_window_handler_t **handler,
                                                       void ***handler_baton);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_setup_txdelta_window_handler_wrapper(VALUE obj,
                                                        svn_txdelta_window_handler_t handler,
                                                        void *handler_baton);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
-svn_error_t *svn_swig_rb_invoke_txdelta_window_handler(VALUE window_handler,
-                                                       svn_txdelta_window_t *window,
-                                                       apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_invoke_txdelta_window_handler_wrapper(VALUE obj,
                                                                svn_txdelta_window_t *window,
                                                                apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 VALUE svn_swig_rb_txdelta_window_t_ops_get(svn_txdelta_window_t *window);
 
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_client_diff_summarize_func(const svn_client_diff_summarize_t *diff,
                                                     void *baton,
                                                     apr_pool_t *pool);
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_client_list_func(void *baton,
                                           const char *path,
                                           const svn_dirent_t *dirent,
@@ -504,20 +396,17 @@ svn_error_t *svn_swig_rb_client_list_fun
                                           const char *abs_path,
                                           apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_proplist_receiver(void *baton,
                                            const char *path,
                                            apr_hash_t *prop_hash,
                                            apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_changelist_receiver(void *baton,
                                              const char *path,
                                              const char *changelist,
                                              apr_pool_t *pool);
 
-SVN_RB_SWIG_SWIGUTIL_EXPORT
-extern svn_ra_reporter3_t *svn_swig_rb_ra_reporter3;
+svn_ra_reporter3_t *svn_swig_rb_get_ra_reporter3();
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_fs.rb
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_fs.rb?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_fs.rb (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/test_fs.rb Wed Nov 27 11:52:35 2013
@@ -209,10 +209,14 @@ class SvnFsTest < Test::Unit::TestCase
       ctx.commit(@wc_path)
     end
 
-    assert_raises(Svn::Error::FsNoSuchTransaction) do
+    assert_raises(Svn::Error::FsMalformedTxnId) do
       @fs.open_txn("NOT-EXIST")
     end
 
+    assert_raises(Svn::Error::FsNoSuchTransaction) do
+      @fs.open_txn("9-9")
+    end
+
     start_time = Time.now
     txn1 = @fs.transaction
     assert_equal([Svn::Core::PROP_REVISION_DATE], txn1.proplist.keys)

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/util.rb
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/util.rb?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/util.rb (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/util.rb Wed Nov 27 11:52:35 2013
@@ -79,6 +79,7 @@ module SvnTestUtil
     @wc_path = File.join(@tmp_path, "wc")
     @import_path = File.join(@tmp_path, "import")
     @repos_path = File.join(@tmp_path, "repos")
+    @svnserve_pid_file = File.join(@tmp_path, "svnserve.pid")
     @full_repos_path = File.expand_path(@repos_path)
     @repos_uri = "file://#{@full_repos_path.sub(/^\/?/, '/')}"
 

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/windows_util.rb
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/windows_util.rb?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/windows_util.rb (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/ruby/test/windows_util.rb Wed Nov 27 11:52:35 2013
@@ -34,149 +34,31 @@ module SvnTestUtil
         end
       end
 
-      def service_control(command, args={})
-        args = args.collect do |key, value|
-          "#{key}= #{Svnserve.escape_value(value)}"
-        end.join(" ")
-        result = `sc #{command} #{service_name} #{args}`
-        if result.match(/FAILED/)
-          raise "Failed to #{command} #{service_name}: #{args}"
-        end
-        /^\s*STATE\s*:\s\d+\s*(.*?)\s*$/ =~ result
-        $1
-      end
-
-      def grant_everyone_full_access(dir)
-        dir = dir.tr(File::SEPARATOR, File::ALT_SEPARATOR)
-        `cacls #{Svnserve.escape_value(dir)} /T /E /P Everyone:F`
-      end
-
-      def service_exists?
-        begin
-          service_control("query")
-          true
-        rescue
-          false
-        end
-      end
-
-      def service_stopped?
-        "STOPPED" == service_control("query") rescue true
-      end
-
       def setup_svnserve
         @svnserve_port = @svnserve_ports.last
         @repos_svnserve_uri = "svn://#{@svnserve_host}:#{@svnserve_port}"
-        grant_everyone_full_access(@full_repos_path)
 
         @@service_created ||= begin
           @@service_created = true
-          service_control('stop') unless service_stopped?
-          service_control('delete') if service_exists?
-
-          svnserve_dir = File.expand_path("svnserve")
-          FileUtils.mkdir_p(svnserve_dir)
-          at_exit do
-            service_control('stop') unless service_stopped?
-            service_control('delete') if service_exists?
-            FileUtils.rm_rf(svnserve_dir)
-          end
-          trap("INT") do
-            service_control('stop') unless service_stopped?
-            service_control('delete') if service_exists?
-            FileUtils.rm_rf(svnserve_dir)
-          end
-
-          config = SetupEnvironment.gen_make_opts
-          apr_version_include = Pathname.new(config["--with-apr"])  +
-              'include' + 'apr_version.h'
-          %r'^\s*#define\s+APR_MAJOR_VERSION\s+(\d+)' =~ apr_version_include.read
-          apr_major_version = $1 == '0' ? '' : "-#{$1}"
-
-          cwd = Dir.getwd
-          targets = %W(svnserve.exe libsvn_subr-1.dll libsvn_repos-1.dll
-                       libsvn_fs-1.dll libsvn_delta-1.dll
-                       libaprutil#{apr_major_version}.dll
-                       libapr#{apr_major_version}.dll
-                       libapriconv#{apr_major_version}.dll
-                       libdb??.dll libdb??d.dll)
-          ENV["PATH"].split(";").each do |path|
-
-            # Change the cwd to path, but ignore non-existent paths.
-            begin
-              Dir.chdir(path)
-            rescue Errno::ENOENT
-              next
-            end
-
-            found_targets = []
-            targets.each do |target|
-              matching_paths = Dir.glob(target)
-              matching_paths.each do |target_path|
-                target_path = File.join(path.tr('\\', '/'), target_path)
-                if File.exists?(target_path)
-                  found_targets << target
-                  retried = 0
-                  begin
-                    FileUtils.cp(target_path, svnserve_dir)
-                  rescue Errno::EACCES
-                    # On Windows the tests frequently fail spuriously with a
-                    # 'Errno::EACCES: Permission denied - svnserve.exe' error.
-                    # Sleeping for a few seconds avoids this.
-                    if retried > 5
-                      # Give up!
-                      raise
-                    else
-                      # Wait a sec...
-                      sleep(1)
-                      retried += 1
-                      retry
-                    end
-                  end
-                end
-              end
-            end
-            targets -= found_targets
-            break if targets.empty?
-          end
-          Dir.chdir(cwd)
-          # Remove optional targets instead of raising below.  If they are really
-          # needed, svnserve won't start anyway.
-          targets -= %W[libapriconv#{apr_major_version}.dll]
-          # Ditto these four, since svnserve.exe might be a static build.
-          targets -= %W[libsvn_subr-1.dll]
-          targets -= %W[libsvn_repos-1.dll]
-          targets -= %W[libsvn_fs-1.dll]
-          targets -= %W[libsvn_delta-1.dll]
-
-          unless targets.empty?
-            raise "can't find libraries to work svnserve: #{targets.join(' ')}"
-          end
-
-          grant_everyone_full_access(svnserve_dir)
 
-          svnserve_path = File.join(svnserve_dir, "svnserve.exe")
-          svnserve_path = svnserve_path.tr(File::SEPARATOR,
-                                           File::ALT_SEPARATOR)
+          top_directory = File.join(File.dirname(__FILE__), "..", "..", "..", "..", "..")
+          build_type = ENV["BUILD_TYPE"] || "Release"
+          svnserve_path = File.join(top_directory, build_type, 'subversion', 'svnserve', 'svnserve.exe')
           svnserve_path = Svnserve.escape_value(svnserve_path)
 
           root = @full_repos_path.tr(File::SEPARATOR, File::ALT_SEPARATOR)
+          FileUtils.mkdir_p(root)
 
-          args = ["--service", "--root", Svnserve.escape_value(root),
-                  "--listen-host", @svnserve_host,
-                  "--listen-port", @svnserve_port]
+          IO.popen("#{svnserve_path} -d -r #{Svnserve.escape_value(root)} --listen-host #{@svnserve_host} --listen-port #{@svnserve_port} --pid-file #{@svnserve_pid_file}")
           user = ENV["USERNAME"] || Etc.getlogin
-          service_control('create',
-                          [["binPath", "#{svnserve_path} #{args.join(' ')}"],
-                           ["DisplayName", service_name],
-                           ["type", "own"]])
         end
-        service_control('start')
         true
       end
 
       def teardown_svnserve
-        service_control('stop') unless service_stopped?
+        # TODO:
+        #   Load @svnserve_pid_file
+        #   Kill process
       end
 
       def add_pre_revprop_change_hook

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/svn_delta.i
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/svn_delta.i?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/svn_delta.i (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/svn_delta.i Wed Nov 27 11:52:35 2013
@@ -63,6 +63,9 @@
 */
 
 #ifdef SWIGPYTHON
+/* Make swig wrap this function for us, to allow making an editor in python
+   ### There must be a cleaner way to implement this? 
+   ### Maybe follow Ruby by wrapping it where passing an editor? */
 void svn_swig_py_make_editor(const svn_delta_editor_t **editor,
                              void **edit_baton,
                              PyObject *py_editor,
@@ -71,14 +74,8 @@ void svn_swig_py_make_editor(const svn_d
 
 #ifdef SWIGPERL
 %typemap(in) (const svn_delta_editor_t *EDITOR, void *BATON) {
-    svn_delta_make_editor(&$1, &$2, $input, _global_pool);
+    svn_swig_pl_make_editor(&$1, &$2, $input, _global_pool);
 }
-
-void svn_delta_wrap_window_handler(svn_txdelta_window_handler_t *handler,
-                                   void **handler_baton,
-                                   SV *callback,
-                                   apr_pool_t *pool);
-
 #endif
 
 #ifdef SWIGRUBY

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/svn_ra.i
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/svn_ra.i?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/svn_ra.i (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/svn_ra.i Wed Nov 27 11:52:35 2013
@@ -65,7 +65,7 @@
 #ifdef SWIGPERL
 /* FIXME: svn_ra_callbacks2_t ? */
 %typemap(in) (const svn_ra_callbacks_t *callbacks, void *callback_baton) {
-  svn_ra_make_callbacks(&$1, &$2, $input, _global_pool);
+  svn_swig_pl_make_callbacks(&$1, &$2, $input, _global_pool);
 }
 #endif
 #ifdef SWIGRUBY
@@ -77,7 +77,7 @@
 
 #ifdef SWIGPYTHON
 %callback_typemap(const svn_ra_reporter2_t *reporter, void *report_baton,
-                  (svn_ra_reporter2_t *)&swig_py_ra_reporter2,
+                  svn_swig_py_get_ra_reporter2(),
                   ,
                   )
 %callback_typemap(svn_location_segment_receiver_t receiver, void *receiver_baton,
@@ -90,7 +90,7 @@
 %callback_typemap(const svn_ra_reporter3_t *reporter, void *report_baton,
                   ,
                   ,
-                  svn_swig_rb_ra_reporter3)
+                  svn_swig_rb_get_ra_reporter3())
 #endif
 
 #ifndef SWIGPERL

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_auth_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_auth_private.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_auth_private.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_auth_private.h Wed Nov 27 11:52:35 2013
@@ -37,6 +37,24 @@
 extern "C" {
 #endif /* __cplusplus */
 
+/** SSL server authority verification credential type.
+ *
+ * The followin auth parameters are available to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_SSL_SERVER_FAILURES (@c apr_uint32_t*)
+ * - @c SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO
+ *      (@c svn_auth_ssl_server_cert_info_t*)
+ *
+ * The following optional auth parameters are relevant to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
+ *
+ * @since New in 1.9.
+ */
+#define SVN_AUTH_CRED_SSL_SERVER_AUTHORITY "svn.ssl.server.authority"
+
+
+
 /* If you add a password type for a provider which stores
  * passwords on disk in encrypted form, remember to update
  * svn_auth__simple_save_creds_helper. Otherwise it will be
@@ -213,6 +231,25 @@ svn_auth__ssl_client_cert_pw_set(svn_boo
                                  svn_boolean_t non_interactive,
                                  apr_pool_t *pool);
 
+#if (defined(WIN32) && !defined(__MINGW32__)) || defined(DOXYGEN)
+/**
+ * Set @a *provider to an authentication provider that implements
+ * ssl authority verification via the Windows CryptoApi.
+ *
+ * This provider automatically validates authority certificates with
+ * the CryptoApi, like Internet Explorer and the Windows network API do.
+ * This allows the rollout of root certificates via Windows Domain
+ * policies, instead of Subversion specific configuration.
+ *
+ * @note This function is only available on Windows.
+ */
+void
+svn_auth__get_windows_ssl_server_authority_provider(
+                            svn_auth_provider_object_t **provider,
+                            apr_pool_t *pool);
+#endif
+
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_cache.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_cache.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_cache.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_cache.h Wed Nov 27 11:52:35 2013
@@ -305,6 +305,33 @@ svn_cache__membuffer_cache_create(svn_me
                                   apr_pool_t *result_pool);
 
 /**
+ * @defgroup Standard priority classes for #svn_cache__create_membuffer_cache.
+ * @{
+ */
+
+/**
+ * Data in this priority class should not be removed from the cache unless
+ * absolutely necessary.  Use of this should be very restricted.
+ */
+#define SVN_CACHE__MEMBUFFER_HIGH_PRIORITY   10000
+
+/**
+ * Data in this priority class has a good chance to remain in cache unless
+ * there is more data in this class than the cache's capcity.  Use of this
+ * as the default for all information that is costly to fetch from disk.
+ */
+#define SVN_CACHE__MEMBUFFER_DEFAULT_PRIORITY 1000
+
+/**
+ * Data in this priority class will be removed as soon as the cache starts
+ * filling up.  Use of this for ephemeral data that can easisly be acquired
+ * again from other sources.
+ */
+#define SVN_CACHE__MEMBUFFER_LOW_PRIORITY      100
+
+/** @} */
+
+/**
  * Creates a new cache in @a *cache_p, storing the data in a potentially
  * shared @a membuffer object.  The elements in the cache will be indexed
  * by keys of length @a klen, which may be APR_HASH_KEY_STRING if they
@@ -312,7 +339,9 @@ svn_cache__membuffer_cache_create(svn_me
  * serialize_func and deserialized using @a deserialize_func.  Because
  * the same memcache object may cache many different kinds of values
  * form multiple caches, @a prefix should be specified to differentiate
- * this cache from other caches.  @a *cache_p will be allocated in @a result_pool.
+ * this cache from other caches.  All entries written through this cache
+ * interface will be assigned into the given @a priority class.  @a *cache_p
+ * will be allocated in @a result_pool.
  *
  * If @a deserialize_func is NULL, then the data is returned as an
  * svn_string_t; if @a serialize_func is NULL, then the data is
@@ -331,6 +360,7 @@ svn_cache__create_membuffer_cache(svn_ca
                                   svn_cache__deserialize_func_t deserialize,
                                   apr_ssize_t klen,
                                   const char *prefix,
+                                  apr_uint32_t priority,
                                   svn_boolean_t thread_safe,
                                   apr_pool_t *result_pool);
 
@@ -377,6 +407,18 @@ svn_cache__get(void **value,
                apr_pool_t *result_pool);
 
 /**
+ * Looks for an entry indexed by @a key in @a cache,  setting @a *found
+ * to TRUE if an entry has been found and FALSE otherwise.  @a key may be
+ * NULL in which case @a *found will be FALSE.  Temporary allocations will
+ * be made from @a scratch_pool.
+ */
+svn_error_t *
+svn_cache__has_key(svn_boolean_t *found,
+                   svn_cache__t *cache,
+                   const void *key,
+                   apr_pool_t *scratch_pool);
+
+/**
  * Stores the value @a value under the key @a key in @a cache.  Uses @a
  * scratch_pool for temporary allocations.  The cache makes copies of
  * @a key and @a value if necessary (that is, @a key and @a value may

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_client_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_client_private.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_client_private.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_client_private.h Wed Nov 27 11:52:35 2013
@@ -283,6 +283,11 @@ svn_client__copy_foreign(const char *url
  * The keys for the subtree mergeinfo are the repository root-relative
  * paths of TARGET_PATH_OR_URL and/or its subtrees, regardless of whether
  * TARGET_PATH_OR_URL is a URL or WC path.
+ *
+ * If RA_SESSION is not NULL, use it to obtain merge information instead of
+ * opening a new session. The session might be reparented after usage, so
+ * callers should reparent the session back to their original location if
+ * needed.
  */
 svn_error_t *
 svn_client__mergeinfo_log(svn_boolean_t finding_merged,
@@ -299,6 +304,7 @@ svn_client__mergeinfo_log(svn_boolean_t 
                           svn_depth_t depth,
                           const apr_array_header_t *revprops,
                           svn_client_ctx_t *ctx,
+                          svn_ra_session_t *ra_session,
                           apr_pool_t *result_pool,
                           apr_pool_t *scratch_pool);
 

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_delta_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_delta_private.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_delta_private.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_delta_private.h Wed Nov 27 11:52:35 2013
@@ -101,26 +101,6 @@ svn_delta__delta_from_editor(const svn_d
                              struct svn_delta__extra_baton *exb,
                              apr_pool_t *pool);
 
-/**
- * Get the data from IN, compress it according to the specified
- * COMPRESSION_LEVEL and write the result to OUT.
- * SVN_DELTA_COMPRESSION_LEVEL_NONE is valid for COMPRESSION_LEVEL.
- */
-svn_error_t *
-svn__compress(svn_string_t *in,
-              svn_stringbuf_t *out,
-              int compression_level);
-
-/**
- * Get the compressed data from IN, decompress it and write the result to
- * OUT.  Return an error if the decompressed size is larger than LIMIT.
- */
-svn_error_t *
-svn__decompress(svn_string_t *in,
-                svn_stringbuf_t *out,
-                apr_size_t limit);
-
-
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_dep_compat.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_dep_compat.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_dep_compat.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_dep_compat.h Wed Nov 27 11:52:35 2013
@@ -115,6 +115,19 @@ typedef apr_uint32_t apr_uintptr_t;
 #endif
 
 /**
+ * APR keeps a few interesting defines hidden away in its private
+ * headers apr_arch_file_io.h, so we redefined them here.
+ *
+ * @since New in 1.9
+ */
+#ifndef APR_FREADONLY
+#define APR_FREADONLY 0x10000000
+#endif
+#ifndef APR_OPENINFO
+#define APR_OPENINFO  0x00100000
+#endif
+
+/**
  * Check at compile time if the Serf version is at least a certain
  * level.
  * @param major The major version component of the version checked

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_diff_tree.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_diff_tree.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_diff_tree.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_diff_tree.h Wed Nov 27 11:52:35 2013
@@ -20,13 +20,13 @@
  * ====================================================================
  * @endcopyright
  *
- * @file svn_wc.h
+ * @file svn_diff_tree.h
  * @brief Generic diff handler. Replacing the old svn_wc_diff_callbacks4_t
  * infrastructure
  */
 
-#ifndef SVN_DIFF_PROCESSOR_H
-#define SVN_DIFF_PROCESSOR_H
+#ifndef SVN_DIFF_TREE_H
+#define SVN_DIFF_TREE_H
 
 #include "svn_types.h"
 
@@ -353,5 +353,5 @@ svn_diff__source_create(svn_revnum_t rev
 }
 #endif /* __cplusplus */
 
-#endif  /* SVN_DIFF_PROCESSOR_H */
+#endif  /* SVN_DIFF_TREE_H */
 

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_editor.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_editor.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_editor.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_editor.h Wed Nov 27 11:52:35 2013
@@ -270,7 +270,6 @@ svn_delta_shim_callbacks_default(apr_poo
  *      svn_editor_setcb_delete() \n
  *      svn_editor_setcb_copy() \n
  *      svn_editor_setcb_move() \n
- *      svn_editor_setcb_rotate() \n
  *      svn_editor_setcb_complete() \n
  *      svn_editor_setcb_abort()
  *
@@ -293,7 +292,6 @@ svn_delta_shim_callbacks_default(apr_poo
  *      svn_editor_delete() \n
  *      svn_editor_copy() \n
  *      svn_editor_move() \n
- *      svn_editor_rotate()
  *    \n\n
  *    Just before each callback invocation is carried out, the @a cancel_func
  *    that was passed to svn_editor_create() is invoked to poll any
@@ -325,7 +323,7 @@ svn_delta_shim_callbacks_default(apr_poo
  * In order to reduce complexity of callback receivers, the editor callbacks
  * must be driven in adherence to these rules:
  *
- * - If any path is added (with add_*) or deleted/moved/rotated, then
+ * - If any path is added (with add_*) or deleted/moved, then
  *   an svn_editor_alter_directory() call must be made for its parent
  *   directory with the target/eventual set of children.
  *
@@ -344,15 +342,13 @@ svn_delta_shim_callbacks_default(apr_poo
  *   its children, if a directory) may be copied many times, and are
  *   otherwise subject to the Once Rule. The destination path of a copy
  *   or move may have alter_* operations applied, but not add_* or delete.
- *   If the destination path of a copy, move, or rotate is a directory,
+ *   If the destination path of a copy or move is a directory,
  *   then its children are subject to the Once Rule. The source path of
  *   a move (and its child paths) may be referenced in add_*, or as the
  *   destination of a copy (where these new or copied nodes are subject
- *   to the Once Rule). Paths listed in a rotation are both sources and
- *   destinations, so they may not be referenced again in an add_* or a
- *   deletion; these paths may have alter_* operations applied.
+ *   to the Once Rule).
  *
- * - The ancestor of an added, copied-here, moved-here, rotated, or
+ * - The ancestor of an added, copied-here, moved-here, or
  *   modified node may not be deleted. The ancestor may not be moved
  *   (instead: perform the move, *then* the edits).
  *
@@ -375,10 +371,6 @@ svn_delta_shim_callbacks_default(apr_poo
  *   by a delete... that is fine. It is simply that svn_editor_move()
  *   should be used to describe a semantic move.
  *
- * - Paths mentioned in svn_editor_rotate() may have their properties
- *   and contents edited (via alter_* calls) by a previous or later call,
- *   but they may not be subject to a later move, rotate, or deletion.
- *
  * - One of svn_editor_complete() or svn_editor_abort() must be called
  *   exactly once, which must be the final call the driver invokes.
  *   Invoking svn_editor_complete() must imply that the set of changes has
@@ -620,15 +612,6 @@ typedef svn_error_t *(*svn_editor_cb_mov
   svn_revnum_t replaces_rev,
   apr_pool_t *scratch_pool);
 
-/** @see svn_editor_rotate(), svn_editor_t.
- * @since New in 1.8.
- */
-typedef svn_error_t *(*svn_editor_cb_rotate_t)(
-  void *baton,
-  const apr_array_header_t *relpaths,
-  const apr_array_header_t *revisions,
-  apr_pool_t *scratch_pool);
-
 /** @see svn_editor_complete(), svn_editor_t.
  * @since New in 1.8.
  */
@@ -790,17 +773,6 @@ svn_editor_setcb_move(svn_editor_t *edit
                       svn_editor_cb_move_t callback,
                       apr_pool_t *scratch_pool);
 
-/** Sets the #svn_editor_cb_rotate_t callback in @a editor
- * to @a callback.
- * @a scratch_pool is used for temporary allocations (if any).
- * @see also svn_editor_setcb_many().
- * @since New in 1.8.
- */
-svn_error_t *
-svn_editor_setcb_rotate(svn_editor_t *editor,
-                        svn_editor_cb_rotate_t callback,
-                        apr_pool_t *scratch_pool);
-
 /** Sets the #svn_editor_cb_complete_t callback in @a editor
  * to @a callback.
  * @a scratch_pool is used for temporary allocations (if any).
@@ -841,7 +813,6 @@ typedef struct svn_editor_cb_many_t
   svn_editor_cb_delete_t cb_delete;
   svn_editor_cb_copy_t cb_copy;
   svn_editor_cb_move_t cb_move;
-  svn_editor_cb_rotate_t cb_rotate;
   svn_editor_cb_complete_t cb_complete;
   svn_editor_cb_abort_t cb_abort;
 
@@ -1093,7 +1064,7 @@ svn_editor_copy(svn_editor_t *editor,
  * expect to find this node.  That is, @a src_relpath at the start of
  * the whole edit and @a src_relpath at @a src_revision must lie within
  * the same node-rev (aka history-segment).  This is just like the
- * revisions specified to svn_editor_delete() and svn_editor_rotate().
+ * revisions specified to svn_editor_delete().
  *
  * For a description of @a replaces_rev, see svn_editor_add_file().
  *
@@ -1110,36 +1081,6 @@ svn_editor_move(svn_editor_t *editor,
                 const char *dst_relpath,
                 svn_revnum_t replaces_rev);
 
-/** Drive @a editor's #svn_editor_cb_rotate_t callback.
- *
- * Perform a rotation among multiple nodes in the target tree.
- *
- * The @a relpaths and @a revisions arrays (pair-wise) specify nodes in the
- * tree which are located at a path and expected to be at a specific
- * revision. These nodes are simultaneously moved in a rotation pattern.
- * For example, the node at index 0 of @a relpaths and @a revisions will
- * be moved to the relpath specified at index 1 of @a relpaths. The node
- * at index 1 will be moved to the location at index 2. The node at index
- * N-1 will be moved to the relpath specified at index 0.
- *
- * The simplest form of this operation is to swap nodes A and B. One may
- * think to move A to a temporary location T, then move B to A, then move
- * T to B. However, this last move violations the Once Rule by moving T
- * (which had already by edited by the move from A). In order to keep the
- * restrictions against multiple moves of a single node, the rotation
- * operation is needed for certain types of tree edits.
- *
- * ### what happens if one of the paths of the rotation is not "within" the
- * ### receiver's set of paths?
- *
- * For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.8.
- */
-svn_error_t *
-svn_editor_rotate(svn_editor_t *editor,
-                  const apr_array_header_t *relpaths,
-                  const apr_array_header_t *revisions);
-
 /** Drive @a editor's #svn_editor_cb_complete_t callback.
  *
  * Send word that the edit has been completed successfully.

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_ra_svn_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_ra_svn_private.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_ra_svn_private.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_ra_svn_private.h Wed Nov 27 11:52:35 2013
@@ -43,6 +43,12 @@ svn_ra_svn__set_shim_callbacks(svn_ra_sv
                                svn_delta_shim_callbacks_t *shim_callbacks);
 
 /**
+ * Return the memory pool used to allocate @a conn.
+ */
+apr_pool_t *
+svn_ra_svn__get_pool(svn_ra_svn_conn_t *conn);
+
+/**
  * @defgroup ra_svn_deprecated ra_svn low-level functions
  * @{
  */
@@ -250,6 +256,33 @@ svn_ra_svn__read_cmd_response(svn_ra_svn
                               apr_pool_t *pool,
                               const char *fmt, ...);
 
+/** Check the receive buffer and socket of @a conn whether there is some
+ * unprocessed incomming data without waiting for new data to come in.
+ * If data is found, set @a *has_command to TRUE.  If the connection does
+ * not contain any more data and has been closed, set @a *terminated to
+ * TRUE.
+ */
+svn_error_t *
+svn_ra_svn__has_command(svn_boolean_t *has_command,
+                        svn_boolean_t *terminated,
+                        svn_ra_svn_conn_t *conn,
+                        apr_pool_t *pool);
+
+/** Accept a single command from @a conn and handle them according
+ * to @a cmd_hash.  Command handlers will be passed @a conn, @a pool,
+ * the parameters of the command, and @a baton.  @a *terminate will be
+ * set if either @a error_on_disconnect is FALSE and the connection got
+ * closed, or if the command being handled has the "terminate" flag set
+ * in the command table.
+ */
+svn_error_t *
+svn_ra_svn__handle_command(svn_boolean_t *terminate,
+                           apr_hash_t *cmd_hash,
+                           void *baton,
+                           svn_ra_svn_conn_t *conn,
+                           svn_boolean_t error_on_disconnect,
+                           apr_pool_t *pool);
+
 /** Accept commands over the network and handle them according to @a
  * commands.  Command handlers will be passed @a conn, a subpool of @a
  * pool (cleared after each command is handled), the parameters of the
@@ -875,7 +908,7 @@ svn_ra_svn__write_data_log_entry(svn_ra_
                                  const svn_string_t *message,
                                  svn_boolean_t has_children,
                                  svn_boolean_t invalid_revnum,
-                                 int revprop_count);
+                                 unsigned revprop_count);
 
 /**
  * @}

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_repos_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_repos_private.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_repos_private.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_repos_private.h Wed Nov 27 11:52:35 2013
@@ -32,6 +32,9 @@
 #include "svn_types.h"
 #include "svn_repos.h"
 #include "svn_editor.h"
+#include "svn_config.h"
+
+#include "private/svn_string_private.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -124,6 +127,178 @@ svn_repos__replay_ev2(svn_fs_root_t *roo
                       void *authz_read_baton,
                       apr_pool_t *scratch_pool);
 
+/* Given a PATH which might be a relative repo URL (^/), an absolute
+ * local repo URL (file://), an absolute path outside of the repo
+ * or a location in the Windows registry.
+ *
+ * Retrieve the configuration data that PATH points at and parse it into
+ * CFG_P allocated in POOL.
+ *
+ * If PATH cannot be parsed as a config file then an error is returned.  The
+ * contents of CFG_P is then undefined.  If MUST_EXIST is TRUE, a missing
+ * authz file is also an error.  The CASE_SENSITIVE controls the lookup
+ * behavior for section and option names alike.
+ *
+ * REPOS_ROOT points at the root of the repos you are
+ * going to apply the authz against, can be NULL if you are sure that you
+ * don't have a repos relative URL in PATH. */
+svn_error_t *
+svn_repos__retrieve_config(svn_config_t **cfg_p,
+                           const char *path,
+                           svn_boolean_t must_exist,
+                           svn_boolean_t case_sensitive,
+                           apr_pool_t *pool);
+
+/**
+ * @defgroup svn_config_pool Configuration object pool API
+ * @{
+ */
+
+/* Opaque thread-safe factory and container for configuration objects.
+ *
+ * Instances handed out are read-only and may be given to multiple callers
+ * from multiple threads.  Configuration objects no longer referenced by
+ * any user may linger for a while before being cleaned up.
+ */
+typedef struct svn_repos__config_pool_t svn_repos__config_pool_t;
+
+/* Create a new configuration pool object with a minimum lifetime determined
+ * by POOL and return it in *CONFIG_POOL.  References to any configuration
+ * in the *CONFIG_POOL will keep the latter alive beyond POOL cleanup.
+ * The THREAD_SAFE flag indicates whether the pool actually needs to be
+ * thread-safe.
+ */
+svn_error_t *
+svn_repos__config_pool_create(svn_repos__config_pool_t **config_pool,
+                              svn_boolean_t thread_safe,
+                              apr_pool_t *pool);
+
+/* Set *CFG to a read-only reference to the current contents of the
+ * configuration specified by PATH.  If the latter is a URL, we read the
+ * data from a local repository.  CONFIG_POOL will store the configuration
+ * and make further callers use the same instance if the content matches.
+ * If KEY is not NULL, *KEY will be set to a unique ID - if available.
+ *
+ * If MUST_EXIST is TRUE, a missing config file is also an error, *CFG
+ * is otherwise simply NULL.  The CASE_SENSITIVE controls the lookup
+ * behavior for section and option names alike.
+ *
+ * PREFERRED_REPOS is only used if it is not NULL and PATH is a URL.
+ * If it matches the URL, access the repository through this object
+ * instead of creating a new repo instance.  Note that this might not
+ * return the latest content.
+ *
+ * POOL determines the minimum lifetime of *CFG.
+ */
+svn_error_t *
+svn_repos__config_pool_get(svn_config_t **cfg,
+                           svn_membuf_t **key,
+                           svn_repos__config_pool_t *config_pool,
+                           const char *path,
+                           svn_boolean_t must_exist,
+                           svn_boolean_t case_sensitive,
+                           svn_repos_t *preferred_repos,
+                           apr_pool_t *pool);
+
+/** @} */
+
+/**
+ * @defgroup svn_authz_pool Authz object pool API
+ * @{
+ */
+
+/* Opaque thread-safe factory and container for authorization objects.
+ *
+ * Instances handed out are read-only and may be given to multiple callers
+ * from multiple threads.  Authorization objects no longer referenced by
+ * any user may linger for a while before being cleaned up.
+ */
+typedef struct svn_repos__authz_pool_t svn_repos__authz_pool_t;
+
+/* Create a new authorization pool object with a minimum lifetime determined
+ * by POOL and return it in *AUTHZ_POOL.  CONFIG_POOL will be the common
+ * source for the configuration data underlying the authz objects.
+ * The THREAD_SAFE flag indicates whether the pool actually needs to be
+ * thread-safe.
+ * 
+ * References to any authorization object in the *AUTHZ_POOL will keep the
+ * latter alive beyond POOL cleanup.
+ */
+svn_error_t *
+svn_repos__authz_pool_create(svn_repos__authz_pool_t **authz_pool,
+                             svn_repos__config_pool_t *config_pool,
+                             svn_boolean_t thread_safe,
+                             apr_pool_t *pool);
+
+/* Set *AUTHZ_P to a read-only reference to the current contents of the
+ * authorization specified by PATH and GROUPS_PATH.  If these are URLs,
+ * we read the data from a local repository (see #svn_repos_authz_read2).
+ * AUTHZ_POOL will store the authz data and make further callers use the
+ * same instance if the content matches.
+ *
+ * If MUST_EXIST is TRUE, a missing config file is also an error, *AUTHZ_P
+ * is otherwise simply NULL.
+ *
+ * PREFERRED_REPOS is only used if it is not NULL and PATH is a URL.
+ * If it matches the URL, access the repository through this object
+ * instead of creating a new repo instance.  Note that this might not
+ * return the latest content.
+ *
+ * POOL determines the minimum lifetime of *AUTHZ_P.
+ */
+svn_error_t *
+svn_repos__authz_pool_get(svn_authz_t **authz_p,
+                          svn_repos__authz_pool_t *authz_pool,
+                          const char *path,
+                          const char *groups_path,
+                          svn_boolean_t must_exist,
+                          svn_repos_t *preferred_repos,
+                          apr_pool_t *pool);
+
+/** @} */
+
+/**
+ * @defgroup svn_repos_pool svn_repos_t object pool API
+ * @{
+ */
+
+/* Opaque thread-safe factory and container for svn_repos_t objects.
+ */
+typedef struct svn_repos__repos_pool_t svn_repos__repos_pool_t;
+
+/* Create a new repository pool object with a minimum lifetime determined
+ * by POOL and return it in *REPOS_POOL.  All repositories share the same
+ * FS_CONFIG configuration which may be NULL.  The THREAD_SAFE flag
+ * indicates whether the pool actually needs to be thread-safe.
+ *
+ * References to any repository instances in *REPOS_POOL will keep the
+ * latter alive beyond POOL cleanup.
+ */
+svn_error_t *
+svn_repos__repos_pool_create(svn_repos__repos_pool_t **repos_pool,
+                             apr_hash_t *fs_config,
+                             svn_boolean_t thread_safe,
+                             apr_pool_t *pool);
+
+/* Set *REPOS_P to an open repository object for the repository at local
+ * path REPOS_ROOT.  If UUID is given, the repository's UUID must match it;
+ * otherwise we re-read from disk.
+ *
+ * Once POOL gets cleared or destroyed, REPOS_POOL will store the repository
+ * instance and make further callers may return that same instance.  POOL
+ * determines the minimum lifetime of *REPOS_P.
+ *
+ * Note that you may need to update the youngest revision info cached
+ * inside *REPOS_P. 
+ */
+svn_error_t *
+svn_repos__repos_pool_get(svn_repos_t **repos_p,
+                          svn_repos__repos_pool_t *repos_pool,
+                          const char *repos_root,
+                          const char *uuid,
+                          apr_pool_t *pool);
+
+/** @} */
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_sqlite.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_sqlite.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_sqlite.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_sqlite.h Wed Nov 27 11:52:35 2013
@@ -372,6 +372,9 @@ svn_sqlite__result_null(svn_sqlite__cont
 void
 svn_sqlite__result_int64(svn_sqlite__context_t *sctx, apr_int64_t val);
 
+void
+svn_sqlite__result_error(svn_sqlite__context_t *sctx, const char *msg, int num);
+
 
 /* --------------------------------------------------------------------- */
 
@@ -484,6 +487,32 @@ svn_sqlite__with_immediate_transaction(s
     SVN_ERR(svn_sqlite__finish_savepoint(svn_sqlite__db, svn_sqlite__err));   \
   } while (0)
 
+/* Evaluate the expression EXPR1..EXPR4 within a 'savepoint'.  Savepoints can
+ * be nested.
+ *
+ * Begin a savepoint in DB; evaluate the expression EXPR1, which would
+ * typically be a function call that does some work in DB; if no error occurred,
+ * run EXPR2; if no error occurred EXPR3; ... and finally release
+ * the savepoint if EXPR evaluated to SVN_NO_ERROR, otherwise roll back
+ * to the savepoint and then release it.
+ */
+#define SVN_SQLITE__WITH_LOCK4(expr1, expr2, expr3, expr4, db)                \
+  do {                                                                        \
+    svn_sqlite__db_t *svn_sqlite__db = (db);                                  \
+    svn_error_t *svn_sqlite__err;                                             \
+                                                                              \
+    SVN_ERR(svn_sqlite__begin_savepoint(svn_sqlite__db));                     \
+    svn_sqlite__err = (expr1);                                                \
+    if (!svn_sqlite__err)                                                     \
+      svn_sqlite__err = (expr2);                                              \
+    if (!svn_sqlite__err)                                                     \
+      svn_sqlite__err = (expr3);                                              \
+    if (!svn_sqlite__err)                                                     \
+      svn_sqlite__err = (expr4);                                              \
+    SVN_ERR(svn_sqlite__finish_savepoint(svn_sqlite__db, svn_sqlite__err));   \
+  } while (0)
+
+
 /* Helper function to handle several SQLite operations inside a shared lock.
    This callback is similar to svn_sqlite__with_transaction(), but can be
    nested (even with a transaction).

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_string_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_string_private.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_string_private.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_string_private.h Wed Nov 27 11:52:35 2013
@@ -175,6 +175,32 @@ svn__ui64toa_sep(apr_uint64_t number, ch
 char *
 svn__i64toa_sep(apr_int64_t number, char seperator, apr_pool_t *pool);
 
+
+/** Writes the @a number as base36-encoded string into @a dest. The latter
+ * must provide space for at least #SVN_INT64_BUFFER_SIZE characters.
+ * Returns the number chars written excluding the terminating NUL.
+ *
+ * @note The actual maximum buffer requirement is much shorter than
+ * #SVN_INT64_BUFFER_SIZE but introducing yet another constant is only
+ * marginally useful and may open the door to security issues when e.g.
+ * switching between base10 and base36 encoding.
+ */
+apr_size_t
+svn__ui64tobase36(char *dest, apr_uint64_t number);
+
+/** Returns the value of the base36 encoded unsigned integer starting at
+ * @a source.  If @a next is not NULL, @a *next will be set to the first
+ * position after the integer.
+ *
+ * The data in @a source will be considered part of the number to parse
+ * as long as the characters are within the base36 range.  If there are
+ * no such characters to begin with, 0 is returned.  Inputs with more than
+ * #SVN_INT64_BUFFER_SIZE digits will not be fully parsed, i.e. the value
+ * of @a *next as well as the return value are undefined.
+ */
+apr_uint64_t
+svn__base36toui64(const char **next, const char *source);
+
 /**
  * Computes the similarity score of STRA and STRB. Returns the ratio
  * of the length of their longest common subsequence and the average
@@ -218,6 +244,76 @@ svn_string__similarity(const svn_string_
                        svn_membuf_t *buffer, apr_size_t *rlcs);
 
 
+/* Return the lowest position at which A and B differ. If no difference
+ * can be found in the first MAX_LEN characters, MAX_LEN will be returned.
+ */
+apr_size_t
+svn_cstring__match_length(const char *a,
+                          const char *b,
+                          apr_size_t max_len);
+
+/* Return the number of bytes before A and B that don't differ.  If no
+ * difference can be found in the first MAX_LEN characters,  MAX_LEN will
+ * be returned.  Please note that A-MAX_LEN and B-MAX_LEN must both be
+ * valid addresses.
+ */
+apr_size_t
+svn_cstring__reverse_match_length(const char *a,
+                                  const char *b,
+                                  apr_size_t max_len);
+
+/** @} */
+
+/** Prefix trees.
+ *
+ * Prefix trees allow for a space-efficient representation of a set of path-
+ * like strings, i.e. those that share common prefixes.  Any given string
+ * value will be stored only once, i.e. two strings stored in the same tree
+ * are equal if and only if the point to the same #svn_prefix_string__t.
+ *
+ * @defgroup svn_prefix_string Strings in prefix trees.
+* @{
+ */
+
+/**
+ * Opaque data type for prefix-tree-based strings.
+ */
+typedef struct svn_prefix_string__t svn_prefix_string__t;
+
+/**
+ * Opaque data type representing a prefix tree
+ */
+typedef struct svn_prefix_tree__t svn_prefix_tree__t;
+
+/**
+ * Return a new prefix tree allocated in @a pool.
+ */
+svn_prefix_tree__t *
+svn_prefix_tree__create(apr_pool_t *pool);
+
+/**
+ * Return a string with the value @a s stored in @a tree.  If no such string
+ * exists yet, add it automatically.
+ */
+svn_prefix_string__t *
+svn_prefix_string__create(svn_prefix_tree__t *tree,
+                          const char *s);
+
+/**
+ * Return the contents of @a s as a new string object allocated in @a pool.
+ */
+svn_string_t *
+svn_prefix_string__expand(const svn_prefix_string__t *s,
+                          apr_pool_t *pool);
+
+/**
+ * Compare the two strings @a lhs and @a rhs that must be part of the same
+ * tree.
+ */
+int
+svn_prefix_string__compare(const svn_prefix_string__t *lhs,
+                           const svn_prefix_string__t *rhs);
+
 /** @} */
 
 /** @} */

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_subr_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_subr_private.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_subr_private.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_subr_private.h Wed Nov 27 11:52:35 2013
@@ -26,6 +26,7 @@
 
 #include "svn_types.h"
 #include "svn_io.h"
+#include "svn_config.h"
 
 
 #ifdef __cplusplus
@@ -94,11 +95,32 @@ svn_spillbuf__create(apr_size_t blocksiz
                      apr_size_t maxsize,
                      apr_pool_t *result_pool);
 
+/* Create a spill buffer, with extra parameters.  */
+svn_spillbuf_t *
+svn_spillbuf__create_extended(apr_size_t blocksize,
+                              apr_size_t maxsize,
+                              svn_boolean_t delete_on_close,
+                              svn_boolean_t spill_all_contents,
+                              const char* dirpath,
+                              apr_pool_t *result_pool);
 
 /* Determine how much content is stored in the spill buffer.  */
 svn_filesize_t
 svn_spillbuf__get_size(const svn_spillbuf_t *buf);
 
+/* Determine how much content the spill buffer is caching in memory.  */
+svn_filesize_t
+svn_spillbuf__get_memory_size(const svn_spillbuf_t *buf);
+
+/* Retreive the name of the spill file. The returned value can be NULL
+   if the file has not been created yet. */
+const char *
+svn_spillbuf__get_filename(const svn_spillbuf_t *buf);
+
+/* Retreive the handle of the spill file. The returned value can be
+   NULL if the file has not been created yet. */
+apr_file_t *
+svn_spillbuf__get_file(const svn_spillbuf_t *buf);
 
 /* Write some data into the spill buffer.  */
 svn_error_t *
@@ -158,7 +180,6 @@ svn_spillbuf__reader_create(apr_size_t b
                             apr_size_t maxsize,
                             apr_pool_t *result_pool);
 
-
 /* Read @a len bytes from @a reader into @a data. The number of bytes
    actually read is stored in @a amt. If the content is exhausted, then
    @a amt is set to zero. It will always be non-zero if the spill-buffer
@@ -195,8 +216,7 @@ svn_spillbuf__reader_write(svn_spillbuf_
    but implements the same basic sematics of a spillbuf for the underlying
    storage. */
 svn_stream_t *
-svn_stream__from_spillbuf(apr_size_t blocksize,
-                          apr_size_t maxsize,
+svn_stream__from_spillbuf(svn_spillbuf_t *buf,
                           apr_pool_t *result_pool);
 
 /** @} */
@@ -333,6 +353,162 @@ svn_version__at_least(svn_version_t *ver
 
 /** @} */
 
+/**
+ * @defgroup svn_compress Data (de-)compression API
+ * @{
+ */
+
+/* This is at least as big as the largest size of an integer that
+   svn__encode_uint() can generate; it is sufficient for creating buffers
+   for it to write into.  This assumes that integers are at most 64 bits,
+   and so 10 bytes (with 7 bits of information each) are sufficient to
+   represent them. */
+#define SVN__MAX_ENCODED_UINT_LEN 10
+
+/* Compression method parameters for svn__encode_uint. */
+
+/* No compression (but a length prefix will still be added to the buffer) */
+#define SVN__COMPRESSION_NONE         0
+
+/* Fastest, least effective compression method & level provided by zlib. */
+#define SVN__COMPRESSION_ZLIB_MIN     1
+
+/* Default compression method & level provided by zlib. */
+#define SVN__COMPRESSION_ZLIB_DEFAULT 5
+
+/* Slowest, best compression method & level provided by zlib. */
+#define SVN__COMPRESSION_ZLIB_MAX     9
+
+/* Encode VAL into the buffer P using the variable-length 7b/8b unsigned
+   integer format.  Return the incremented value of P after the
+   encoded bytes have been written.  P must point to a buffer of size
+   at least SVN__MAX_ENCODED_UINT_LEN.
+
+   This encoding uses the high bit of each byte as a continuation bit
+   and the other seven bits as data bits.  High-order data bits are
+   encoded first, followed by lower-order bits, so the value can be
+   reconstructed by concatenating the data bits from left to right and
+   interpreting the result as a binary number.  Examples (brackets
+   denote byte boundaries, spaces are for clarity only):
+
+           1 encodes as [0 0000001]
+          33 encodes as [0 0100001]
+         129 encodes as [1 0000001] [0 0000001]
+        2000 encodes as [1 0001111] [0 1010000]
+*/
+unsigned char *
+svn__encode_uint(unsigned char *p, apr_uint64_t val);
+
+/* Decode an unsigned 7b/8b-encoded integer into *VAL and return a pointer
+   to the byte after the integer.  The bytes to be decoded live in the
+   range [P..END-1].  If these bytes do not contain a whole encoded
+   integer, return NULL; in this case *VAL is undefined.
+
+   See the comment for svn__encode_uint() earlier in this file for more
+   detail on the encoding format.  */
+const unsigned char *
+svn__decode_uint(apr_uint64_t *val,
+                 const unsigned char *p,
+                 const unsigned char *end);
+
+/* Get the data from IN, compress it according to the specified
+ * COMPRESSION_METHOD and write the result to OUT.
+ * SVN__COMPRESSION_NONE is valid for COMPRESSION_METHOD.
+ */
+svn_error_t *
+svn__compress(svn_stringbuf_t *in,
+              svn_stringbuf_t *out,
+              int compression_method);
+
+/* Get the compressed data from IN, decompress it and write the result to
+ * OUT.  Return an error if the decompressed size is larger than LIMIT.
+ */
+svn_error_t *
+svn__decompress(svn_stringbuf_t *in,
+                svn_stringbuf_t *out,
+                apr_size_t limit);
+
+/** @} */
+
+/**
+ * @defgroup svn_root_pools Recycle-able root pools API
+ * @{
+ */
+
+/* Opaque thread-safe container for unused / recylcleable root pools.
+ *
+ * Recyling root pools (actually, their allocators) circumvents a
+ * scalability bottleneck in the OS memory management when multi-threaded
+ * applications frequently create and destroy allocators.
+ */
+typedef struct svn_root_pools__t svn_root_pools__t;
+
+/* Create a new root pools container and return it in *POOLS.
+ */
+svn_error_t *
+svn_root_pools__create(svn_root_pools__t **pools);
+
+/* Return a currently unused pool from POOLS.  If POOLS is empty, create a
+ * new root pool and return that.  The pool returned is not thread-safe.
+ */
+apr_pool_t *
+svn_root_pools__acquire_pool(svn_root_pools__t *pools);
+
+/* Clear and release the given root POOL and put it back into POOLS.
+ * If that fails, destroy POOL.
+ */
+void
+svn_root_pools__release_pool(apr_pool_t *pool,
+                             svn_root_pools__t *pools);
+
+/** @} */
+
+/**
+ * @defgroup svn_config_private Private configuration handling API
+ * @{
+ */
+
+/* Future attempts to modify CFG will trigger an assertion. */
+void
+svn_config__set_read_only(svn_config_t *cfg,
+                          apr_pool_t *scratch_pool);
+
+/* Return TRUE, if CFG cannot be modified. */
+svn_boolean_t
+svn_config__is_read_only(svn_config_t *cfg);
+
+/* Return TRUE, if OPTION in SECTION in CFG exists and does not require
+ * further expansion (due to either containing no placeholders or already
+ * having been expanded). */
+svn_boolean_t
+svn_config__is_expanded(svn_config_t *cfg,
+                        const char *section,
+                        const char *option);
+
+/* Return a shallow copy of SCR in POOL.  If SRC is read-only, different
+ * shallow copies may be used from different threads.
+ *
+ * Any single r/o svn_config_t or shallow copy is not thread-safe because
+ * it contains shared buffers for tempoary data.
+ */
+svn_config_t *
+svn_config__shallow_copy(svn_config_t *src,
+                         apr_pool_t *pool);
+
+/* Add / replace SECTION in TARGET with the same section from SOURCE by
+ * simply adding a reference to it.  If TARGET is read-only, the sections
+ * list in target gets duplicated before the modification.
+ *
+ * This is an API tailored for use by the svn_repos__authz_pool_t API to
+ * prevent breach of encapsulation.
+ */
+void
+svn_config__shallow_replace_section(svn_config_t *target,
+                                    svn_config_t *source,
+                                    const char *section);
+
+/** @} */
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_temp_serializer.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_temp_serializer.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_temp_serializer.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_temp_serializer.h Wed Nov 27 11:52:35 2013
@@ -143,6 +143,22 @@ void
 svn_temp_serializer__pop(svn_temp_serializer__context_t *context);
 
 /**
+ * Serialize a referenced sub-structure within the serialization
+ * @a context.  @a source_struct must be a reference to the
+ * pointer in the original parent structure so that the correspondence in
+ * the serialized structure can be established. @a struct_size must match
+ * the result of @c sizeof() of the actual structure.
+ *
+ * This function is equivalent but more efficient than calling
+ * #svn_temp_serializer__push() immediately followed by
+ * #svn_temp_serializer__pop().
+ */
+void
+svn_temp_serializer__add_leaf(svn_temp_serializer__context_t *context,
+                              const void * const * source_struct,
+                              apr_size_t struct_size);
+
+/**
  * Serialize a string referenced from the current structure within the
  * serialization @a context. @a s must be a reference to the @c char*
  * pointer in the original structure so that the correspondence in the

Modified: subversion/branches/verify-keep-going/subversion/include/private/svn_utf_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/private/svn_utf_private.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/private/svn_utf_private.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/private/svn_utf_private.h Wed Nov 27 11:52:35 2013
@@ -73,6 +73,18 @@ svn_utf__last_valid(const char *src, apr
 const char *
 svn_utf__last_valid2(const char *src, apr_size_t len);
 
+/* Copy LENGTH bytes of SRC, converting characters as follows:
+    - Pass characters from the ASCII subset to the result
+    - Strip all combining marks from the string
+    - Represent other valid Unicode chars as {U+XXXX}
+    - Replace invalid Unicode chars with {U?XXXX}
+    - Represent chars that are not valid UTF-8 as ?\XX
+    - Replace codes outside the Unicode range with a sequence of ?\XX
+    - Represent the null byte as \0
+   Allocate the result in POOL. */
+const char *
+svn_utf__fuzzy_escape(const char *src, apr_size_t length, apr_pool_t *pool);
+
 const char *
 svn_utf__cstring_from_utf8_fuzzy(const char *src,
                                  apr_pool_t *pool,
@@ -81,6 +93,28 @@ svn_utf__cstring_from_utf8_fuzzy(const c
                                                const char *,
                                                apr_pool_t *));
 
+
+#if defined(WIN32)
+/* On Windows: Convert the UTF-8 string SRC to UTF-16.
+   If PREFIX is not NULL, prepend it to the converted result.
+   The result, if not empty, will be allocated in RESULT_POOL. */
+svn_error_t *
+svn_utf__win32_utf8_to_utf16(const WCHAR **result,
+                             const char *src,
+                             const WCHAR *prefix,
+                             apr_pool_t *result_pool);
+
+/* On Windows: Convert the UTF-16 string SRC to UTF-8.
+   If PREFIX is not NULL, prepend it to the converted result.
+   The result, if not empty, will be allocated in RESULT_POOL. */
+svn_error_t *
+svn_utf__win32_utf16_to_utf8(const char **result,
+                             const WCHAR *src,
+                             const char *prefix,
+                             apr_pool_t *result_pool);
+#endif /* WIN32*/
+
+
 /* A constant used for many length parameters in the utf8proc wrappers
  * to indicate that the length of a string is unknonw. */
 #define SVN_UTF__UNKNOWN_LENGTH ((apr_size_t) -1)
@@ -100,6 +134,30 @@ svn_utf__normcmp(int *result,
                  const char *str2, apr_size_t len2,
                  svn_membuf_t *buf1, svn_membuf_t *buf2);
 
+/* Normalize the UTF-8 string STR to form C, using BUF for temporary
+ * storage. If LEN is SVN_UTF__UNKNOWN_LENGTH, assume STR is
+ * null-terminated; otherwise, consider the string only up to the
+ * given length.
+ *
+ * Return the normalized string in *RESULT, which shares storage with
+ * BUF and is valid only until the next time BUF is modified.
+ *
+ * A returned error may indicate that STRING contains invalid UTF-8 or
+ * invalid Unicode codepoints.
+ */
+svn_error_t*
+svn_utf__normalize(const char **result,
+                   const char *str, apr_size_t len,
+                   svn_membuf_t *buf);
+
+/* Check if STRING is a valid, NFC-normalized UTF-8 string.  Note that
+ * a FALSE return value may indicate that STRING is not valid UTF-8 at
+ * all.
+ *
+ * Use SCRATCH_POOL for temporary allocations.
+ */
+svn_boolean_t
+svn_utf__is_normalized(const char *string, apr_pool_t *scratch_pool);
 
 /* Pattern matching similar to the the SQLite LIKE and GLOB
  * operators. PATTERN, KEY and ESCAPE must all point to UTF-8

Modified: subversion/branches/verify-keep-going/subversion/include/svn_auth.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/svn_auth.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/svn_auth.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/svn_auth.h Wed Nov 27 11:52:35 2013
@@ -884,7 +884,11 @@ svn_auth_get_platform_specific_client_pr
  * @note An administrative password reset may invalidate the account's
  * secret key. This function will detect that situation and behave as
  * if the password were not cached at all.
+ * @deprecated Provided for backwards compatibility with the 1.8 API.  Use 
+ * svn_auth_get_platform_specific_provider with provider_name of "windows"
+ * and provider_type of "simple".
  */
+SVN_DEPRECATED
 void
 svn_auth_get_windows_simple_provider(svn_auth_provider_object_t **provider,
                                      apr_pool_t *pool);
@@ -906,7 +910,11 @@ svn_auth_get_windows_simple_provider(svn
  * @note An administrative password reset may invalidate the account's
  * secret key. This function will detect that situation and behave as
  * if the password were not cached at all.
+ * @deprecated Provided for backwards compatibility with the 1.8 API.
+ * Use svn_auth_get_platform_specific_provider with provider_name
+ * of "windows" and provider_type of "ssl_client_cert_pw".
  */
+SVN_DEPRECATED
 void
 svn_auth_get_windows_ssl_client_cert_pw_provider(
   svn_auth_provider_object_t **provider,
@@ -923,7 +931,11 @@ svn_auth_get_windows_ssl_client_cert_pw_
  *
  * @since New in 1.5.
  * @note This function is only available on Windows.
+ * @deprecated Provided for backwards compatibility with the 1.8 API.
+ * Use svn_auth_get_platform_specific_provider with provider_name
+ * of "windows" and provider_type of "ssl_server_trust".
  */
+SVN_DEPRECATED
 void
 svn_auth_get_windows_ssl_server_trust_provider(
   svn_auth_provider_object_t **provider,
@@ -943,7 +955,11 @@ svn_auth_get_windows_ssl_server_trust_pr
  *
  * @since New in 1.4
  * @note This function is only available on Mac OS 10.2 and higher.
+ * @deprecated Provided for backwards compatibility with the 1.8 API.
+ * Use svn_auth_get_platform_specific_provider with provider_name
+ * of "keychain" and provider_type of "simple".
  */
+SVN_DEPRECATED
 void
 svn_auth_get_keychain_simple_provider(svn_auth_provider_object_t **provider,
                                       apr_pool_t *pool);
@@ -959,14 +975,21 @@ svn_auth_get_keychain_simple_provider(sv
  *
  * @since New in 1.6
  * @note This function is only available on Mac OS 10.2 and higher.
+ * @deprecated Provided for backwards compatibility with the 1.8 API.
+ * Use svn_auth_get_platform_specific_provider with provider_name
+ * of "keychain" and provider_type of "ssl_client_cert_pw".
  */
+SVN_DEPRECATED
 void
 svn_auth_get_keychain_ssl_client_cert_pw_provider(
   svn_auth_provider_object_t **provider,
   apr_pool_t *pool);
 #endif /* DARWIN || DOXYGEN */
 
-#if (!defined(DARWIN) && !defined(WIN32)) || defined(DOXYGEN)
+/* Note that the gnome keyring unlock prompt related items below must be
+ * declared for all platforms in order to allow SWIG interfaces to be
+ * used regardless of the platform. */
+
 /** A type of callback function for obtaining the GNOME Keyring password.
  *
  * In this callback, the client should ask the user for default keyring
@@ -996,7 +1019,7 @@ typedef svn_error_t *(*svn_auth_gnome_ke
  * @c *SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC. */
 #define SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON "gnome-keyring-unlock-prompt-baton"
 
-
+#if (!defined(DARWIN) && !defined(WIN32)) || defined(DOXYGEN)
 /**
  * Get libsvn_auth_gnome_keyring version information.
  *
@@ -1026,7 +1049,11 @@ svn_auth_gnome_keyring_version(void);
  * @since New in 1.6
  * @note This function actually works only on systems with
  * libsvn_auth_gnome_keyring and GNOME Keyring installed.
+ * @deprecated Provided for backwards compatibility with the 1.8 API.
+ * Use svn_auth_get_platform_specific_provider with provider_name
+ * of "gnome_keyring" and provider_type of "simple".
  */
+SVN_DEPRECATED
 void
 svn_auth_get_gnome_keyring_simple_provider(
   svn_auth_provider_object_t **provider,
@@ -1053,7 +1080,11 @@ svn_auth_get_gnome_keyring_simple_provid
  * @since New in 1.6
  * @note This function actually works only on systems with
  * libsvn_auth_gnome_keyring and GNOME Keyring installed.
+ * @deprecated Provided for backwards compatibility with the 1.8 API.
+ * Use svn_auth_get_platform_specific_provider with provider_name
+ * of "gnome_keyring" and provider_type of "ssl_client_cert_pw".
  */
+SVN_DEPRECATED
 void
 svn_auth_get_gnome_keyring_ssl_client_cert_pw_provider(
   svn_auth_provider_object_t **provider,
@@ -1081,7 +1112,11 @@ svn_auth_kwallet_version(void);
  * @since New in 1.6
  * @note This function actually works only on systems with libsvn_auth_kwallet
  * and KWallet installed.
+ * @deprecated Provided for backwards compatibility with the 1.8 API.
+ * Use svn_auth_get_platform_specific_provider with provider_name
+ * of "kwallet" and provider_type of "simple".
  */
+SVN_DEPRECATED
 void
 svn_auth_get_kwallet_simple_provider(svn_auth_provider_object_t **provider,
                                      apr_pool_t *pool);
@@ -1099,7 +1134,11 @@ svn_auth_get_kwallet_simple_provider(svn
  * @since New in 1.6
  * @note This function actually works only on systems with libsvn_auth_kwallet
  * and KWallet installed.
+ * @deprecated Provided for backwards compatibility with the 1.8 API.
+ * Use svn_auth_get_platform_specific_provider with provider_name
+ * of "kwallet" and provider_type of "ssl_client_cert_pw".
  */
+SVN_DEPRECATED
 void
 svn_auth_get_kwallet_ssl_client_cert_pw_provider(
   svn_auth_provider_object_t **provider,
@@ -1121,7 +1160,11 @@ svn_auth_get_kwallet_ssl_client_cert_pw_
  * @since New in 1.8
  * @note This function actually works only on systems with
  * GNU Privacy Guard installed.
+ * @deprecated Provided for backwards compatibility with the 1.8 API.
+ * Use svn_auth_get_platform_specific_provider with provider_name
+ * of "gpg_agent" and provider_type of "simple".
  */
+SVN_DEPRECATED
 void
 svn_auth_get_gpg_agent_simple_provider
     (svn_auth_provider_object_t **provider,