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,