You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2014/07/18 23:28:45 UTC

svn commit: r1611811 - in /subversion/branches/svn-auth-x509: ./ build/ subversion/include/ subversion/libsvn_client/ subversion/libsvn_delta/ subversion/libsvn_diff/ subversion/libsvn_fs_base/bdb/ subversion/libsvn_fs_fs/ subversion/libsvn_fs_x/ subve...

Author: breser
Date: Fri Jul 18 21:28:44 2014
New Revision: 1611811

URL: http://svn.apache.org/r1611811
Log:
On svn-auth-x509 branch, do another catch up from trunk for r1603509 through r1611808.


Added:
    subversion/branches/svn-auth-x509/tools/dev/benchmarks/RepoPerf/
      - copied from r1611808, subversion/trunk/tools/dev/benchmarks/RepoPerf/
Modified:
    subversion/branches/svn-auth-x509/   (props changed)
    subversion/branches/svn-auth-x509/Makefile.in
    subversion/branches/svn-auth-x509/build/run_tests.py
    subversion/branches/svn-auth-x509/subversion/include/svn_repos.h
    subversion/branches/svn-auth-x509/subversion/libsvn_client/import.c
    subversion/branches/svn-auth-x509/subversion/libsvn_client/prop_commands.c
    subversion/branches/svn-auth-x509/subversion/libsvn_delta/xdelta.c
    subversion/branches/svn-auth-x509/subversion/libsvn_diff/binary_diff.c
    subversion/branches/svn-auth-x509/subversion/libsvn_diff/diff_file.c
    subversion/branches/svn-auth-x509/subversion/libsvn_diff/lcs.c
    subversion/branches/svn-auth-x509/subversion/libsvn_fs_base/bdb/strings-table.c
    subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/dag.c
    subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/rev_file.c
    subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/   (props changed)
    subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/dag.c
    subversion/branches/svn-auth-x509/subversion/libsvn_ra/ra_loader.c
    subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/commit.c
    subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/serf.c
    subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/update.c
    subversion/branches/svn-auth-x509/subversion/libsvn_ra_svn/client.c
    subversion/branches/svn-auth-x509/subversion/libsvn_subr/cache-membuffer.c
    subversion/branches/svn-auth-x509/subversion/libsvn_subr/named_atomic.c
    subversion/branches/svn-auth-x509/subversion/libsvn_subr/utf_width.c
    subversion/branches/svn-auth-x509/subversion/libsvn_wc/questions.c
    subversion/branches/svn-auth-x509/subversion/libsvn_wc/wc_db_pristine.c
    subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/update.c
    subversion/branches/svn-auth-x509/subversion/svn/merge-cmd.c
    subversion/branches/svn-auth-x509/subversion/svn/notify.c
    subversion/branches/svn-auth-x509/subversion/svn/propget-cmd.c
    subversion/branches/svn-auth-x509/subversion/svn/svn.c
    subversion/branches/svn-auth-x509/subversion/svnadmin/svnadmin.c
    subversion/branches/svn-auth-x509/subversion/svnserve/serve.c
    subversion/branches/svn-auth-x509/subversion/tests/cmdline/atomic-ra-revprop-change.c
    subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnadmin_tests.py
    subversion/branches/svn-auth-x509/subversion/tests/cmdline/tree_conflict_tests.py
    subversion/branches/svn-auth-x509/subversion/tests/libsvn_repos/dump-load-test.c

Propchange: subversion/branches/svn-auth-x509/
------------------------------------------------------------------------------
  Merged /subversion/branches/move-tracking-2:r1607334
  Merged /subversion/trunk:r1606847-1611808

Modified: subversion/branches/svn-auth-x509/Makefile.in
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/Makefile.in?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/Makefile.in (original)
+++ subversion/branches/svn-auth-x509/Makefile.in Fri Jul 18 21:28:44 2014
@@ -525,6 +525,9 @@ check: bin @TRANSFORM_LIBTOOL_SCRIPTS@ $
 	  if test "$(BASE_URL)" != ""; then                                  \
 	    flags="--url $(BASE_URL) $$flags";                               \
 	  fi;                                                                \
+	  if test "$(SKIP_C_TESTS)" != ""; then                              \
+	    flags="--skip-c-tests $$flags";                                  \
+	  fi;                                                                \
 	  if test "$(FS_TYPE)" != ""; then                                   \
 	    flags="--fs-type $(FS_TYPE) $$flags";                            \
 	  fi;                                                                \

Modified: subversion/branches/svn-auth-x509/build/run_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/build/run_tests.py?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/build/run_tests.py (original)
+++ subversion/branches/svn-auth-x509/build/run_tests.py Fri Jul 18 21:28:44 2014
@@ -128,7 +128,7 @@ class TestHarness:
                milestone_filter=None, set_log_level=None, ssl_cert=None,
                http_proxy=None, http_proxy_username=None,
                http_proxy_password=None, exclusive_wc_locks=None,
-               memcached_server=None):
+               memcached_server=None, skip_c_tests=None):
     '''Construct a TestHarness instance.
 
     ABS_SRCDIR and ABS_BUILDDIR are the source and build directories.
@@ -189,6 +189,7 @@ class TestHarness:
     self.memcached_server = memcached_server
     if not sys.stdout.isatty() or sys.platform == 'win32':
       TextColors.disable()
+    self.skip_c_tests = (not not skip_c_tests)
 
   def run(self, list):
     '''Run all test programs given in LIST. Print a summary of results, if
@@ -196,6 +197,16 @@ class TestHarness:
     self._open_log('w')
     failed = 0
 
+    # Only run the C tests when testing ra_local
+    if self.skip_c_tests:
+      filtered_list = []
+      for cnt, prog in enumerate(list):
+        progpath, nums = self._split_nums(prog)
+        if not progpath.endswith('.py'):
+          continue
+        filtered_list.append(prog)
+      list = filtered_list
+
     for cnt, prog in enumerate(list):
       failed = self._run_test(prog, cnt, len(list)) or failed
 
@@ -578,6 +589,12 @@ class TestHarness:
 
     return failed
 
+  def _split_nums(self, prog):
+    test_nums = None
+    if '#' in prog:
+      prog, test_nums = prog.split('#')
+    return prog, test_nums
+
   def _run_test(self, prog, test_nr, total_tests):
     "Run a single test. Return the test's exit code."
 
@@ -586,10 +603,7 @@ class TestHarness:
     else:
       log = sys.stdout
 
-    test_nums = None
-    if '#' in prog:
-      prog, test_nums = prog.split('#')
-
+    prog, test_nums = self._split_nums(prog)
     progdir, progbase = os.path.split(prog)
     if self.log:
       # Using write here because we don't want even a trailing space
@@ -668,6 +682,7 @@ def main():
   try:
     opts, args = my_getopt(sys.argv[1:], 'u:f:vc',
                            ['url=', 'fs-type=', 'verbose', 'cleanup',
+                            'skip-c-tests', 'skip-C-tests',
                             'http-library=', 'server-minor-version=',
                             'fsfs-packing', 'fsfs-sharding=',
                             'enable-sasl', 'parallel=', 'config-file=',
@@ -683,13 +698,15 @@ def main():
     print(__doc__)
     sys.exit(2)
 
-  base_url, fs_type, verbose, cleanup, enable_sasl, http_library, \
-    server_minor_version, fsfs_sharding, fsfs_packing, parallel, \
-    config_file, log_to_stdout, list_tests, mode_filter, milestone_filter, \
-    set_log_level, ssl_cert, http_proxy, http_proxy_username, \
-    http_proxy_password, exclusive_wc_locks, memcached_server = \
-            None, None, None, None, None, None, None, None, None, None, None, \
-            None, None, None, None, None, None, None, None, None, None, None
+  base_url, fs_type, verbose, cleanup, skip_c_tests, enable_sasl, \
+    http_library, server_minor_version, fsfs_sharding, fsfs_packing, \
+    parallel, config_file, log_to_stdout, list_tests, mode_filter, \
+    milestone_filter, set_log_level, ssl_cert, http_proxy, \
+    http_proxy_username, http_proxy_password, exclusive_wc_locks, \
+    memcached_server = \
+            None, None, None, None, None, None, None, None, None, None, \
+            None, None, None, None, None, None, None, None, None, None, \
+            None, None, None
   for opt, val in opts:
     if opt in ['-u', '--url']:
       base_url = val
@@ -707,6 +724,8 @@ def main():
       verbose = 1
     elif opt in ['-c', '--cleanup']:
       cleanup = 1
+    elif opt in ['--skip-c-tests', '--skip-C-tests']:
+      skip_c_tests = 1
     elif opt in ['--enable-sasl']:
       enable_sasl = 1
     elif opt in ['--parallel']:
@@ -755,7 +774,8 @@ def main():
                    http_proxy_username=http_proxy_username,
                    http_proxy_password=http_proxy_password,
                    exclusive_wc_locks=exclusive_wc_locks,
-                   memcached_server=memcached_server)
+                   memcached_server=memcached_server,
+                   skip_c_tests=skip_c_tests)
 
   failed = th.run(args[2:])
   if failed:

Modified: subversion/branches/svn-auth-x509/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/include/svn_repos.h?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/include/svn_repos.h (original)
+++ subversion/branches/svn-auth-x509/subversion/include/svn_repos.h Fri Jul 18 21:28:44 2014
@@ -66,20 +66,12 @@ enum svn_node_action
   svn_node_action_replace
 };
 
-/** The different policies for processing the UUID in the dumpfile. */
-enum svn_repos_load_uuid
-{
-  /** only update uuid if the repos has no revisions. */
-  svn_repos_load_uuid_default,
-  /** never update uuid. */
-  svn_repos_load_uuid_ignore,
-  /** always update uuid. */
-  svn_repos_load_uuid_force
-};
-
 
-/** Callback type for checking authorization on paths produced by (at
- * least) svn_repos_dir_delta2().
+/** @defgroup svn_repos_authz_callbacks Repository authorization callbacks
+ * @{
+ */
+
+/** Callback type for checking authorization on a path.
  *
  * Set @a *allowed to TRUE to indicate that some operation is
  * authorized for @a path in @a root, or set it to FALSE to indicate
@@ -167,24 +159,13 @@ typedef svn_error_t *(*svn_repos_authz_c
    void *baton,
    apr_pool_t *pool);
 
-/**
- * Similar to #svn_file_rev_handler_t, but without the @a
- * result_of_merge parameter.
- *
- * @deprecated Provided for backward compatibility with 1.4 API.
- * @since New in 1.1.
+/** @} */
+
+
+/** @defgroup svn_repos_notifications Repository notifications
+ * @{
  */
-typedef svn_error_t *(*svn_repos_file_rev_handler_t)
-  (void *baton,
-   const char *path,
-   svn_revnum_t rev,
-   apr_hash_t *rev_props,
-   svn_txdelta_window_handler_t *delta_handler,
-   void **delta_baton,
-   apr_array_header_t *prop_diffs,
-   apr_pool_t *pool);
 
-
 /* Notification system. */
 
 /** The type of action occurring.
@@ -386,7 +367,9 @@ svn_repos_notify_t *
 svn_repos_notify_create(svn_repos_notify_action_t action,
                         apr_pool_t *result_pool);
 
-
+/** @} */
+
+
 /** The repository object. */
 typedef struct svn_repos_t svn_repos_t;
 
@@ -532,6 +515,11 @@ svn_error_t *
 svn_repos_delete(const char *path,
                  apr_pool_t *pool);
 
+
+/** @defgroup svn_repos_capabilities Repository capabilities
+ * @{
+ */
+
 /**
  * Set @a *has to TRUE if @a repos has @a capability (one of the
  * capabilities beginning with @c "SVN_REPOS_CAPABILITY_"), else set
@@ -568,7 +556,6 @@ svn_repos_capabilities(apr_hash_t **capa
                        svn_repos_t *repos,
                        apr_pool_t *result_pool,
                        apr_pool_t *scratch_pool);
-/** @} */
 
 /**
  * The capability of doing the right thing with merge-tracking
@@ -588,6 +575,31 @@ svn_repos_capabilities(apr_hash_t **capa
  * If you add a capability, update svn_repos_capabilities().
  */
 
+/** @} */
+
+
+/**
+ * Store in @a repos the client-reported capabilities @a capabilities,
+ * which must be allocated in memory at least as long-lived as @a repos.
+ *
+ * The elements of @a capabilities are 'const char *', a subset of
+ * the constants beginning with @c SVN_RA_CAPABILITY_.
+ * @a capabilities is not copied, so changing it later will affect
+ * what is remembered by @a repos.
+ *
+ * @note The capabilities are passed along to the start-commit hook;
+ * see that hook's template for details.
+ *
+ * @note As of Subversion 1.5, there are no error conditions defined,
+ * so this always returns SVN_NO_ERROR.  In future releases it may
+ * return error, however, so callers should check.
+ *
+ * @since New in 1.5.
+ */
+svn_error_t *
+svn_repos_remember_client_capabilities(svn_repos_t *repos,
+                                       const apr_array_header_t *capabilities);
+
 
 /** Return the filesystem associated with repository object @a repos. */
 svn_fs_t *
@@ -1788,16 +1800,6 @@ svn_repos_node_location_segments(svn_rep
                                  apr_pool_t *pool);
 
 
-/* ### other queries we can do someday --
-
-     * fetch the last revision created by <user>
-         (once usernames become revision properties!)
-     * fetch the last revision where <path> was modified
-
-*/
-
-
-
 /* ---------------------------------------------------------------*/
 
 /* Retrieving log messages. */
@@ -2046,6 +2048,23 @@ svn_repos_get_file_revs2(svn_repos_t *re
                          apr_pool_t *pool);
 
 /**
+ * Similar to #svn_file_rev_handler_t, but without the @a
+ * result_of_merge parameter.
+ *
+ * @deprecated Provided for backward compatibility with 1.4 API.
+ * @since New in 1.1.
+ */
+typedef svn_error_t *(*svn_repos_file_rev_handler_t)
+  (void *baton,
+   const char *path,
+   svn_revnum_t rev,
+   apr_hash_t *rev_props,
+   svn_txdelta_window_handler_t *delta_handler,
+   void **delta_baton,
+   apr_array_header_t *prop_diffs,
+   apr_pool_t *pool);
+
+/**
  * Similar to svn_repos_get_file_revs2(), with @a include_merged_revisions
  * set to FALSE.
  *
@@ -2311,6 +2330,12 @@ svn_repos_fs_get_locks(apr_hash_t **lock
 
 /** @} */
 
+/** @defgroup svn_repos_properties Versioned and Unversioned Properties
+ *
+ * Prop-changing and prop-reading wrappers for libsvn_fs routines.
+ * @{
+ */
+
 /**
  * Like svn_fs_change_rev_prop2(), but validate the name and value of the
  * property and invoke the @a repos's pre- and post-revprop-change hooks
@@ -2343,12 +2368,9 @@ svn_repos_fs_change_rev_prop4(svn_repos_
                               const char *name,
                               const svn_string_t *const *old_value_p,
                               const svn_string_t *new_value,
-                              svn_boolean_t
-                              use_pre_revprop_change_hook,
-                              svn_boolean_t
-                              use_post_revprop_change_hook,
-                              svn_repos_authz_func_t
-                              authz_read_func,
+                              svn_boolean_t use_pre_revprop_change_hook,
+                              svn_boolean_t use_post_revprop_change_hook,
+                              svn_repos_authz_func_t authz_read_func,
                               void *authz_read_baton,
                               apr_pool_t *pool);
 
@@ -2367,12 +2389,9 @@ svn_repos_fs_change_rev_prop3(svn_repos_
                               const char *author,
                               const char *name,
                               const svn_string_t *new_value,
-                              svn_boolean_t
-                              use_pre_revprop_change_hook,
-                              svn_boolean_t
-                              use_post_revprop_change_hook,
-                              svn_repos_authz_func_t
-                              authz_read_func,
+                              svn_boolean_t use_pre_revprop_change_hook,
+                              svn_boolean_t use_post_revprop_change_hook,
+                              svn_repos_authz_func_t authz_read_func,
                               void *authz_read_baton,
                               apr_pool_t *pool);
 
@@ -2390,8 +2409,7 @@ svn_repos_fs_change_rev_prop2(svn_repos_
                               const char *author,
                               const char *name,
                               const svn_string_t *new_value,
-                              svn_repos_authz_func_t
-                              authz_read_func,
+                              svn_repos_authz_func_t authz_read_func,
                               void *authz_read_baton,
                               apr_pool_t *pool);
 
@@ -2432,8 +2450,7 @@ svn_repos_fs_revision_prop(svn_string_t 
                            svn_repos_t *repos,
                            svn_revnum_t rev,
                            const char *propname,
-                           svn_repos_authz_func_t
-                           authz_read_func,
+                           svn_repos_authz_func_t authz_read_func,
                            void *authz_read_baton,
                            apr_pool_t *pool);
 
@@ -2458,21 +2475,10 @@ svn_error_t *
 svn_repos_fs_revision_proplist(apr_hash_t **table_p,
                                svn_repos_t *repos,
                                svn_revnum_t rev,
-                               svn_repos_authz_func_t
-                               authz_read_func,
+                               svn_repos_authz_func_t authz_read_func,
                                void *authz_read_baton,
                                apr_pool_t *pool);
 
-
-
-/* ---------------------------------------------------------------*/
-
-/* Prop-changing wrappers for libsvn_fs routines. */
-
-/* NOTE: svn_repos_fs_change_rev_prop() also exists, but is located
-   above with the hook-related functions. */
-
-
 /** Validating wrapper for svn_fs_change_node_prop() (which see for
  * argument descriptions).
  *
@@ -2481,9 +2487,9 @@ svn_repos_fs_revision_proplist(apr_hash_
  * @a value and return SVN_ERR_BAD_PROPERTY_VALUE if it is invalid for the
  * property.
  *
- * @note Currently, the only properties validated are the "svn:" properties
- * #SVN_PROP_REVISION_LOG and #SVN_PROP_REVISION_DATE. This may change
- * in future releases.
+ * @note Originally, the only properties validated were the "svn:" properties
+ * #SVN_PROP_REVISION_LOG and #SVN_PROP_REVISION_DATE. For the current
+ * validation rules see the private function svn_repos__validate_prop().
  */
 svn_error_t *
 svn_repos_fs_change_node_prop(svn_fs_root_t *root,
@@ -2492,6 +2498,36 @@ svn_repos_fs_change_node_prop(svn_fs_roo
                               const svn_string_t *value,
                               apr_pool_t *pool);
 
+/**
+ * Set @a *inherited_values to a depth-first ordered array of
+ * #svn_prop_inherited_item_t * structures (the path_or_url members of
+ * which are relative filesystem paths) representing the properties
+ * inherited by @a path in @a root.  If no properties are inherited,
+ * then set @a *inherited_values to an empty array.
+ *
+ * if @a propname is NULL then retrieve all explicit and/or inherited
+ * properties.  Otherwise retrieve only the properties named @a propname.
+ *
+ * If optional @a authz_read_func is non-NULL, then use this function
+ * (along with optional @a authz_read_baton) to check the readability
+ * of each parent path from which properties are inherited. Silently omit
+ * properties for unreadable parent paths.
+ *
+ * Allocate @a *inherited_props in @a result_pool.  Use @a scratch_pool for
+ * temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_repos_fs_get_inherited_props(apr_array_header_t **inherited_props,
+                                 svn_fs_root_t *root,
+                                 const char *path,
+                                 const char *propname,
+                                 svn_repos_authz_func_t authz_read_func,
+                                 void *authz_read_baton,
+                                 apr_pool_t *result_pool,
+                                 apr_pool_t *scratch_pool);
+
 /** Validating wrapper for svn_fs_change_txn_prop() (which see for
  * argument descriptions).  See svn_repos_fs_change_txn_props() for more
  * information.
@@ -2513,6 +2549,8 @@ svn_repos_fs_change_txn_props(svn_fs_txn
                               const apr_array_header_t *props,
                               apr_pool_t *pool);
 
+/** @} */
+
 
 /* ---------------------------------------------------------------*/
 
@@ -2629,7 +2667,7 @@ svn_repos_info_format(int *repos_format,
 /* ---------------------------------------------------------------*/
 
 /**
- * @defgroup svn_repos_dump_load Dumping and loading filesystem data
+ * @defgroup svn_repos_dump_load Dumping, loading and verifying filesystem data
  * @{
  *
  * The filesystem 'dump' format contains nothing but the abstract
@@ -2693,6 +2731,17 @@ svn_repos_info_format(int *repos_format,
 #define SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_CHECKSUM  \
                                         SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_MD5
 
+/** The different policies for processing the UUID in the dumpfile. */
+enum svn_repos_load_uuid
+{
+  /** only update uuid if the repos has no revisions. */
+  svn_repos_load_uuid_default,
+  /** never update uuid. */
+  svn_repos_load_uuid_ignore,
+  /** always update uuid. */
+  svn_repos_load_uuid_force
+};
+
 /**
  * Verify the contents of the file system in @a repos.
  *
@@ -3630,61 +3679,6 @@ svn_repos_check_revision_access(svn_repo
                                 void *authz_read_baton,
                                 apr_pool_t *pool);
 
-/**
- * Set @a *inherited_values to a depth-first ordered array of
- * #svn_prop_inherited_item_t * structures (the path_or_url members of
- * which are relative filesystem paths) representing the properties
- * inherited by @a path in @a root.  If no properties are inherited,
- * then set @a *inherited_values to an empty array.
- *
- * if @a propname is NULL then retrieve all explicit and/or inherited
- * properties.  Otherwise retrieve only the properties named @a propname.
- *
- * If optional @a authz_read_func is non-NULL, then use this function
- * (along with optional @a authz_read_baton) to check the readability
- * of each parent path from which properties are inherited. Silently omit
- * properties for unreadable parent paths.
- *
- * Allocate @a *inherited_props in @a result_pool.  Use @a scratch_pool for
- * temporary allocations.
- *
- * @since New in 1.8.
- */
-svn_error_t *
-svn_repos_fs_get_inherited_props(apr_array_header_t **inherited_props,
-                                 svn_fs_root_t *root,
-                                 const char *path,
-                                 const char *propname,
-                                 svn_repos_authz_func_t authz_read_func,
-                                 void *authz_read_baton,
-                                 apr_pool_t *result_pool,
-                                 apr_pool_t *scratch_pool);
-
-
-/** Capabilities **/
-
-/**
- * Store in @a repos the client-reported capabilities @a capabilities,
- * which must be allocated in memory at least as long-lived as @a repos.
- *
- * The elements of @a capabilities are 'const char *', a subset of
- * the constants beginning with @c SVN_RA_CAPABILITY_.
- * @a capabilities is not copied, so changing it later will affect
- * what is remembered by @a repos.
- *
- * @note The capabilities are passed along to the start-commit hook;
- * see that hook's template for details.
- *
- * @note As of Subversion 1.5, there are no error conditions defined,
- * so this always returns SVN_NO_ERROR.  In future releases it may
- * return error, however, so callers should check.
- *
- * @since New in 1.5.
- */
-svn_error_t *
-svn_repos_remember_client_capabilities(svn_repos_t *repos,
-                                       const apr_array_header_t *capabilities);
-
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_client/import.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_client/import.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_client/import.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_client/import.c Fri Jul 18 21:28:44 2014
@@ -54,19 +54,8 @@
 
 #include "svn_private_config.h"
 
-/* Import context baton.
+/* Import context baton. */
 
-   ### TODO:  Add the following items to this baton:
-      /` import editor/baton. `/
-      const svn_delta_editor_t *editor;
-      void *edit_baton;
-
-      /` Client context baton `/
-      svn_client_ctx_t `ctx;
-
-      /` Paths (keys) excluded from the import (values ignored) `/
-      apr_hash_t *excludes;
-*/
 typedef struct import_ctx_t
 {
   /* Whether any changes were made to the repository */
@@ -591,6 +580,9 @@ import_dir(const svn_delta_editor_t *edi
 /* Recursively import PATH to a repository using EDITOR and
  * EDIT_BATON.  PATH can be a file or directory.
  *
+ * Sets *UPDATED_REPOSITORY to TRUE when the repository was modified by
+ * a successfull commit, otherwise to FALSE.
+ *
  * DEPTH is the depth at which to import PATH; it behaves as for
  * svn_client_import4().
  *
@@ -640,7 +632,8 @@ import_dir(const svn_delta_editor_t *edi
  * not necessarily the root.)
  */
 static svn_error_t *
-import(const char *local_abspath,
+import(svn_boolean_t *updated_repository,
+       const char *local_abspath,
        const char *url,
        const apr_array_header_t *new_entries,
        const svn_delta_editor_t *editor,
@@ -662,11 +655,13 @@ import(const char *local_abspath,
   void *root_baton;
   apr_array_header_t *batons = NULL;
   const char *edit_path = "";
-  import_ctx_t *import_ctx = apr_pcalloc(pool, sizeof(*import_ctx));
+  import_ctx_t import_ctx = { FALSE };
   const svn_io_dirent2_t *dirent;
 
-  import_ctx->autoprops = autoprops;
-  SVN_ERR(svn_magic__init(&import_ctx->magic_cookie, ctx->config, pool));
+  *updated_repository = FALSE;
+
+  import_ctx.autoprops = autoprops;
+  SVN_ERR(svn_magic__init(&import_ctx.magic_cookie, ctx->config, pool));
 
   /* Get a root dir baton.  We pass the revnum we used for testing our
      assumptions and obtaining inherited properties. */
@@ -701,7 +696,7 @@ import(const char *local_abspath,
                                         pool, &root_baton));
 
           /* Remember that the repository was modified */
-          import_ctx->repos_changed = TRUE;
+          import_ctx.repos_changed = TRUE;
         }
     }
   else if (dirent->kind == svn_node_file)
@@ -732,7 +727,7 @@ import(const char *local_abspath,
 
       if (!ignores_match)
         SVN_ERR(import_file(editor, root_baton, local_abspath, edit_path,
-                            dirent, import_ctx, ctx, pool));
+                            dirent, &import_ctx, ctx, pool));
     }
   else if (dirent->kind == svn_node_dir)
     {
@@ -752,7 +747,7 @@ import(const char *local_abspath,
                               root_baton, depth, excludes, global_ignores,
                               no_ignore, no_autoprops,
                               ignore_unknown_node_types, filter_callback,
-                              filter_baton, import_ctx, ctx, pool));
+                              filter_baton, &import_ctx, ctx, pool));
 
     }
   else if (dirent->kind == svn_node_none
@@ -774,7 +769,7 @@ import(const char *local_abspath,
         }
     }
 
-  if (import_ctx->repos_changed)
+  if (import_ctx.repos_changed)
     {
       if (ctx->notify_func2)
         {
@@ -785,10 +780,12 @@ import(const char *local_abspath,
           ctx->notify_func2(ctx->notify_baton2, notify, pool);
         }
 
-      return svn_error_trace(editor->close_edit(edit_baton, pool));
+      SVN_ERR(editor->close_edit(edit_baton, pool));
+
+      *updated_repository = TRUE;
     }
-  else
-    return svn_error_trace(editor->abort_edit(edit_baton, pool));
+
+  return SVN_NO_ERROR;
 }
 
 
@@ -827,6 +824,7 @@ svn_client_import5(const char *path,
   svn_revnum_t base_rev;
   apr_array_header_t *inherited_props = NULL;
   apr_hash_t *url_props = NULL;
+  svn_boolean_t updated_repository;
 
   if (svn_path_is_url(path))
     return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
@@ -988,21 +986,24 @@ svn_client_import5(const char *path,
         }
     }
 
-  /* If an error occurred during the commit, abort the edit and return
-     the error.  We don't even care if the abort itself fails.  */
-  if ((err = import(local_abspath, url, new_entries, editor, edit_baton,
-                    depth, base_rev, excludes, autoprops, local_ignores_arr,
-                    global_ignores, no_ignore, no_autoprops,
-                    ignore_unknown_node_types, filter_callback,
-                    filter_baton, ctx, iterpool)))
+  /* If an error occurred during the commit, properly abort the edit.  */
+  err = svn_error_trace(import(&updated_repository,
+                               local_abspath, url, new_entries, editor,
+                               edit_baton, depth, base_rev, excludes,
+                               autoprops, local_ignores_arr, global_ignores,
+                               no_ignore, no_autoprops,
+                               ignore_unknown_node_types, filter_callback,
+                               filter_baton, ctx, iterpool));
+
+  svn_pool_destroy(iterpool);
+
+  if (err || !updated_repository)
     {
       return svn_error_compose_create(
                     err,
-                    editor->abort_edit(edit_baton, iterpool));
+                    editor->abort_edit(edit_baton, scratch_pool));
     }
 
-  svn_pool_destroy(iterpool);
-
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_client/prop_commands.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_client/prop_commands.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_client/prop_commands.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_client/prop_commands.c Fri Jul 18 21:28:44 2014
@@ -493,11 +493,11 @@ svn_client_revprop_set2(const char *prop
       const svn_string_t *unset = NULL;
 
       if (original_propval == NULL)
-      	old_value_p = NULL;
+        old_value_p = NULL;
       else if (original_propval->data == NULL)
-      	old_value_p = &unset;
+        old_value_p = &unset;
       else
-      	old_value_p = &original_propval;
+        old_value_p = &original_propval;
 
       /* The actual RA call. */
       SVN_ERR(svn_ra_change_rev_prop2(ra_session, *set_rev, propname,

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_delta/xdelta.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_delta/xdelta.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_delta/xdelta.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_delta/xdelta.c Fri Jul 18 21:28:44 2014
@@ -114,7 +114,7 @@ struct block
    (our delta window size much much smaller then 4GB).
    That reduces the hash table size by 50% from 32to 16KB
    and makes it easier to fit into the CPU's L1 cache. */
-  apr_uint32_t pos;			/* NO_POSITION -> block is not used */
+  apr_uint32_t pos;    /* NO_POSITION -> block is not used */
 };
 
 /* A hash table, using open addressing, of the blocks of the source. */

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_diff/binary_diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_diff/binary_diff.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_diff/binary_diff.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_diff/binary_diff.c Fri Jul 18 21:28:44 2014
@@ -119,7 +119,7 @@ write_literal(svn_filesize_t uncompresse
     {
       char chunk[GIT_BASE85_CHUNKSIZE];
       const unsigned char *next;
-      int left;
+      apr_size_t left;
 
       rd = sizeof(chunk);
 

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_diff/diff_file.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_diff/diff_file.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_diff/diff_file.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_diff/diff_file.c Fri Jul 18 21:28:44 2014
@@ -139,16 +139,16 @@ datasource_to_index(svn_diff_datasource_
  * *LENGTH.  The actual bytes read are stored in *LENGTH on return.
  */
 static APR_INLINE svn_error_t *
-read_chunk(apr_file_t *file, const char *path,
+read_chunk(apr_file_t *file,
            char *buffer, apr_off_t length,
-           apr_off_t offset, apr_pool_t *pool)
+           apr_off_t offset, apr_pool_t *scratch_pool)
 {
   /* XXX: The final offset may not be the one we asked for.
    * XXX: Check.
    */
-  SVN_ERR(svn_io_file_seek(file, APR_SET, &offset, pool));
+  SVN_ERR(svn_io_file_seek(file, APR_SET, &offset, scratch_pool));
   return svn_io_file_read_full2(file, buffer, (apr_size_t) length,
-                                NULL, NULL, pool);
+                                NULL, NULL, scratch_pool);
 }
 
 
@@ -288,7 +288,7 @@ increment_chunk(struct file_info *file, 
       file->chunk++;
       length = file->chunk == last_chunk ?
         offset_in_chunk(file->size) : CHUNK_SIZE;
-      SVN_ERR(read_chunk(file->file, file->path, file->buffer,
+      SVN_ERR(read_chunk(file->file, file->buffer,
                          length, chunk_to_offset(file->chunk),
                          pool));
       file->endp = file->buffer + length;
@@ -315,7 +315,7 @@ decrement_chunk(struct file_info *file, 
     {
       /* Read previous chunk and reset pointers. */
       file->chunk--;
-      SVN_ERR(read_chunk(file->file, file->path, file->buffer,
+      SVN_ERR(read_chunk(file->file, file->buffer,
                          CHUNK_SIZE, chunk_to_offset(file->chunk),
                          pool));
       file->endp = file->buffer + CHUNK_SIZE;
@@ -575,7 +575,7 @@ find_identical_suffix(apr_off_t *suffix_
           /* There is at least more than 1 chunk,
              so allocate full chunk size buffer */
           file_for_suffix[i].buffer = apr_palloc(pool, CHUNK_SIZE);
-          SVN_ERR(read_chunk(file_for_suffix[i].file, file_for_suffix[i].path,
+          SVN_ERR(read_chunk(file_for_suffix[i].file,
                              file_for_suffix[i].buffer, length[i],
                              chunk_to_offset(file_for_suffix[i].chunk),
                              pool));
@@ -649,10 +649,9 @@ find_identical_suffix(apr_off_t *suffix_
 
       /* Scan quickly by reading with machine-word granularity. */
       for (i = 0, can_read_word = TRUE; can_read_word && i < file_len; i++)
-        can_read_word = can_read_word
-                        && (  (file_for_suffix[i].curp + 1
-                                 - sizeof(apr_uintptr_t))
-                            > min_curp[i]);
+        can_read_word = ((file_for_suffix[i].curp + 1 - sizeof(apr_uintptr_t))
+                         > min_curp[i]);
+
       while (can_read_word)
         {
           apr_uintptr_t chunk;
@@ -667,8 +666,7 @@ find_identical_suffix(apr_off_t *suffix_
             break;
 
           for (i = 1, is_match = TRUE; is_match && i < file_len; i++)
-            is_match = is_match
-                       && (   chunk
+            is_match = (chunk
                            == *(const apr_uintptr_t *)
                                     (file_for_suffix[i].curp + 1
                                        - sizeof(apr_uintptr_t)));
@@ -805,7 +803,7 @@ datasources_open(void *baton,
       file->size = finfo[i].size;
       length[i] = finfo[i].size > CHUNK_SIZE ? CHUNK_SIZE : finfo[i].size;
       file->buffer = apr_palloc(file_baton->pool, (apr_size_t) length[i]);
-      SVN_ERR(read_chunk(file->file, file->path, file->buffer,
+      SVN_ERR(read_chunk(file->file, file->buffer,
                          length[i], 0, file_baton->pool));
       file->endp = file->buffer + length[i];
       file->curp = file->buffer;
@@ -973,7 +971,7 @@ datasource_get_next_token(apr_uint32_t *
          When changing things here, make sure the whitespace settings are
          applied, or we might not reach the exact suffix boundary as token
          boundary. */
-      SVN_ERR(read_chunk(file->file, file->path,
+      SVN_ERR(read_chunk(file->file,
                          curp, length,
                          chunk_to_offset(file->chunk),
                          file_baton->pool));
@@ -1115,7 +1113,6 @@ token_compare(void *baton, void *token1,
                 COMPARE_CHUNK_SIZE : raw_length[i];
 
               SVN_ERR(read_chunk(file[i]->file,
-                                 file[i]->path,
                                  bufp[i], length[i], offset[i],
                                  file_baton->pool));
               offset[i] += length[i];

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_diff/lcs.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_diff/lcs.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_diff/lcs.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_diff/lcs.c Fri Jul 18 21:28:44 2014
@@ -345,7 +345,7 @@ svn_diff__lcs(svn_diff__position_t *posi
         {
           svn_diff__snake(fp + k, token_counts, &lcs_freelist, pool);
         }
-	  /* for k > 0, deletions are free */
+      /* for k > 0, deletions are free */
       for (k = (d > 0 ? d : 0) + p; k >= 0; k--)
         {
           svn_diff__snake(fp + k, token_counts, &lcs_freelist, pool);

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_fs_base/bdb/strings-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_fs_base/bdb/strings-table.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_fs_base/bdb/strings-table.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_fs_base/bdb/strings-table.c Fri Jul 18 21:28:44 2014
@@ -236,9 +236,9 @@ svn_fs_bdb__string_read(svn_fs_t *fs,
     {
       svn_fs_base__clear_dbt(&result);
       result.data = buf + bytes_read;
-      result.ulen = *len - bytes_read;
+      result.ulen = (u_int32_t)(*len - bytes_read);
       result.doff = (u_int32_t)offset;
-      result.dlen = *len - bytes_read;
+      result.dlen = result.ulen;
       result.flags |= (DB_DBT_USERMEM | DB_DBT_PARTIAL);
       db_err = svn_bdb_dbc_get(cursor, &query, &result, DB_CURRENT);
       if (db_err)

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/dag.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/dag.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/dag.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/dag.c Fri Jul 18 21:28:44 2014
@@ -1124,7 +1124,7 @@ svn_fs_fs__dag_serialize(void **data,
 
   /* The deserializer will use its own pool. */
   svn_temp_serializer__set_null(context,
-				(const void * const *)&node->node_pool);
+                                (const void * const *)&node->node_pool);
 
   /* serialize other sub-structures */
   svn_fs_fs__id_serialize(context, (const svn_fs_id_t **)&node->id);

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/rev_file.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/rev_file.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/rev_file.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/rev_file.c Fri Jul 18 21:28:44 2014
@@ -72,7 +72,7 @@ static apr_status_t
 set_read_only(void *baton)
 {
   set_read_only_baton_t *ro_baton = baton;
-  apr_status_t status;
+  apr_status_t status = APR_SUCCESS;
   svn_error_t *err;
 
   err = svn_io_set_file_read_only(ro_baton->file_path, TRUE, ro_baton->pool);

Propchange: subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/
------------------------------------------------------------------------------
  Merged /subversion/trunk/subversion/libsvn_fs_x:r1603509-1611808

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/dag.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/dag.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/dag.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/dag.c Fri Jul 18 21:28:44 2014
@@ -1120,7 +1120,7 @@ svn_fs_x__dag_serialize(void **data,
 
   /* The deserializer will use its own pool. */
   svn_temp_serializer__set_null(context,
-				(const void * const *)&node->node_pool);
+                                (const void * const *)&node->node_pool);
 
   /* serialize other sub-structures */
   svn_fs_x__id_serialize(context, (const svn_fs_id_t **)&node->id);

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra/ra_loader.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra/ra_loader.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra/ra_loader.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra/ra_loader.c Fri Jul 18 21:28:44 2014
@@ -264,7 +264,7 @@ svn_error_t *svn_ra_open4(svn_ra_session
   const struct ra_lib_defn *defn;
   const svn_ra__vtable_t *vtable = NULL;
   svn_config_t *servers = NULL;
-  const char *server_group;
+  const char *server_group = NULL;
   apr_uri_t repos_URI;
   apr_status_t apr_err;
   svn_error_t *err;
@@ -428,6 +428,10 @@ svn_error_t *svn_ra_open4(svn_ra_session
       if (! store_auth_creds)
         svn_auth_set_parameter(callbacks->auth_baton,
                                SVN_AUTH_PARAM_NO_AUTH_CACHE, "");
+
+      if (server_group)
+        svn_auth_set_parameter(callbacks->auth_baton,
+                               SVN_AUTH_PARAM_SERVER_GROUP, server_group);
     }
 
   /* Find the library. */

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/commit.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/commit.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/commit.c Fri Jul 18 21:28:44 2014
@@ -652,9 +652,9 @@ proppatch_walker(void *baton,
   if (wb->filter != filter_all_props)
     {
       if (wb->filter == filter_props_with_old_value && ! have_old_val)
-      	return SVN_NO_ERROR;
+        return SVN_NO_ERROR;
       if (wb->filter == filter_props_without_old_value && have_old_val)
-      	return SVN_NO_ERROR;
+        return SVN_NO_ERROR;
     }
   if (wb->deleting)
     val = NULL;
@@ -2212,6 +2212,10 @@ abort_edit(void *edit_baton,
       return svn_error_trace(svn_ra_serf__unexpected_status(handler));
     }
 
+  /* Don't delete again if somebody aborts twice */
+  ctx->activity_url = NULL;
+  ctx->txn_url = NULL;
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/serf.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/serf.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/serf.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/serf.c Fri Jul 18 21:28:44 2014
@@ -255,12 +255,8 @@ load_config(svn_ra_serf__session_t *sess
                                SERF_LOG_INFO));
 #endif
 
-  if (config)
-    server_group = svn_config_find_group(config,
-                                         session->session_url.hostname,
-                                         SVN_CONFIG_SECTION_GROUPS, pool);
-  else
-    server_group = NULL;
+  server_group = svn_auth_get_parameter(session->wc_callbacks->auth_baton,
+                                        SVN_AUTH_PARAM_SERVER_GROUP);
 
   if (server_group)
     {
@@ -271,9 +267,6 @@ load_config(svn_ra_serf__session_t *sess
       svn_config_get(config, &timeout_str, server_group,
                      SVN_CONFIG_OPTION_HTTP_TIMEOUT, timeout_str);
 
-      svn_auth_set_parameter(session->wc_callbacks->auth_baton,
-                             SVN_AUTH_PARAM_SERVER_GROUP, server_group);
-
       /* Load the group proxy server settings, overriding global
          settings.  We intentionally ignore 'http-proxy-exceptions'
          here because, well, if this site was an exception, why is

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/update.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/update.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/update.c Fri Jul 18 21:28:44 2014
@@ -118,11 +118,11 @@ static const svn_ra_serf__xml_transition
     FALSE, { "rev", "name", NULL }, TRUE },
 
   { OPEN_DIR, S_, "add-directory", ADD_DIR,
-    FALSE, { "name", "?rev", "?copyfrom-path", "?copyfrom-rev", /*"?bc-url",*/
+    FALSE, { "name", "?copyfrom-path", "?copyfrom-rev", /*"?bc-url",*/
               NULL }, TRUE },
 
   { ADD_DIR, S_, "add-directory", ADD_DIR,
-    FALSE, { "name", "?rev", "?copyfrom-path", "?copyfrom-rev", /*"?bc-url",*/
+    FALSE, { "name", "?copyfrom-path", "?copyfrom-rev", /*"?bc-url",*/
               NULL }, TRUE },
 
   { OPEN_DIR, S_, "open-file", OPEN_FILE,
@@ -132,12 +132,12 @@ static const svn_ra_serf__xml_transition
     FALSE, { "rev", "name", NULL }, TRUE },
 
   { OPEN_DIR, S_, "add-file", ADD_FILE,
-    FALSE, { "name", "?rev", "?copyfrom-path", "?copyfrom-rev",
-             "?sha1-checksum", /*"?bc-url",*/ NULL }, TRUE },
+    FALSE, { "name", "?copyfrom-path", "?copyfrom-rev",
+             "?sha1-checksum", NULL }, TRUE },
 
   { ADD_DIR, S_, "add-file", ADD_FILE,
-    FALSE, { "name", "?rev", "?copyfrom-path", "?copyfrom-rev",
-             "?sha1-checksum", /*"?bc-url",*/ NULL }, TRUE },
+    FALSE, { "name", "?copyfrom-path", "?copyfrom-rev",
+             "?sha1-checksum", NULL }, TRUE },
 
   { OPEN_DIR, S_, "delete-entry", DELETE_ENTRY,
     FALSE, { "?rev", "name", NULL }, TRUE },

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_svn/client.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_svn/client.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_svn/client.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_svn/client.c Fri Jul 18 21:28:44 2014
@@ -798,9 +798,10 @@ static svn_error_t *ra_svn_open(svn_ra_s
                                 const svn_ra_callbacks2_t *callbacks,
                                 void *callback_baton,
                                 apr_hash_t *config,
-                                apr_pool_t *pool)
+                                apr_pool_t *result_pool,
+                                apr_pool_t *scratch_pool)
 {
-  apr_pool_t *sess_pool = svn_pool_create(pool);
+  apr_pool_t *sess_pool = svn_pool_create(result_pool);
   svn_ra_svn__session_baton_t *sess;
   const char *tunnel, **tunnel_argv;
   apr_uri_t uri;
@@ -812,7 +813,7 @@ static svn_error_t *ra_svn_open(svn_ra_s
 
   SVN_ERR(parse_url(url, &uri, sess_pool));
 
-  parse_tunnel(url, &tunnel, pool);
+  parse_tunnel(url, &tunnel, result_pool);
 
   /* Use the default tunnel implementation if we got a tunnel name,
      but either do not have tunnel handler callbacks installed, or
@@ -823,7 +824,7 @@ static svn_error_t *ra_svn_open(svn_ra_s
               && !callbacks->check_tunnel_func(callbacks->tunnel_baton,
                                                tunnel))))
     SVN_ERR(find_tunnel_agent(tunnel, uri.hostinfo, &tunnel_argv, config,
-                              pool));
+                              result_pool));
   else
     tunnel_argv = NULL;
 
@@ -845,54 +846,30 @@ static svn_error_t *ra_svn_open(svn_ra_s
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *ra_svn_open_pool(svn_ra_session_t *session,
+                                     const char **corrected_url,
+                                     const char *url,
+                                     const svn_ra_callbacks2_t *callbacks,
+                                     void *callback_baton,
+                                     apr_hash_t *config,
+                                     apr_pool_t *pool)
+{
+  return ra_svn_open(session, corrected_url, url, callbacks, callback_baton,
+                     config, pool, pool);
+}
+
 static svn_error_t *ra_svn_dup_session(svn_ra_session_t *new_session,
                                        svn_ra_session_t *old_session,
                                        const char *new_session_url,
                                        apr_pool_t *result_pool,
                                        apr_pool_t *scratch_pool)
 {
-  apr_pool_t *sess_pool = svn_pool_create(result_pool);
   svn_ra_svn__session_baton_t *old_sess = old_session->priv;
-  svn_ra_svn__session_baton_t *new_sess;
-  const char *tunnel, **tunnel_argv;
-  apr_uri_t uri;
-  svn_config_t *cfg, *cfg_client;
-  apr_hash_t *config = old_sess->config;
-  const svn_ra_callbacks2_t *callbacks = old_sess->callbacks;
-  void *callback_baton = old_sess->callbacks_baton;
-
-  SVN_ERR(parse_url(new_session_url, &uri, sess_pool));
 
-  parse_tunnel(new_session_url, &tunnel, result_pool);
-
-  /* Use the default tunnel implementation if we got a tunnel name,
-     but either do not have tunnel handler callbacks installed, or
-     the handlers don't like the tunnel name. */
-  if (tunnel
-      && (!callbacks->open_tunnel_func
-          || (callbacks->check_tunnel_func && callbacks->open_tunnel_func
-              && !callbacks->check_tunnel_func(callbacks->tunnel_baton,
-                                               tunnel))))
-    SVN_ERR(find_tunnel_agent(tunnel, uri.hostinfo, &tunnel_argv,
-                              config,
-                              result_pool));
-  else
-    tunnel_argv = NULL;
-
-  cfg_client = config
-               ? svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG)
-               : NULL;
-  cfg = config ? svn_hash_gets(config, SVN_CONFIG_CATEGORY_SERVERS) : NULL;
-  svn_auth_set_parameter(callbacks->auth_baton,
-                         SVN_AUTH_PARAM_CONFIG_CATEGORY_CONFIG, cfg_client);
-  svn_auth_set_parameter(callbacks->auth_baton,
-                         SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS, cfg);
-
-  /* We open the session in a subpool so we can get rid of it if we
-     reparent with a server that doesn't support reparenting. */
-  SVN_ERR(open_session(&new_sess, new_session_url, &uri, tunnel, tunnel_argv,
-                       config, callbacks, callback_baton, sess_pool));
-  new_session->priv = new_sess;
+  SVN_ERR(ra_svn_open(new_session, NULL, new_session_url,
+                      old_sess->callbacks, old_sess->callbacks_baton,
+                      old_sess->config,
+                      result_pool, scratch_pool));
 
   return SVN_NO_ERROR;
 }
@@ -2885,7 +2862,7 @@ static const svn_ra__vtable_t ra_svn_vta
   svn_ra_svn_version,
   ra_svn_get_description,
   ra_svn_get_schemes,
-  ra_svn_open,
+  ra_svn_open_pool,
   ra_svn_dup_session,
   ra_svn_reparent,
   ra_svn_get_session_url,

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_subr/cache-membuffer.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_subr/cache-membuffer.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_subr/cache-membuffer.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_subr/cache-membuffer.c Fri Jul 18 21:28:44 2014
@@ -115,6 +115,21 @@
  * on their hash key.
  */
 
+/* APR's read-write lock implementation on Windows is horribly inefficient.
+ * Even with very low contention a runtime overhead of 35% percent has been
+ * measured for 'svn-bench null-export' over ra_serf.
+ *
+ * Use a simple mutex on Windows.  Because there is one mutex per segment,
+ * large machines should (and usually can) be configured with large caches
+ * such that read contention is kept low.  This is basically the situation
+ * we head before 1.8.
+ */
+#ifdef WIN32
+#  define USE_SIMPLE_MUTEX 1
+#else
+#  define USE_SIMPLE_MUTEX 0
+#endif
+
 /* For more efficient copy operations, let's align all data items properly.
  * Must be a power of 2.
  */
@@ -581,11 +596,15 @@ struct svn_membuffer_t
    * the cache's creator doesn't feel the cache needs to be
    * thread-safe.
    */
+#  if USE_SIMPLE_MUTEX
+  svn_mutex__t *lock;
+#  else
   apr_thread_rwlock_t *lock;
+#  endif
 
   /* If set, write access will wait until they get exclusive access.
    * Otherwise, they will become no-ops if the segment is currently
-   * read-locked.
+   * read-locked.  Only used when LOCK is an r/w lock.
    */
   svn_boolean_t allow_blocking_writes;
 #endif
@@ -611,12 +630,16 @@ static svn_error_t *
 read_lock_cache(svn_membuffer_t *cache)
 {
 #if APR_HAS_THREADS
+#  if USE_SIMPLE_MUTEX
+  return svn_mutex__lock(cache->lock);
+#  else
   if (cache->lock)
   {
     apr_status_t status = apr_thread_rwlock_rdlock(cache->lock);
     if (status)
       return svn_error_wrap_apr(status, _("Can't lock cache mutex"));
   }
+#  endif
 #endif
   return SVN_NO_ERROR;
 }
@@ -627,6 +650,12 @@ static svn_error_t *
 write_lock_cache(svn_membuffer_t *cache, svn_boolean_t *success)
 {
 #if APR_HAS_THREADS
+#  if USE_SIMPLE_MUTEX
+
+  return svn_mutex__lock(cache->lock);
+
+#  else
+
   if (cache->lock)
     {
       apr_status_t status;
@@ -648,6 +677,8 @@ write_lock_cache(svn_membuffer_t *cache,
         return svn_error_wrap_apr(status,
                                   _("Can't write-lock cache mutex"));
     }
+
+#  endif
 #endif
   return SVN_NO_ERROR;
 }
@@ -659,10 +690,18 @@ static svn_error_t *
 force_write_lock_cache(svn_membuffer_t *cache)
 {
 #if APR_HAS_THREADS
+#  if USE_SIMPLE_MUTEX
+
+  return svn_mutex__lock(cache->lock);
+
+#  else
+
   apr_status_t status = apr_thread_rwlock_wrlock(cache->lock);
   if (status)
     return svn_error_wrap_apr(status,
                               _("Can't write-lock cache mutex"));
+
+#  endif
 #endif
   return SVN_NO_ERROR;
 }
@@ -674,6 +713,12 @@ static svn_error_t *
 unlock_cache(svn_membuffer_t *cache, svn_error_t *err)
 {
 #if APR_HAS_THREADS
+#  if USE_SIMPLE_MUTEX
+
+  return svn_mutex__unlock(cache->lock, SVN_NO_ERROR);
+
+#  else
+
   if (cache->lock)
   {
     apr_status_t status = apr_thread_rwlock_unlock(cache->lock);
@@ -683,6 +728,8 @@ unlock_cache(svn_membuffer_t *cache, svn
     if (status)
       return svn_error_wrap_apr(status, _("Can't unlock cache mutex"));
   }
+
+#  endif
 #endif
   return err;
 }
@@ -1768,6 +1815,12 @@ svn_cache__membuffer_cache_create(svn_me
        * the cache's creator doesn't feel the cache needs to be
        * thread-safe.
        */
+#  if USE_SIMPLE_MUTEX
+
+      SVN_ERR(svn_mutex__init(&c[seg].lock, thread_safe, FALSE, pool));
+
+#  else
+
       c[seg].lock = NULL;
       if (thread_safe)
         {
@@ -1777,12 +1830,17 @@ svn_cache__membuffer_cache_create(svn_me
             return svn_error_wrap_apr(status, _("Can't create cache mutex"));
         }
 
+#  endif
+
       /* Select the behavior of write operations.
        */
       c[seg].allow_blocking_writes = allow_blocking_writes;
 #endif
 
-      SVN_ERR(svn_mutex__init(&c[seg].counter_mutex, thread_safe, FALSE,
+      /* Since a simple mutex already guarantees fully serialized access,
+         we need this mutex only when we use multple-reader-1-writer locks. */
+      SVN_ERR(svn_mutex__init(&c[seg].counter_mutex,
+                              thread_safe && !USE_SIMPLE_MUTEX, FALSE,
                               pool));
     }
 
@@ -2823,7 +2881,7 @@ svn_membuffer_get_segment_info(svn_membu
                                svn_cache__info_t *info,
                                svn_boolean_t include_histogram)
 {
-  apr_size_t i;
+  apr_uint32_t i;
 
   info->data_size += segment->l1.size + segment->l2.size;
   info->used_size += segment->data_used;

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_subr/named_atomic.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_subr/named_atomic.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_subr/named_atomic.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_subr/named_atomic.c Fri Jul 18 21:28:44 2014
@@ -197,8 +197,8 @@ struct shared_data_t
  */
 struct mutex_t
 {
-  /* Inter-process sync. is handled by through lock file. */
-  apr_file_t *lock_file;
+  /* Inter-process sync. is handled by through a lock file. */
+  const char *lock_name;
 
   /* Pool to be used with lock / unlock functions */
   apr_pool_t *pool;
@@ -276,10 +276,23 @@ lock(struct mutex_t *mutex)
 {
   svn_error_t *err;
 
-  /* Get lock on the filehandle. */
+  /* Intra-process lock */
   SVN_ERR(svn_mutex__lock(thread_mutex));
-  err = svn_io_lock_open_file(mutex->lock_file, TRUE, FALSE, mutex->pool);
 
+  /* Inter-process lock. */
+  err = svn_io_file_lock2(mutex->lock_name, TRUE, FALSE, mutex->pool);
+  if (err && APR_STATUS_IS_ENOENT(err->apr_err))
+    {
+      /* No lock file?  No big deal; these are just empty files anyway.
+         Create it and try again. */
+      svn_error_clear(err);
+      err = NULL;
+
+      SVN_ERR(svn_io_file_create_empty(mutex->lock_name, mutex->pool));
+      SVN_ERR(svn_io_file_lock2(mutex->lock_name, TRUE, FALSE, mutex->pool));
+    }
+
+  /* Don't leave us in a semi-locked state ... */
   return err
     ? svn_mutex__unlock(thread_mutex, err)
     : err;
@@ -292,37 +305,10 @@ lock(struct mutex_t *mutex)
 static svn_error_t *
 unlock(struct mutex_t *mutex, svn_error_t * outer_err)
 {
-  svn_error_t *unlock_err
-      = svn_io_unlock_open_file(mutex->lock_file, mutex->pool);
-  return svn_mutex__unlock(thread_mutex,
-                           svn_error_compose_create(outer_err,
-                                                    unlock_err));
+  svn_pool_clear(mutex->pool);
+  return svn_mutex__unlock(thread_mutex, outer_err);
 }
 
-#if APR_HAS_MMAP
-/* The last user to close a particular namespace should also remove the
- * lock file.  Failure to do so, however, does not affect further uses
- * of the same namespace.
- */
-static apr_status_t
-delete_lock_file(void *arg)
-{
-  struct mutex_t *mutex = arg;
-  const char *lock_name = NULL;
-
-  /* locks have already been cleaned up. Simply close the file */
-  apr_status_t status = apr_file_close(mutex->lock_file);
-
-  /* Remove the file from disk. This will fail if there ares still other
-   * users of this lock file, i.e. namespace. */
-  apr_file_name_get(&lock_name, mutex->lock_file);
-  if (lock_name)
-    apr_file_remove(lock_name, mutex->pool);
-
-  return status;
-}
-#endif /* APR_HAS_MMAP */
-
 /* Validate the ATOMIC parameter, i.e it's address.  Correct code will
  * never need this but if someone should accidentally to use a NULL or
  * incomplete structure, let's catch that here instead of segfaulting.
@@ -411,29 +397,18 @@ svn_atomic_namespace__create(svn_atomic_
    */
   svn_atomic_namespace__t *new_ns = apr_pcalloc(result_pool, sizeof(**ns));
 
-  /* construct the names of the system objects that we need
+  /* construct the name of the system objects that we need
    */
   shm_name = apr_pstrcat(subpool, name, SHM_NAME_SUFFIX, SVN_VA_NULL);
-  lock_name = apr_pstrcat(subpool, name, MUTEX_NAME_SUFFIX, SVN_VA_NULL);
+  lock_name = apr_pstrcat(result_pool, name, MUTEX_NAME_SUFFIX, SVN_VA_NULL);
 
   /* initialize the lock objects
    */
   SVN_ERR(svn_atomic__init_once(&mutex_initialized, init_thread_mutex, NULL,
                                 result_pool));
 
-  new_ns->mutex.pool = result_pool;
-  SVN_ERR(svn_io_file_open(&new_ns->mutex.lock_file, lock_name,
-                           APR_READ | APR_WRITE | APR_CREATE,
-                           APR_OS_DEFAULT,
-                           result_pool));
-
-  /* Make sure the last user of our lock file will actually remove it.
-   * Please note that only the last file handle being closed will actually
-   * remove the underlying file (see docstring for apr_file_remove).
-   */
-  apr_pool_cleanup_register(result_pool, &new_ns->mutex,
-                            delete_lock_file,
-                            apr_pool_cleanup_null);
+  new_ns->mutex.pool = svn_pool_create(result_pool);
+  new_ns->mutex.lock_name = lock_name;
 
   /* Prevent concurrent initialization.
    */

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_subr/utf_width.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_subr/utf_width.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_subr/utf_width.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_subr/utf_width.c Fri Jul 18 21:28:44 2014
@@ -190,7 +190,7 @@ mk_wcwidth(apr_uint32_t ucs)
 
   /* binary search in table of non-spacing characters */
   if (bisearch(ucs, combining,
-	       sizeof(combining) / sizeof(struct interval) - 1))
+               sizeof(combining) / sizeof(struct interval) - 1))
     return 0;
 
   /* if we arrive here, ucs is not a combining or C0/C1 control character */

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_wc/questions.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_wc/questions.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_wc/questions.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_wc/questions.c Fri Jul 18 21:28:44 2014
@@ -159,8 +159,8 @@ compare_and_verify(svn_boolean_t *modifi
     }
   else
     {
-	  /* We don't use APR-level buffering because the comparison function
-	   * will do its own buffering. */
+      /* We don't use APR-level buffering because the comparison function
+       * will do its own buffering. */
       apr_file_t *file;
       SVN_ERR(svn_io_file_open(&file, versioned_file_abspath, APR_READ,
                                APR_OS_DEFAULT, scratch_pool));

Modified: subversion/branches/svn-auth-x509/subversion/libsvn_wc/wc_db_pristine.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_wc/wc_db_pristine.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_wc/wc_db_pristine.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_wc/wc_db_pristine.c Fri Jul 18 21:28:44 2014
@@ -335,6 +335,7 @@ pristine_install_txn(svn_sqlite__db_t *s
     apr_finfo_t finfo;
     SVN_ERR(svn_stream__install_get_info(&finfo, install_stream, APR_FINFO_SIZE,
                                          scratch_pool));
+    SVN_ERR(svn_io_set_file_read_write(pristine_abspath, TRUE, scratch_pool));
     SVN_ERR(svn_stream__install_stream(install_stream, pristine_abspath,
                                         TRUE, scratch_pool));
 
@@ -344,6 +345,8 @@ pristine_install_txn(svn_sqlite__db_t *s
     SVN_ERR(svn_sqlite__bind_checksum(stmt, 2, md5_checksum, scratch_pool));
     SVN_ERR(svn_sqlite__bind_int64(stmt, 3, finfo.size));
     SVN_ERR(svn_sqlite__insert(NULL, stmt));
+
+    SVN_ERR(svn_io_set_file_read_only(pristine_abspath, FALSE, scratch_pool));
   }
 
   return SVN_NO_ERROR;

Modified: subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/update.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/update.c (original)
+++ subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/update.c Fri Jul 18 21:28:44 2014
@@ -317,7 +317,6 @@ add_helper(svn_boolean_t is_dir,
 {
   item_baton_t *child;
   update_ctx_t *uc = parent->uc;
-  const char *bc_url = NULL;
 
   child = make_child_baton(parent, path, pool);
   child->added = TRUE;
@@ -341,6 +340,8 @@ add_helper(svn_boolean_t is_dir,
         {
           /* we send baseline-collection urls when we add a directory */
           svn_revnum_t revision;
+          const char *bc_url;
+
           revision = dav_svn__get_safe_cr(child->uc->rev_root, real_path,
                                           pool);
           bc_url = dav_svn__build_uri(child->uc->resource->info->repos,
@@ -360,6 +361,8 @@ add_helper(svn_boolean_t is_dir,
 
           /* make sure that the BC_URL is xml attribute safe. */
           bc_url = apr_xml_quote_string(pool, bc_url, 1);
+
+          bc_url_str = apr_psprintf(pool, " bc-url=\"%s\"", bc_url);
         }
       else
         {
@@ -373,9 +376,6 @@ add_helper(svn_boolean_t is_dir,
                            svn_checksum_to_cstring(sha1_checksum, pool));
         }
 
-      if (bc_url)
-        bc_url_str = apr_psprintf(pool, " bc-url=\"%s\"", bc_url);
-
       if (copyfrom_path == NULL)
         {
           elt = apr_psprintf(pool,

Modified: subversion/branches/svn-auth-x509/subversion/svn/merge-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/svn/merge-cmd.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/svn/merge-cmd.c (original)
+++ subversion/branches/svn-auth-x509/subversion/svn/merge-cmd.c Fri Jul 18 21:28:44 2014
@@ -37,10 +37,6 @@
 
 #include "svn_private_config.h"
 
-/* A handy constant */
-static const svn_opt_revision_t unspecified_revision
-  = { svn_opt_revision_unspecified, { 0 } };
-
 
 /*** Code. ***/
 

Modified: subversion/branches/svn-auth-x509/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/svn/notify.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/svn/notify.c (original)
+++ subversion/branches/svn-auth-x509/subversion/svn/notify.c Fri Jul 18 21:28:44 2014
@@ -226,10 +226,12 @@ notify_body(struct notify_baton *nb,
     path_local = n->url;
   else
     {
+      /* Skip the path prefix in N, if supplied, or else the path prefix
+         in NB (which was set to the current working directory). */
       if (n->path_prefix)
         path_local = svn_cl__local_style_skip_ancestor(n->path_prefix, n->path,
                                                        pool);
-      else /* skip nb->path_prefix, if it's non-null */
+      else
         path_local = svn_cl__local_style_skip_ancestor(nb->path_prefix, n->path,
                                                        pool);
     }

Modified: subversion/branches/svn-auth-x509/subversion/svn/propget-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/svn/propget-cmd.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/svn/propget-cmd.c (original)
+++ subversion/branches/svn-auth-x509/subversion/svn/propget-cmd.c Fri Jul 18 21:28:44 2014
@@ -431,7 +431,8 @@ svn_cl__propget(apr_getopt_t *os,
          sure we have only a single target, and that we're not being
          asked to recurse on that target. */
       if (opt_state->strict
-          && ((targets->nelts > 1) || (opt_state->depth != svn_depth_empty)))
+          && ((targets->nelts > 1) || (opt_state->depth != svn_depth_empty)
+              || (opt_state->show_inherited_props)))
         return svn_error_create
           (SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
            _("Strict output of property values only available for single-"

Modified: subversion/branches/svn-auth-x509/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/svn/svn.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/svn/svn.c (original)
+++ subversion/branches/svn-auth-x509/subversion/svn/svn.c Fri Jul 18 21:28:44 2014
@@ -1302,9 +1302,9 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "  'empty', the target path is printed on the same line before each value.\n"
      "\n"
      "  By default, an extra newline is printed after the property value so that\n"
-     "  the output looks pretty.  With a single TARGET and depth 'empty', you can\n"
-     "  use the --strict option to disable this (useful when redirecting a binary\n"
-     "  property value to a file, for example).\n"),
+     "  the output looks pretty.  With a single TARGET, depth 'empty' and without\n"
+     "  --show-inherited-props, you can use the --strict option to disable this\n"
+     "  (useful when redirecting a binary property value to a file, for example).\n"),
     {'v', 'R', opt_depth, 'r', opt_revprop, opt_strict, opt_xml,
      opt_changelist, opt_show_inherited_props },
     {{'v', N_("print path, name and value on separate lines")},

Modified: subversion/branches/svn-auth-x509/subversion/svnadmin/svnadmin.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/svnadmin/svnadmin.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/svnadmin/svnadmin.c (original)
+++ subversion/branches/svn-auth-x509/subversion/svnadmin/svnadmin.c Fri Jul 18 21:28:44 2014
@@ -54,6 +54,11 @@
 
 /*** Code. ***/
 
+/* FSFS format 7's "block-read" feature performs poorly with small caches.
+ * Enable it only if caches above this threshold have been configured.
+ * The current threshold is 64MB. */
+#define BLOCK_READ_CACHE_THRESHOLD (0x40 * 0x100000)
+
 /* A flag to see if we've been cancelled by the client or not. */
 static volatile sig_atomic_t cancelled = FALSE;
 
@@ -113,6 +118,10 @@ open_repos(svn_repos_t **repos,
            const char *path,
            apr_pool_t *pool)
 {
+  /* Enable the "block-read" feature (where it applies)? */
+  svn_boolean_t use_block_read
+    = svn_cache_config_get()->cache_size > BLOCK_READ_CACHE_THRESHOLD;
+
   /* construct FS configuration parameters: enable caches for r/o data */
   apr_hash_t *fs_config = apr_hash_make(pool);
   svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_DELTAS, "1");
@@ -120,7 +129,8 @@ open_repos(svn_repos_t **repos,
   svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_REVPROPS, "2");
   svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_NS,
                            svn_uuid_generate(pool));
-  svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_BLOCK_READ, "1");
+  svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_BLOCK_READ,
+                           use_block_read ? "1" : "0");
 
   /* now, open the requested repository */
   SVN_ERR(svn_repos_open3(repos, path, fs_config, pool, pool));

Modified: subversion/branches/svn-auth-x509/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/svnserve/serve.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/svnserve/serve.c (original)
+++ subversion/branches/svn-auth-x509/subversion/svnserve/serve.c Fri Jul 18 21:28:44 2014
@@ -2939,7 +2939,7 @@ static svn_error_t *unlock_many(svn_ra_s
   apr_array_header_t *unlock_tokens;
   int i;
   apr_pool_t *subpool;
-  svn_error_t *err = SVN_NO_ERROR, *write_err;
+  svn_error_t *err = SVN_NO_ERROR, *write_err = SVN_NO_ERROR;
   apr_hash_t *targets = apr_hash_make(pool);
   apr_hash_t *authz_results = apr_hash_make(pool);
   apr_hash_index_t *hi;

Modified: subversion/branches/svn-auth-x509/subversion/tests/cmdline/atomic-ra-revprop-change.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/cmdline/atomic-ra-revprop-change.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/cmdline/atomic-ra-revprop-change.c (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/cmdline/atomic-ra-revprop-change.c Fri Jul 18 21:28:44 2014
@@ -118,13 +118,13 @@ change_rev_prop(const char *url,
         }
       else if (! want_error && ! err)
         /* Expectation was matched.  Get out. */
-      	return SVN_NO_ERROR;
+        return SVN_NO_ERROR;
       else if (want_error && ! err)
         return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
                                 "An error was expected but not seen");
       else
-      	/* A real (non-SVN_ERR_FS_PROP_BASEVALUE_MISMATCH) error. */
-      	return svn_error_trace(err);
+        /* A real (non-SVN_ERR_FS_PROP_BASEVALUE_MISMATCH) error. */
+        return svn_error_trace(err);
     }
   else
     /* Running under --server-minor-version? */

Modified: subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnadmin_tests.py?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnadmin_tests.py Fri Jul 18 21:28:44 2014
@@ -359,10 +359,6 @@ def set_changed_path_list(sbox, revision
     body_len = long(header.split(' ')[1])
 
   else:
-    # we will invalidate the l2p index but that's ok for the
-    # kind of tests we run here. The p2l index remains valid
-    # because the offset of the last item does not change
-
     # read & parse revision file footer
     footer_length = ord(contents[length-1]);
     footer = contents[length - footer_length - 1:length-1]

Modified: subversion/branches/svn-auth-x509/subversion/tests/cmdline/tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/cmdline/tree_conflict_tests.py?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/cmdline/tree_conflict_tests.py (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/cmdline/tree_conflict_tests.py Fri Jul 18 21:28:44 2014
@@ -25,7 +25,7 @@
 ######################################################################
 
 # General modules
-import sys, re, os, traceback
+import sys, re, os, stat, traceback
 
 # Our testing module
 import svntest
@@ -1212,7 +1212,10 @@ def actual_only_node_behaviour(sbox):
                      "checkout", A_copy_url, foo_path)
   ### for now, ignore the fact that checkout succeeds and remove the nested
   ### working copy so we can test more commands
-  shutil.rmtree(foo_path)
+  def onerror(function, path, execinfo):
+    os.chmod(path, stat.S_IREAD | stat.S_IWRITE)
+    os.remove(path)
+  shutil.rmtree(foo_path, onerror=onerror)
 
   # cleanup
   expected_stdout = None

Modified: subversion/branches/svn-auth-x509/subversion/tests/libsvn_repos/dump-load-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/libsvn_repos/dump-load-test.c?rev=1611811&r1=1611810&r2=1611811&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/libsvn_repos/dump-load-test.c (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/libsvn_repos/dump-load-test.c Fri Jul 18 21:28:44 2014
@@ -45,7 +45,7 @@ dump_r0_mergeinfo_notifier(void *baton,
 {
 }
 
-/* Regression test for part the 'dump' part of issue #4476 "Mergeinfo
+/* Regression test for the 'dump' part of issue #4476 "Mergeinfo
    containing r0 makes svnsync and svnadmin dump fail". */
 static svn_error_t *
 test_dump_r0_mergeinfo(const svn_test_opts_t *opts,