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 2015/01/03 15:00:44 UTC
svn commit: r1649205 [2/30] - in /subversion/branches/authzperf: ./ build/
build/ac-macros/ notes/ subversion/bindings/ctypes-python/
subversion/bindings/cxxhl/
subversion/bindings/javahl/tests/org/apache/subversion/javahl/
subversion/bindings/swig/ su...
Modified: subversion/branches/authzperf/subversion/bindings/swig/python/tests/repository.py
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/bindings/swig/python/tests/repository.py?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/bindings/swig/python/tests/repository.py (original)
+++ subversion/branches/authzperf/subversion/bindings/swig/python/tests/repository.py Sat Jan 3 14:00:41 2015
@@ -18,7 +18,7 @@
# under the License.
#
#
-import unittest, setup_path
+import unittest, setup_path, os, sys
from sys import version_info # For Python version check
if version_info[0] >= 3:
# Python >=3.0
@@ -44,6 +44,42 @@ class ChangeReceiver(delta.Editor):
self.textdeltas.append(textdelta)
return textdelta_handler
+class DumpStreamParser(repos.ParseFns3):
+ def __init__(self):
+ repos.ParseFns3.__init__(self)
+ self.ops = []
+ def magic_header_record(self, version, pool=None):
+ self.ops.append(("magic-header", version))
+ def uuid_record(self, uuid, pool=None):
+ self.ops.append(("uuid", uuid))
+ def new_revision_record(self, headers, pool=None):
+ rev = int(headers[repos.DUMPFILE_REVISION_NUMBER])
+ self.ops.append(("new-revision", rev))
+ return rev
+ def close_revision(self, revision_baton):
+ self.ops.append(("close-revision", revision_baton))
+ def new_node_record(self, headers, revision_baton, pool=None):
+ node = headers[repos.DUMPFILE_NODE_PATH]
+ self.ops.append(("new-node", revision_baton, node))
+ return (revision_baton, node)
+ def close_node(self, node_baton):
+ self.ops.append(("close-node", node_baton[0], node_baton[1]))
+ def set_revision_property(self, revision_baton, name, value):
+ self.ops.append(("set-revision-prop", revision_baton, name, value))
+ def set_node_property(self, node_baton, name, value):
+ self.ops.append(("set-node-prop", node_baton[0], node_baton[1], name, value))
+ def remove_node_props(self, node_baton):
+ self.ops.append(("remove-node-props", node_baton[0], node_baton[1]))
+ def delete_node_property(self, node_baton, name):
+ self.ops.append(("delete-node-prop", node_baton[0], node_baton[1], name))
+ def apply_textdelta(self, node_baton):
+ self.ops.append(("apply-textdelta", node_baton[0], node_baton[1]))
+ return None
+ def set_fulltext(self, node_baton):
+ self.ops.append(("set-fulltext", node_baton[0], node_baton[1]))
+ return None
+
+
def _authz_callback(root, path, pool):
"A dummy authz callback which always returns success."
return 1
@@ -139,6 +175,62 @@ class SubversionRepositoryTestCase(unitt
# svn_repos_t objects, so the following call segfaults
#repos.dump_fs2(None, None, None, 0, self.rev, 0, 0, None)
+ def test_parse_fns3(self):
+ self.cancel_calls = 0
+ def is_cancelled():
+ self.cancel_calls += 1
+ return None
+ dump_path = os.path.join(os.path.dirname(sys.argv[0]),
+ "trac/versioncontrol/tests/svnrepos.dump")
+ stream = open(dump_path)
+ dsp = DumpStreamParser()
+ ptr, baton = repos.make_parse_fns3(dsp)
+ repos.parse_dumpstream3(stream, ptr, baton, False, is_cancelled)
+ stream.close()
+ self.assertEqual(self.cancel_calls, 76)
+ expected_list = [
+ ("magic-header", 2),
+ ('uuid', '92ea810a-adf3-0310-b540-bef912dcf5ba'),
+ ('new-revision', 0),
+ ('set-revision-prop', 0, 'svn:date', '2005-04-01T09:57:41.312767Z'),
+ ('close-revision', 0),
+ ('new-revision', 1),
+ ('set-revision-prop', 1, 'svn:log', 'Initial directory layout.'),
+ ('set-revision-prop', 1, 'svn:author', 'john'),
+ ('set-revision-prop', 1, 'svn:date', '2005-04-01T10:00:52.353248Z'),
+ ('new-node', 1, 'branches'),
+ ('remove-node-props', 1, 'branches'),
+ ('close-node', 1, 'branches'),
+ ('new-node', 1, 'tags'),
+ ('remove-node-props', 1, 'tags'),
+ ('close-node', 1, 'tags'),
+ ('new-node', 1, 'trunk'),
+ ('remove-node-props', 1, 'trunk'),
+ ('close-node', 1, 'trunk'),
+ ('close-revision', 1),
+ ('new-revision', 2),
+ ('set-revision-prop', 2, 'svn:log', 'Added README.'),
+ ('set-revision-prop', 2, 'svn:author', 'john'),
+ ('set-revision-prop', 2, 'svn:date', '2005-04-01T13:12:18.216267Z'),
+ ('new-node', 2, 'trunk/README.txt'),
+ ('remove-node-props', 2, 'trunk/README.txt'),
+ ('set-fulltext', 2, 'trunk/README.txt'),
+ ('close-node', 2, 'trunk/README.txt'),
+ ('close-revision', 2), ('new-revision', 3),
+ ('set-revision-prop', 3, 'svn:log', 'Fixed README.\n'),
+ ('set-revision-prop', 3, 'svn:author', 'kate'),
+ ('set-revision-prop', 3, 'svn:date', '2005-04-01T13:24:58.234643Z'),
+ ('new-node', 3, 'trunk/README.txt'),
+ ('remove-node-props', 3, 'trunk/README.txt'),
+ ('set-node-prop', 3, 'trunk/README.txt', 'svn:mime-type', 'text/plain'),
+ ('set-node-prop', 3, 'trunk/README.txt', 'svn:eol-style', 'native'),
+ ('set-fulltext', 3, 'trunk/README.txt'),
+ ('close-node', 3, 'trunk/README.txt'), ('close-revision', 3),
+ ]
+ # Compare only the first X nodes described in the expected list - otherwise
+ # the comparison list gets too long.
+ self.assertEqual(dsp.ops[:len(expected_list)], expected_list)
+
def test_get_logs(self):
"""Test scope of get_logs callbacks"""
logs = []
@@ -177,6 +269,17 @@ class SubversionRepositoryTestCase(unitt
set(["This is a test.\n", "A test.\n"]))
self.assertEqual(len(editor.textdeltas), 2)
+ def test_unnamed_editor(self):
+ """Test editor object without reference from interpreter"""
+ # Check that the delta.Editor object has proper lifetime. Without
+ # increment of the refcount in make_baton, the object was destroyed
+ # immediately because the interpreter does not hold a reference to it.
+ this_root = fs.revision_root(self.fs, self.rev)
+ prev_root = fs.revision_root(self.fs, self.rev-1)
+ e_ptr, e_baton = delta.make_editor(ChangeReceiver(this_root, prev_root))
+ repos.dir_delta(prev_root, '', '', this_root, '', e_ptr, e_baton,
+ _authz_callback, 1, 1, 0, 0)
+
def test_retrieve_and_change_rev_prop(self):
"""Test playing with revprops"""
self.assertEqual(repos.fs_revision_prop(self.repos, self.rev, "svn:log",
Modified: subversion/branches/authzperf/subversion/bindings/swig/svn_client.i
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/bindings/swig/svn_client.i?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/bindings/swig/svn_client.i (original)
+++ subversion/branches/authzperf/subversion/bindings/swig/svn_client.i Sat Jan 3 14:00:41 2015
@@ -170,13 +170,6 @@
svn_swig_rb_get_commit_log_func)
#endif
-#ifdef SWIGRUBY
-%callback_typemap(svn_cancel_func_t cancel_func, void *cancel_baton,
- ,
- ,
- svn_swig_rb_cancel_func)
-#endif
-
%callback_typemap(svn_client_blame_receiver_t receiver, void *receiver_baton,
svn_swig_py_client_blame_receiver_func,
svn_swig_pl_blame_func,
Modified: subversion/branches/authzperf/subversion/bindings/swig/svn_repos.i
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/bindings/swig/svn_repos.i?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/bindings/swig/svn_repos.i (original)
+++ subversion/branches/authzperf/subversion/bindings/swig/svn_repos.i Sat Jan 3 14:00:41 2015
@@ -147,8 +147,18 @@ svn_error_t *svn_repos_dump_fs2(svn_repo
%ignore svn_repos_dump_fs2;
#endif
+/* ----------------------------------------------------------------------- */
+#ifdef SWIGPYTHON
+/* Make swig wrap this function for us, to allow making a vtable in python */
+void svn_swig_py_make_parse_fns3(const svn_repos_parse_fns3_t **parse_fns3,
+ void **parse_baton,
+ PyObject *py_parse_fns3,
+ apr_pool_t *pool);
+#endif
+
%include svn_repos_h.swg
#ifdef SWIGRUBY
%define_close_related_methods(repos)
#endif
+
Modified: subversion/branches/authzperf/subversion/include/mod_dav_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/mod_dav_svn.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/mod_dav_svn.h (original)
+++ subversion/branches/authzperf/subversion/include/mod_dav_svn.h Sat Jan 3 14:00:41 2015
@@ -40,7 +40,7 @@ extern "C" {
/**
Given an apache request @a r, a @a uri, and a @a root_path to the svn
location block, process @a uri and return many things, allocated in
- @a r->pool:
+ @a pool:
- @a cleaned_uri: The uri with duplicate and trailing slashes removed.
@@ -74,7 +74,25 @@ extern "C" {
- @a relative_path: /!svn/blah/13/A/B/alpha
- @a repos_path: A/B/alpha
- @a trailing_slash: FALSE
+
+ NOTE: The returned dav_error will be also allocated in @a pool, not
+ in @a r->pool.
+
+ @since New in 1.9
*/
+AP_MODULE_DECLARE(dav_error *) dav_svn_split_uri2(request_rec *r,
+ const char *uri_to_split,
+ const char *root_path,
+ const char **cleaned_uri,
+ int *trailing_slash,
+ const char **repos_basename,
+ const char **relative_path,
+ const char **repos_path,
+ apr_pool_t *pool);
+
+/**
+ * Same as dav_svn_split_uri2() but allocates the result in @a r->pool.
+ */
AP_MODULE_DECLARE(dav_error *) dav_svn_split_uri(request_rec *r,
const char *uri,
const char *root_path,
@@ -87,7 +105,22 @@ AP_MODULE_DECLARE(dav_error *) dav_svn_s
/**
* Given an apache request @a r and a @a root_path to the svn location
- * block, set @a *repos_path to the path of the repository on disk. */
+ * block, set @a *repos_path to the path of the repository on disk.
+ * Perform all allocations in @a pool.
+ *
+ * NOTE: The returned dav_error will be also allocated in @a pool, not
+ * in @a r->pool.
+ *
+ * @since New in 1.9
+ */
+AP_MODULE_DECLARE(dav_error *) dav_svn_get_repos_path2(request_rec *r,
+ const char *root_path,
+ const char **repos_path,
+ apr_pool_t *pool);
+
+/**
+ * Same as dav_svn_get_repos_path2() but allocates the result in@a r->pool.
+ */
AP_MODULE_DECLARE(dav_error *) dav_svn_get_repos_path(request_rec *r,
const char *root_path,
const char **repos_path);
Propchange: subversion/branches/authzperf/subversion/include/private/README
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: subversion/branches/authzperf/subversion/include/private/svn_cert.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: subversion/branches/authzperf/subversion/include/private/svn_dep_compat.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/private/svn_dep_compat.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/private/svn_dep_compat.h (original)
+++ subversion/branches/authzperf/subversion/include/private/svn_dep_compat.h Sat Jan 3 14:00:41 2015
@@ -47,6 +47,19 @@ extern "C" {
#endif
/**
+ * We assume that 'char' is 8 bits wide. The critical interfaces are
+ * our repository formats and RA encodings. E.g. a 32 bit wide char may
+ * mess up UTF8 parsing, how we interpret size values etc.
+ *
+ * @since New in 1.9.
+ */
+#if defined(CHAR_BIT) \
+ && !defined(SVN_ALLOW_NON_8_BIT_CHARS) \
+ && (CHAR_BIT != 8)
+#error char is not 8 bits and may break Subversion. Define SVN_ALLOW_NON_8_BIT_CHARS to skip this check.
+#endif
+
+/**
* Work around a platform dependency issue. apr_thread_rwlock_trywrlock()
* will make APR_STATUS_IS_EBUSY() return TRUE if the lock could not be
* acquired under Unix. Under Windows, this will not work. So, provide
Modified: subversion/branches/authzperf/subversion/include/private/svn_mergeinfo_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/private/svn_mergeinfo_private.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/private/svn_mergeinfo_private.h (original)
+++ subversion/branches/authzperf/subversion/include/private/svn_mergeinfo_private.h Sat Jan 3 14:00:41 2015
@@ -65,6 +65,27 @@ svn_error_t *
svn_rangelist__combine_adjacent_ranges(svn_rangelist_t *rangelist,
apr_pool_t *scratch_pool);
+/** Canonicalize the @a rangelist: sort the ranges, and combine adjacent or
+ * overlapping ranges into single ranges where possible.
+ *
+ * If overlapping ranges have different inheritability, return an error.
+ *
+ * Modify @a rangelist in place. Use @a scratch_pool for temporary
+ * allocations.
+ */
+svn_error_t *
+svn_rangelist__canonicalize(svn_rangelist_t *rangelist,
+ apr_pool_t *scratch_pool);
+
+/** Canonicalize the revision range lists in the @a mergeinfo.
+ *
+ * Modify @a mergeinfo in place. Use @a scratch_pool for temporary
+ * allocations.
+ */
+svn_error_t *
+svn_mergeinfo__canonicalize_ranges(svn_mergeinfo_t mergeinfo,
+ apr_pool_t *scratch_pool);
+
/* Set inheritability of all rangelists in MERGEINFO to INHERITABLE.
If MERGEINFO is NULL do nothing. If a rangelist in MERGEINFO is
NULL leave it alone. */
Modified: subversion/branches/authzperf/subversion/include/private/svn_opt_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/private/svn_opt_private.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/private/svn_opt_private.h (original)
+++ subversion/branches/authzperf/subversion/include/private/svn_opt_private.h Sat Jan 3 14:00:41 2015
@@ -46,10 +46,6 @@ extern "C" {
* UTF8_TARGET need not be canonical. *TRUE_TARGET will not be canonical
* unless UTF8_TARGET is.
*
- * It is an error if *TRUE_TARGET results in the empty string after the
- * split, which happens in case UTF8_TARGET has a leading '@' character
- * with no additional '@' characters to escape the first '@'.
- *
* Note that *PEG_REVISION will still contain the '@' symbol as the first
* character if a peg revision was found. If a trailing '@' symbol was
* used to escape other '@' characters in UTF8_TARGET, *PEG_REVISION will
Modified: subversion/branches/authzperf/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/private/svn_wc_private.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/authzperf/subversion/include/private/svn_wc_private.h Sat Jan 3 14:00:41 2015
@@ -621,7 +621,6 @@ svn_wc__node_get_base(svn_node_kind_t *k
svn_wc_context_t *wc_ctx,
const char *local_abspath,
svn_boolean_t ignore_enoent,
- svn_boolean_t show_hidden,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
Modified: subversion/branches/authzperf/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/svn_client.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/svn_client.h (original)
+++ subversion/branches/authzperf/subversion/include/svn_client.h Sat Jan 3 14:00:41 2015
@@ -1081,20 +1081,15 @@ svn_client_create_context(svn_client_ctx
/** @} end group: Client context management */
/**
- * @name Authentication information file names
- *
- * Names of files that contain authentication information.
- *
- * These filenames are decided by libsvn_client, since this library
- * implements all the auth-protocols; libsvn_wc does nothing but
- * blindly store and retrieve these files from protected areas.
- *
- * @defgroup clnt_auth_filenames Client authentication file names
- * @{
+ * @deprecated Provided for backward compatibility. This constant was never
+ * used in released versions.
*/
#define SVN_CLIENT_AUTH_USERNAME "username"
+/**
+ * @deprecated Provided for backward compatibility. This constant was never
+ * used in released versions.
+ */
#define SVN_CLIENT_AUTH_PASSWORD "password"
-/** @} group end: Authentication information file names */
/** Client argument processing
*
@@ -1130,6 +1125,12 @@ svn_client_create_context(svn_client_ctx
* error, and if this is the only type of error encountered, complete
* the operation before returning the error(s).
*
+ * Return an error if a target is just a peg specifier with no path, such as
+ * "@abc". Before v1.6.5 (r878062) this form was interpreted as a literal path;
+ * it is now ambiguous. The form "@abc@" should now be used to refer to the
+ * literal path "@abc" with no peg revision, or the form ".@abc" to refer to
+ * the empty path with peg revision "abc".
+ *
* @since New in 1.7
*/
svn_error_t *
@@ -1144,6 +1145,9 @@ svn_client_args_to_target_array2(apr_arr
* Similar to svn_client_args_to_target_array2() but with
* @a keep_last_origpath_on_truepath_collision always set to FALSE.
*
+ * @since Since 1.6.5, this returns an error if a path contains a peg
+ * specifier with no path before it, such as "@abc".
+ *
* @deprecated Provided for backward compatibility with the 1.6 API.
*/
SVN_DEPRECATED
Modified: subversion/branches/authzperf/subversion/include/svn_cmdline.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/svn_cmdline.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/svn_cmdline.h (original)
+++ subversion/branches/authzperf/subversion/include/svn_cmdline.h Sat Jan 3 14:00:41 2015
@@ -320,15 +320,58 @@ svn_cmdline_auth_plaintext_passphrase_pr
* by the command line client.
*
* @a non_interactive, @a username, @a password, @a config_dir,
- * @a no_auth_cache, and @a trust_server_cert are the values of the
- * command line options of the corresponding names.
+ * and @a no_auth_cache are the values of the command line options
+ * of the corresponding names.
*
+ * If @a non_interactive is @c TRUE, then the following parameters
+ * control whether an invalid SSL certificate will be accepted
+ * regardless of a specific verification failure:
+ *
+ * @a trust_server_cert_unknown_ca: If @c TRUE, accept certificates
+ * from unknown certificate authorities.
+ *
+ * @a trust_server_cert_cn_mismatch: If @c TRUE, accept certificates
+ * even if the Common Name attribute of the certificate differs from
+ * the hostname of the server.
+ *
+ * @a trust_server_cert_expired: If @c TRUE, accept certificates even
+ * if they are expired.
+ *
+ * @a trust_server_cert_not_yet_valid: If @c TRUE, accept certificates
+ * from the future.
+ *
+ * @a trust_server_cert_other_failure: If @c TRUE, accept certificates
+ * even if any other verification failure than the above occured.
+ *
* @a cfg is the @c SVN_CONFIG_CATEGORY_CONFIG configuration, and
* @a cancel_func and @a cancel_baton control the cancellation of the
* prompting providers that are initialized.
*
* Use @a pool for all allocations.
*
+ * @since New in 1.9.
+ */
+svn_error_t *
+svn_cmdline_create_auth_baton2(svn_auth_baton_t **ab,
+ svn_boolean_t non_interactive,
+ const char *username,
+ const char *password,
+ const char *config_dir,
+ svn_boolean_t no_auth_cache,
+ svn_boolean_t trust_server_cert_unknown_ca,
+ svn_boolean_t trust_server_cert_cn_mismatch,
+ svn_boolean_t trust_server_cert_expired,
+ svn_boolean_t trust_server_cert_not_yet_valid,
+ svn_boolean_t trust_server_cert_other_failure,
+ svn_config_t *cfg,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool);
+
+/* Like svn_cmdline_create_auth_baton2, but with only one trust_server_cert
+ * option which corresponds to trust_server_cert_unknown_ca.
+ *
+ * @deprecated Provided for backward compatibility with the 1.8 API.
* @since New in 1.6.
*/
svn_error_t *
Modified: subversion/branches/authzperf/subversion/include/svn_delta.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/svn_delta.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/svn_delta.h (original)
+++ subversion/branches/authzperf/subversion/include/svn_delta.h Sat Jan 3 14:00:41 2015
@@ -249,6 +249,7 @@ svn_txdelta_compose_windows(const svn_tx
*
* @since New in 1.4
*
+ * @since Since 1.9, @a tbuf may be NULL if @a *tlen is 0.
*/
void
svn_txdelta_apply_instructions(svn_txdelta_window_t *window,
Modified: subversion/branches/authzperf/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/svn_error_codes.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/authzperf/subversion/include/svn_error_codes.h Sat Jan 3 14:00:41 2015
@@ -817,17 +817,17 @@ SVN_ERROR_START
"Malformed transaction ID string.")
/** @since New in 1.9. */
- SVN_ERRDEF(SVN_ERR_FS_ITEM_INDEX_CORRUPTION,
+ SVN_ERRDEF(SVN_ERR_FS_INDEX_CORRUPTION,
SVN_ERR_FS_CATEGORY_START + 54,
"Corrupt index file.")
/** @since New in 1.9. */
- SVN_ERRDEF(SVN_ERR_FS_ITEM_INDEX_REVISION,
+ SVN_ERRDEF(SVN_ERR_FS_INDEX_REVISION,
SVN_ERR_FS_CATEGORY_START + 55,
"Revision not covered by index.")
/** @since New in 1.9. */
- SVN_ERRDEF(SVN_ERR_FS_ITEM_INDEX_OVERFLOW,
+ SVN_ERRDEF(SVN_ERR_FS_INDEX_OVERFLOW,
SVN_ERR_FS_CATEGORY_START + 56,
"Item index too large for this revision.")
@@ -837,7 +837,7 @@ SVN_ERROR_START
"Container index out of range.")
/** @since New in 1.9. */
- SVN_ERRDEF(SVN_ERR_FS_ITEM_INDEX_INCONSISTENT,
+ SVN_ERRDEF(SVN_ERR_FS_INDEX_INCONSISTENT,
SVN_ERR_FS_CATEGORY_START + 58,
"Index files are inconsistent.")
@@ -856,6 +856,16 @@ SVN_ERROR_START
SVN_ERR_FS_CATEGORY_START + 61,
"Container capacity exceeded.")
+ /** @since New in 1.9. */
+ SVN_ERRDEF(SVN_ERR_FS_MALFORMED_NODEREV_ID,
+ SVN_ERR_FS_CATEGORY_START + 62,
+ "Malformed node revision ID string.")
+
+ /** @since New in 1.9. */
+ SVN_ERRDEF(SVN_ERR_FS_INVALID_GENERATION,
+ SVN_ERR_FS_CATEGORY_START + 63,
+ "Invalid generation number data.")
+
/* repos errors */
SVN_ERRDEF(SVN_ERR_REPOS_LOCKED,
Modified: subversion/branches/authzperf/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/svn_fs.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/svn_fs.h (original)
+++ subversion/branches/authzperf/subversion/include/svn_fs.h Sat Jan 3 14:00:41 2015
@@ -116,6 +116,26 @@ typedef struct svn_fs_t svn_fs_t;
*/
#define SVN_FS_CONFIG_FSFS_BLOCK_READ "fsfs-block-read"
+/** String with a decimal representation of the FSFS format shard size.
+ * Zero ("0") means that a repository with linear layout should be created.
+ *
+ * This option will only be used during the creation of new repositories
+ * and is otherwise ignored.
+ *
+ * @since New in 1.9.
+ */
+#define SVN_FS_CONFIG_FSFS_SHARD_SIZE "fsfs-shard-size"
+
+/** Enable / disable the FSFS format 7 logical addressing feature for a
+ * newly created repository.
+ *
+ * This option will only be used during the creation of new repositories
+ * and is otherwise ignored.
+ *
+ * @since New in 1.9.
+ */
+#define SVN_FS_CONFIG_FSFS_LOG_ADDRESSING "fsfs-log-addressing"
+
/* Note to maintainers: if you add further SVN_FS_CONFIG_FSFS_CACHE_* knobs,
update fs_fs.c:verify_as_revision_before_current_plus_plus(). */
@@ -1420,6 +1440,11 @@ typedef enum svn_fs_path_change_kind_t
* versions. Therefore, to preserve binary compatibility, users
* should not directly allocate structures of this type.
*
+ * @note The @c text_mod, @c prop_mod and @c mergeinfo_mod flags mean the
+ * text, properties and mergeinfo property (respectively) were "touched"
+ * by the commit API; this does not mean the new value is different from
+ * the old value.
+ *
* @since New in 1.6. */
typedef struct svn_fs_path_change2_t
{
@@ -1429,10 +1454,23 @@ typedef struct svn_fs_path_change2_t
/** kind of change */
svn_fs_path_change_kind_t change_kind;
- /** were there text mods? */
+ /** was the text touched?
+ * For node_kind=dir: always false. For node_kind=file:
+ * modify: true iff text touched.
+ * add (copy): true iff text touched.
+ * add (plain): always true.
+ * delete: always false.
+ * replace: as for the add/copy part of the replacement.
+ */
svn_boolean_t text_mod;
- /** were there property mods? */
+ /** were the properties touched?
+ * modify: true iff props touched.
+ * add (copy): true iff props touched.
+ * add (plain): true iff props touched.
+ * delete: always false.
+ * replace: as for the add/copy part of the replacement.
+ */
svn_boolean_t prop_mod;
/** what node kind is the path?
@@ -1445,7 +1483,12 @@ typedef struct svn_fs_path_change2_t
svn_revnum_t copyfrom_rev;
const char *copyfrom_path;
- /** were there mergeinfo mods?
+ /** was the mergeinfo property touched?
+ * modify: } true iff svn:mergeinfo property add/del/mod
+ * add (copy): } and fs format supports this flag.
+ * add (plain): }
+ * delete: always false.
+ * replace: as for the add/copy part of the replacement.
* (Note: Pre-1.9 repositories will report #svn_tristate_unknown.)
* @since New in 1.9. */
svn_tristate_t mergeinfo_mod;
@@ -2219,13 +2262,13 @@ typedef svn_error_t *
* upon doing so. Use @a pool for allocations.
*
* This function is intended to support zero copy data processing. It may
- * not be implemented for all data backends or not applicable for certain
- * content. In that case, @a *success will always be @c FALSE. Also, this
- * is a best-effort function which means that there is no guarantee that
- * @a processor gets called at all for some content.
+ * not be implemented for all data backends or not be applicable for certain
+ * content. In those cases, @a *success will always be @c FALSE. Also,
+ * this is a best-effort function which means that there is no guarantee
+ * that @a processor gets called at all.
*
- * @note @a processor is expected to be relatively short function with
- * at most O(content size) runtime.
+ * @note @a processor is expected to be a relatively simple function with
+ * a runtime of O(content size) or less.
*
* @since New in 1.8.
*/
@@ -3002,6 +3045,9 @@ typedef struct svn_fs_fsfs_info_t {
* @note Zero (0) if (but not iff) the format does not support packing. */
svn_revnum_t min_unpacked_rev;
+ /* TRUE if logical addressing is enabled for this repository.
+ * FALSE if repository uses physical addressing. */
+ svn_boolean_t log_addressing;
/* ### TODO: information about fsfs.conf? rep-cache.db? write locks? */
/* If you add fields here, check whether you need to extend svn_fs_info()
Modified: subversion/branches/authzperf/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/svn_io.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/svn_io.h (original)
+++ subversion/branches/authzperf/subversion/include/svn_io.h Sat Jan 3 14:00:41 2015
@@ -1265,6 +1265,8 @@ svn_stream_read(svn_stream_t *stream,
* of reads or a simple seek operation. If the stream implementation has
* not provided a skip function, this will read from the stream and
* discard the data.
+ *
+ * @since New in 1.7.
*/
svn_error_t *
svn_stream_skip(svn_stream_t *stream,
@@ -1534,6 +1536,10 @@ typedef svn_error_t *
* If the only "access" the returned stream gets is to close it
* then @a open_func will only be called if @a open_on_close is TRUE.
*
+ * Allocate the returned stream in @a result_pool. Also arrange for
+ * @a result_pool to be passed as the @c result_pool parameter to
+ * @a open_func when it is called.
+ *
* @since New in 1.8.
*/
svn_stream_t *
Modified: subversion/branches/authzperf/subversion/include/svn_opt.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/svn_opt.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/svn_opt.h (original)
+++ subversion/branches/authzperf/subversion/include/svn_opt.h Sat Jan 3 14:00:41 2015
@@ -656,6 +656,10 @@ svn_opt_parse_all_args(apr_array_header_
* canonical form if @a path is in canonical form.
*
* @since New in 1.1.
+ * @since Since 1.6.5, this returns an error if @a path contains a peg
+ * specifier with no path before it, such as "@abc".
+ * @since Since 1.9.0, this no longer returns an error if @a path contains a peg
+ * specifier with no path before it, such as "@abc".
*/
svn_error_t *
svn_opt_parse_path(svn_opt_revision_t *rev,
Modified: subversion/branches/authzperf/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/svn_repos.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/svn_repos.h (original)
+++ subversion/branches/authzperf/subversion/include/svn_repos.h Sat Jan 3 14:00:41 2015
@@ -287,7 +287,14 @@ typedef enum svn_repos_notify_warning_t
*
* @since New in 1.9.
*/
- svn_repos_notify_warning_mergeinfo_collision
+ svn_repos_notify_warning_mergeinfo_collision,
+
+ /**
+ * Detected invalid mergeinfo.
+ *
+ * @since New in 1.9.
+ */
+ svn_repos_notify_warning_invalid_mergeinfo
} svn_repos_notify_warning_t;
/**
@@ -3086,7 +3093,7 @@ svn_repos_load_fs5(svn_repos_t *repos,
/** Similar to svn_repos_load_fs5(), but with @a ignore_dates
* always passed as FALSE.
*
- * @since New in 1.9.
+ * @since New in 1.8.
* @deprecated Provided for backward compatibility with the 1.8 API.
*/
SVN_DEPRECATED
@@ -3336,17 +3343,56 @@ svn_repos_parse_dumpstream3(svn_stream_t
* If @a use_history is set, then the parser will require relative
* 'copyfrom' history to exist in the repository when it encounters
* nodes that are added-with-history.
+ * ### What does 'require relative copyfrom history to exist' mean?
+ * ### What happens if @a use_history is false?
+ *
+ * If @a use_pre_commit_hook is set, call the repository's pre-commit
+ * hook before committing each loaded revision.
+ *
+ * If @a use_post_commit_hook is set, call the repository's
+ * post-commit hook after committing each loaded revision.
*
* If @a validate_props is set, then validate Subversion revision and
* node properties (those in the svn: namespace) against established
* rules for those things.
*
+ * If @a ignore_dates is set, ignore any revision datestamps found in
+ * @a dumpstream, allowing the revisions created by the load process
+ * to be stamped as if they were newly created via the normal commit
+ * process.
+ *
* If @a parent_dir is not NULL, then the parser will reparent all the
* loaded nodes, from root to @a parent_dir. The directory @a parent_dir
* must be an existing directory in the repository.
*
+ * @since New in 1.9.
+ */
+svn_error_t *
+svn_repos_get_fs_build_parser5(const svn_repos_parse_fns3_t **callbacks,
+ void **parse_baton,
+ svn_repos_t *repos,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ svn_boolean_t use_history,
+ svn_boolean_t validate_props,
+ enum svn_repos_load_uuid uuid_action,
+ const char *parent_dir,
+ svn_boolean_t use_pre_commit_hook,
+ svn_boolean_t use_post_commit_hook,
+ svn_boolean_t ignore_dates,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_get_fs_build_parser5(), but with the
+ * @c use_pre_commit_hook, @c use_post_commit_hook and @c ignore_dates
+ * arguments all false.
+ *
* @since New in 1.8.
+ * @deprecated Provided for backward compatibility with the 1.8 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_repos_get_fs_build_parser4(const svn_repos_parse_fns3_t **parser,
void **parse_baton,
Modified: subversion/branches/authzperf/subversion/include/svn_string.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/svn_string.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/svn_string.h (original)
+++ subversion/branches/authzperf/subversion/include/svn_string.h Sat Jan 3 14:00:41 2015
@@ -140,6 +140,8 @@ svn_string_create_empty(apr_pool_t *pool
/** Create a new string copied from a generic string of bytes, @a bytes, of
* length @a size bytes. @a bytes is NOT assumed to be null-terminated, but
* the new string will be.
+ *
+ * @since Since 1.9, @a bytes can be NULL if @a size is zero.
*/
svn_string_t *
svn_string_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool);
@@ -205,6 +207,8 @@ svn_stringbuf_create(const char *cstring
/** Create a new stringbuf copied from the generic string of bytes, @a bytes,
* of length @a size bytes. @a bytes is NOT assumed to be null-terminated,
* but the new stringbuf will be.
+ *
+ * @since Since 1.9, @a bytes can be NULL if @a size is zero.
*/
svn_stringbuf_t *
svn_stringbuf_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool);
@@ -313,6 +317,8 @@ svn_stringbuf_appendbyte(svn_stringbuf_t
/** Append an array of bytes onto @a targetstr.
*
* reallocs if necessary. @a targetstr is affected, nothing else is.
+ *
+ * @since 1.9 @a bytes can be NULL if @a count is zero.
*/
void
svn_stringbuf_appendbytes(svn_stringbuf_t *targetstr,
@@ -355,6 +361,8 @@ svn_stringbuf_appendcstr(svn_stringbuf_t
* @note The inserted string may be a sub-range if @a str.
*
* @since New in 1.8.
+ *
+ * @since Since 1.9, @a bytes can be NULL if @a count is zero.
*/
void
svn_stringbuf_insert(svn_stringbuf_t *str,
@@ -386,6 +394,8 @@ svn_stringbuf_remove(svn_stringbuf_t *st
* @endcode
*
* @since New in 1.8.
+ *
+ * @since Since 1.9, @a bytes can be NULL if @a new_count is zero.
*/
void
svn_stringbuf_replace(svn_stringbuf_t *str,
Modified: subversion/branches/authzperf/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/svn_wc.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/svn_wc.h (original)
+++ subversion/branches/authzperf/subversion/include/svn_wc.h Sat Jan 3 14:00:41 2015
@@ -907,13 +907,15 @@ svn_wc_external_item_dup(const svn_wc_ex
*
* Allocate the table, keys, and values in @a pool.
*
- * Use @a parent_directory only in constructing error strings.
+ * @a defining_directory is the path or URL of the directory on which
+ * the svn:externals property corresponding to @a desc is set.
+ * @a defining_directory is only used when constructing error strings.
*
* @since New in 1.5.
*/
svn_error_t *
svn_wc_parse_externals_description3(apr_array_header_t **externals_p,
- const char *parent_directory,
+ const char *defining_directory,
const char *desc,
svn_boolean_t canonicalize_url,
apr_pool_t *pool);
@@ -5167,6 +5169,12 @@ svn_wc_committed_queue_create(apr_pool_t
* ### seems to be not a set of changes but rather the new complete set of
* ### props. And it's renamed to 'new_dav_cache' inside; why?
*
+ * If @a is_committed is @c TRUE, the node will be processed as committed. This
+ * turns the node and its implied descendants as the new unmodified state at
+ * the new specified revision. Unless @a recurse is TRUE, changes on
+ * descendants are not committed as changes directly. In this case they should
+ * be queueud as their own changes.
+ *
* If @a remove_lock is @c TRUE, any entryprops related to a repository
* lock will be removed.
*
@@ -5204,7 +5212,25 @@ svn_wc_committed_queue_create(apr_pool_t
* Temporary allocations will be performed in @a scratch_pool, and persistent
* allocations will use the same pool as @a queue used when it was created.
*
+ * @since New in 1.9.
+ */
+svn_error_t *
+svn_wc_queue_committed4(svn_wc_committed_queue_t *queue,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t recurse,
+ svn_boolean_t is_committed,
+ const apr_array_header_t *wcprop_changes,
+ svn_boolean_t remove_lock,
+ svn_boolean_t remove_changelist,
+ const svn_checksum_t *sha1_checksum,
+ apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_queue_committed4, but with is_committed always
+ * TRUE.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backwards compatibility with the 1.8 API.
*/
svn_error_t *
svn_wc_queue_committed3(svn_wc_committed_queue_t *queue,
@@ -7190,7 +7216,7 @@ svn_wc_merge_prop_diffs(svn_wc_notify_st
* the copy/move source (even if the copy-/move-here replaces a locally
* deleted file).
*
- * If @a local_abspath refers to an unversioned or non-existing path, return
+ * If @a local_abspath refers to an unversioned or non-existent path, return
* @c SVN_ERR_WC_PATH_NOT_FOUND. Use @a wc_ctx to access the working copy.
* @a contents may not be @c NULL (unlike @a *contents).
*
@@ -8175,7 +8201,17 @@ typedef svn_error_t *(*svn_changelist_re
/**
- * ### TODO: Doc string, please.
+ * Beginning at @a local_abspath, crawl to @a depth to discover every path in
+ * or under @a local_abspath which belongs to one of the changelists in @a
+ * changelist_filter (an array of <tt>const char *</tt> changelist names).
+ * If @a changelist_filter is @c NULL, discover paths with any changelist.
+ * Call @a callback_func (with @a callback_baton) each time a
+ * changelist-having path is discovered.
+ *
+ * @a local_abspath is a local WC path.
+ *
+ * If @a cancel_func is not @c NULL, invoke it passing @a cancel_baton
+ * during the recursive walk.
*
* @since New in 1.7.
*/
Modified: subversion/branches/authzperf/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c Sat Jan 3 14:00:41 2015
@@ -49,120 +49,19 @@
/*-----------------------------------------------------------------------*/
-struct gnome_keyring_baton
-{
- const char *keyring_name;
- GnomeKeyringInfo *info;
- GMainLoop *loop;
-};
-
-
-/* Callback function to destroy gnome_keyring_baton. */
-static void
-callback_destroy_data_keyring(void *data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- if (data == NULL)
- return;
-
- free((void*)key_info->keyring_name);
- key_info->keyring_name = NULL;
-
- if (key_info->info)
- {
- gnome_keyring_info_free(key_info->info);
- key_info->info = NULL;
- }
-
- return;
-}
-
-
-/* Callback function to complete the keyring operation. */
-static void
-callback_done(GnomeKeyringResult result,
- gpointer data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- g_main_loop_quit(key_info->loop);
- return;
-}
-
-
-/* Callback function to get the keyring info. */
-static void
-callback_get_info_keyring(GnomeKeyringResult result,
- GnomeKeyringInfo *info,
- void *data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- if (result == GNOME_KEYRING_RESULT_OK && info != NULL)
- {
- key_info->info = gnome_keyring_info_copy(info);
- }
- else
- {
- if (key_info->info != NULL)
- gnome_keyring_info_free(key_info->info);
-
- key_info->info = NULL;
- }
-
- g_main_loop_quit(key_info->loop);
-
- return;
-}
-
-
-/* Callback function to get the default keyring string name. */
-static void
-callback_default_keyring(GnomeKeyringResult result,
- const char *string,
- void *data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- if (result == GNOME_KEYRING_RESULT_OK && string != NULL)
- {
- key_info->keyring_name = strdup(string);
- }
- else
- {
- free((void*)key_info->keyring_name);
- key_info->keyring_name = NULL;
- }
-
- g_main_loop_quit(key_info->loop);
-
- return;
-}
-
/* Returns the default keyring name, allocated in RESULT_POOL. */
static char*
get_default_keyring_name(apr_pool_t *result_pool)
{
- char *def = NULL;
- struct gnome_keyring_baton key_info;
-
- key_info.info = NULL;
- key_info.keyring_name = NULL;
+ char *name, *def;
+ GnomeKeyringResult gkr;
- /* Finds default keyring. */
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_get_default_keyring(callback_default_keyring, &key_info, NULL);
- g_main_loop_run(key_info.loop);
-
- if (key_info.keyring_name == NULL)
- {
- callback_destroy_data_keyring(&key_info);
- return NULL;
- }
+ gkr = gnome_keyring_get_default_keyring_sync(&name);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
+ return NULL;
- def = apr_pstrdup(result_pool, key_info.keyring_name);
- callback_destroy_data_keyring(&key_info);
+ def = apr_pstrdup(result_pool, name);
+ g_free(name);
return def;
}
@@ -171,28 +70,22 @@ get_default_keyring_name(apr_pool_t *res
static svn_boolean_t
check_keyring_is_locked(const char *keyring_name)
{
- struct gnome_keyring_baton key_info;
+ GnomeKeyringInfo *info;
+ svn_boolean_t locked;
+ GnomeKeyringResult gkr;
- key_info.info = NULL;
- key_info.keyring_name = NULL;
+ gkr = gnome_keyring_get_info_sync(keyring_name, &info);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
+ return FALSE;
- /* Get details about the default keyring. */
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_get_info(keyring_name, callback_get_info_keyring, &key_info,
- NULL);
- g_main_loop_run(key_info.loop);
-
- if (key_info.info == NULL)
- {
- callback_destroy_data_keyring(&key_info);
- return FALSE;
- }
-
- /* Check if keyring is locked. */
- if (gnome_keyring_info_get_is_locked(key_info.info))
- return TRUE;
+ if (gnome_keyring_info_get_is_locked(info))
+ locked = TRUE;
else
- return FALSE;
+ locked = FALSE;
+
+ gnome_keyring_info_free(info);
+
+ return locked;
}
/* Unlock the KEYRING_NAME with the KEYRING_PASSWORD. If KEYRING was
@@ -202,34 +95,19 @@ unlock_gnome_keyring(const char *keyring
const char *keyring_password,
apr_pool_t *pool)
{
- struct gnome_keyring_baton key_info;
+ GnomeKeyringInfo *info;
+ GnomeKeyringResult gkr;
- key_info.info = NULL;
- key_info.keyring_name = NULL;
+ gkr = gnome_keyring_get_info_sync(keyring_name, &info);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
+ return FALSE;
- /* Get details about the default keyring. */
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_get_info(keyring_name, callback_get_info_keyring,
- &key_info, NULL);
- g_main_loop_run(key_info.loop);
-
- if (key_info.info == NULL)
- {
- callback_destroy_data_keyring(&key_info);
- return FALSE;
- }
- else
- {
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_unlock(keyring_name, keyring_password,
- callback_done, &key_info, NULL);
- g_main_loop_run(key_info.loop);
- }
- callback_destroy_data_keyring(&key_info);
- if (check_keyring_is_locked(keyring_name))
+ gkr = gnome_keyring_unlock_sync(keyring_name, keyring_password);
+ gnome_keyring_info_free(info);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
return FALSE;
- return TRUE;
+ return check_keyring_is_locked(keyring_name);
}
Modified: subversion/branches/authzperf/subversion/libsvn_client/checkout.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_client/checkout.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_client/checkout.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_client/checkout.c Sat Jan 3 14:00:41 2015
@@ -67,6 +67,7 @@ initialize_area(const char *local_abspat
svn_error_t *
svn_client__checkout_internal(svn_revnum_t *result_rev,
+ svn_boolean_t *timestamp_sleep,
const char *url,
const char *local_abspath,
const svn_opt_revision_t *peg_revision,
@@ -74,16 +75,16 @@ svn_client__checkout_internal(svn_revnum
svn_depth_t depth,
svn_boolean_t ignore_externals,
svn_boolean_t allow_unver_obstructions,
- svn_boolean_t *timestamp_sleep,
+ svn_ra_session_t *ra_session,
svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+ apr_pool_t *scratch_pool)
{
svn_node_kind_t kind;
svn_client__pathrev_t *pathrev;
/* Sanity check. Without these, the checkout is meaningless. */
SVN_ERR_ASSERT(local_abspath != NULL);
- SVN_ERR_ASSERT(svn_uri_is_canonical(url, pool));
+ SVN_ERR_ASSERT(svn_uri_is_canonical(url, scratch_pool));
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
/* Fulfill the docstring promise of svn_client_checkout: */
@@ -92,21 +93,38 @@ svn_client__checkout_internal(svn_revnum
&& (revision->kind != svn_opt_revision_head))
return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
- {
- apr_pool_t *session_pool = svn_pool_create(pool);
- svn_ra_session_t *ra_session;
-
- /* Get the RA connection. */
- SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &pathrev,
- url, NULL, peg_revision,
- revision, ctx, session_pool));
-
- pathrev = svn_client__pathrev_dup(pathrev, pool);
- SVN_ERR(svn_ra_check_path(ra_session, "", pathrev->rev, &kind,
- session_pool));
+ /* Get the RA connection, if needed. */
+ if (ra_session)
+ {
+ svn_error_t *err = svn_ra_reparent(ra_session, url, scratch_pool);
- svn_pool_destroy(session_pool);
- }
+ if (err)
+ {
+ if (err->apr_err == SVN_ERR_RA_ILLEGAL_URL)
+ {
+ svn_error_clear(err);
+ ra_session = NULL;
+ }
+ else
+ return svn_error_trace(err);
+ }
+ else
+ {
+ SVN_ERR(svn_client__resolve_rev_and_url(&pathrev,
+ ra_session, url,
+ peg_revision, revision,
+ ctx, scratch_pool));
+ }
+ }
+
+ if (!ra_session)
+ {
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &pathrev,
+ url, NULL, peg_revision,
+ revision, ctx, scratch_pool));
+ }
+
+ SVN_ERR(svn_ra_check_path(ra_session, "", pathrev->rev, &kind, scratch_pool));
if (kind == svn_node_none)
return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
@@ -116,31 +134,35 @@ svn_client__checkout_internal(svn_revnum
(SVN_ERR_UNSUPPORTED_FEATURE , NULL,
_("URL '%s' refers to a file, not a directory"), pathrev->url);
- SVN_ERR(svn_io_check_path(local_abspath, &kind, pool));
+ SVN_ERR(svn_io_check_path(local_abspath, &kind, scratch_pool));
if (kind == svn_node_none)
{
/* Bootstrap: create an incomplete working-copy root dir. Its
entries file should only have an entry for THIS_DIR with a
URL, revnum, and an 'incomplete' flag. */
- SVN_ERR(svn_io_make_dir_recursively(local_abspath, pool));
- SVN_ERR(initialize_area(local_abspath, pathrev, depth, ctx, pool));
+ SVN_ERR(svn_io_make_dir_recursively(local_abspath, scratch_pool));
+ SVN_ERR(initialize_area(local_abspath, pathrev, depth, ctx,
+ scratch_pool));
}
else if (kind == svn_node_dir)
{
int wc_format;
const char *entry_url;
- SVN_ERR(svn_wc_check_wc2(&wc_format, ctx->wc_ctx, local_abspath, pool));
+ SVN_ERR(svn_wc_check_wc2(&wc_format, ctx->wc_ctx, local_abspath,
+ scratch_pool));
+
if (! wc_format)
{
- SVN_ERR(initialize_area(local_abspath, pathrev, depth, ctx, pool));
+ SVN_ERR(initialize_area(local_abspath, pathrev, depth, ctx,
+ scratch_pool));
}
else
{
/* Get PATH's URL. */
SVN_ERR(svn_wc__node_get_url(&entry_url, ctx->wc_ctx, local_abspath,
- pool, pool));
+ scratch_pool, scratch_pool));
/* If PATH's existing URL matches the incoming one, then
just update. This allows 'svn co' to restart an
@@ -150,24 +172,25 @@ svn_client__checkout_internal(svn_revnum
SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
_("'%s' is already a working copy for a"
" different URL"),
- svn_dirent_local_style(local_abspath, pool));
+ svn_dirent_local_style(local_abspath, scratch_pool));
}
}
else
{
return svn_error_createf(SVN_ERR_WC_NODE_KIND_CHANGE, NULL,
_("'%s' already exists and is not a directory"),
- svn_dirent_local_style(local_abspath, pool));
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
}
/* Have update fix the incompleteness. */
- SVN_ERR(svn_client__update_internal(result_rev, local_abspath,
- revision, depth, TRUE,
+ SVN_ERR(svn_client__update_internal(result_rev, timestamp_sleep,
+ local_abspath, revision, depth, TRUE,
ignore_externals,
allow_unver_obstructions,
TRUE /* adds_as_modification */,
- FALSE, FALSE,
- timestamp_sleep, ctx, pool));
+ FALSE, FALSE, ra_session,
+ ctx, scratch_pool));
return SVN_NO_ERROR;
}
@@ -190,10 +213,12 @@ svn_client_checkout3(svn_revnum_t *resul
SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
- err = svn_client__checkout_internal(result_rev, URL, local_abspath,
+ err = svn_client__checkout_internal(result_rev, &sleep_here,
+ URL, local_abspath,
peg_revision, revision, depth,
ignore_externals,
- allow_unver_obstructions, &sleep_here,
+ allow_unver_obstructions,
+ NULL /* ra_session */,
ctx, pool);
if (sleep_here)
svn_io_sleep_for_timestamps(local_abspath, pool);
Modified: subversion/branches/authzperf/subversion/libsvn_client/cleanup.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_client/cleanup.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_client/cleanup.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_client/cleanup.c Sat Jan 3 14:00:41 2015
@@ -148,8 +148,8 @@ cleanup_status_walk(void *baton,
notify = svn_wc_create_notify(local_abspath,
svn_wc_notify_cleanup_external,
scratch_pool);
- (*b->ctx->notify_func2)(b->ctx->notify_baton2, notify,
- scratch_pool);
+ b->ctx->notify_func2(b->ctx->notify_baton2, notify,
+ scratch_pool);
}
err = do_cleanup(local_abspath,
@@ -208,7 +208,7 @@ cleanup_status_walk(void *baton,
notify = svn_wc_create_notify(local_abspath, svn_wc_notify_delete,
scratch_pool);
notify->kind = kind_on_disk;
- (*b->ctx->notify_func2)(b->ctx->notify_baton2, notify, scratch_pool);
+ b->ctx->notify_func2(b->ctx->notify_baton2, notify, scratch_pool);
}
return SVN_NO_ERROR;
Modified: subversion/branches/authzperf/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_client/client.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_client/client.h (original)
+++ subversion/branches/authzperf/subversion/libsvn_client/client.h Sat Jan 3 14:00:41 2015
@@ -523,10 +523,14 @@ svn_client__make_local_parents(const cha
(with depth=empty) any parent directories of the requested update
target which are missing from the working copy.
+ If RA_SESSION is NOT NULL, it may be used to avoid creating a new
+ session. The session may point to a different URL after returning.
+
NOTE: You may not specify both INNERUPDATE and MAKE_PARENTS as true.
*/
svn_error_t *
svn_client__update_internal(svn_revnum_t *result_rev,
+ svn_boolean_t *timestamp_sleep,
const char *local_abspath,
const svn_opt_revision_t *revision,
svn_depth_t depth,
@@ -536,7 +540,7 @@ svn_client__update_internal(svn_revnum_t
svn_boolean_t adds_as_modification,
svn_boolean_t make_parents,
svn_boolean_t innerupdate,
- svn_boolean_t *timestamp_sleep,
+ svn_ra_session_t *ra_session,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
@@ -552,11 +556,6 @@ svn_client__update_internal(svn_revnum_t
DEPTH must be a definite depth, not (e.g.) svn_depth_unknown.
- RA_CACHE is a pointer to a cache of information for the URL at
- REVISION based on the PEG_REVISION. Any information not in
- *RA_CACHE is retrieved by a round-trip to the repository. RA_CACHE
- may be NULL which indicates that no cache information is available.
-
If IGNORE_EXTERNALS is true, do no externals processing.
Set *TIMESTAMP_SLEEP to TRUE if a sleep is required; otherwise do not
@@ -567,9 +566,13 @@ svn_client__update_internal(svn_revnum_t
unversioned children of LOCAL_ABSPATH that obstruct items added from
the repos are tolerated; if FALSE, these obstructions cause the checkout
to fail.
+
+ If RA_SESSION is NOT NULL, it may be used to avoid creating a new
+ session. The session may point to a different URL after returning.
*/
svn_error_t *
svn_client__checkout_internal(svn_revnum_t *result_rev,
+ svn_boolean_t *timestamp_sleep,
const char *URL,
const char *local_abspath,
const svn_opt_revision_t *peg_revision,
@@ -577,7 +580,7 @@ svn_client__checkout_internal(svn_revnum
svn_depth_t depth,
svn_boolean_t ignore_externals,
svn_boolean_t allow_unver_obstructions,
- svn_boolean_t *timestamp_sleep,
+ svn_ra_session_t *ra_session,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
@@ -1010,6 +1013,9 @@ svn_client__do_commit(const char *base_u
change *TIMESTAMP_SLEEP. The output will be valid even if the function
returns an error.
+ If RA_SESSION is NOT NULL, it may be used to avoid creating a new
+ session. The session may point to a different URL after returning.
+
Use POOL for temporary allocation. */
svn_error_t *
svn_client__handle_externals(apr_hash_t *externals_new,
@@ -1018,6 +1024,7 @@ svn_client__handle_externals(apr_hash_t
const char *target_abspath,
svn_depth_t requested_depth,
svn_boolean_t *timestamp_sleep,
+ svn_ra_session_t *ra_session,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
Modified: subversion/branches/authzperf/subversion/libsvn_client/cmdline.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_client/cmdline.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_client/cmdline.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_client/cmdline.c Sat Jan 3 14:00:41 2015
@@ -200,6 +200,15 @@ svn_client_args_to_target_array2(apr_arr
SVN_ERR(svn_opt__split_arg_at_peg_revision(&true_target, &peg_rev,
utf8_target, pool));
+ /* Reject the form "@abc", a peg specifier with no path. */
+ if (true_target[0] == '\0' && peg_rev[0] != '\0')
+ {
+ return svn_error_createf(SVN_ERR_BAD_FILENAME, NULL,
+ _("'%s' is just a peg revision. "
+ "Maybe try '%s@' instead?"),
+ utf8_target, utf8_target);
+ }
+
/* URLs and wc-paths get treated differently. */
if (svn_path_is_url(true_target))
{
Modified: subversion/branches/authzperf/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_client/commit.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_client/commit.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_client/commit.c Sat Jan 3 14:00:41 2015
@@ -250,39 +250,18 @@ post_process_commit_item(svn_wc_committe
remove_lock = TRUE;
return svn_error_trace(
- svn_wc_queue_committed3(queue, wc_ctx, item->path,
+ svn_wc_queue_committed4(queue, wc_ctx, item->path,
loop_recurse,
+ 0 != (item->state_flags &
+ (SVN_CLIENT_COMMIT_ITEM_ADD
+ | SVN_CLIENT_COMMIT_ITEM_DELETE
+ | SVN_CLIENT_COMMIT_ITEM_TEXT_MODS
+ | SVN_CLIENT_COMMIT_ITEM_PROP_MODS)),
item->incoming_prop_changes,
remove_lock, !keep_changelists,
sha1_checksum, scratch_pool));
}
-/* Do similar handling as post_process_commit_item() but for items that
- * are commit items, but aren't actual changes. Most importantly
- * remove lock tokens. */
-static svn_error_t *
-post_process_no_commit_item(const svn_client_commit_item3_t *item,
- svn_wc_context_t *wc_ctx,
- svn_boolean_t keep_changelists,
- svn_boolean_t keep_locks,
- apr_pool_t *scratch_pool)
-{
- if ((item->state_flags & SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN)
- && !keep_locks)
- {
- SVN_ERR(svn_wc_remove_lock2(wc_ctx, item->path, scratch_pool));
- }
-
- if (!keep_changelists)
- SVN_ERR(svn_wc_set_changelist2(wc_ctx, item->path, NULL,
- svn_depth_empty, NULL,
- NULL, NULL,
- NULL, NULL,
- scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
/* Given a list of committables described by their common base abspath
BASE_ABSPATH and a list of relative dirents TARGET_RELPATHS determine
which absolute paths must be locked to commit all these targets and
@@ -943,11 +922,6 @@ svn_client_commit6(const apr_array_heade
svn_client_commit_item3_t *item
= APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *);
- if (! (item->state_flags & ~ SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN))
- {
- continue; /* Nothing to post process via the queue */
- }
-
svn_pool_clear(iterpool);
bump_err = post_process_commit_item(
queue, item, ctx->wc_ctx,
@@ -969,23 +943,6 @@ svn_client_commit6(const apr_array_heade
if (bump_err)
goto cleanup;
-
- for (i = 0; i < commit_items->nelts; i++)
- {
- svn_client_commit_item3_t *item
- = APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *);
-
- if (item->state_flags & ~ SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN)
- continue; /* Already processed via the queue */
-
- svn_pool_clear(iterpool);
- bump_err = post_process_no_commit_item(
- item, ctx->wc_ctx,
- keep_changelists, keep_locks,
- iterpool);
- if (bump_err)
- goto cleanup;
- }
}
cleanup:
Modified: subversion/branches/authzperf/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_client/commit_util.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_client/commit_util.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_client/commit_util.c Sat Jan 3 14:00:41 2015
@@ -779,7 +779,6 @@ harvest_status_callback(void *status_bat
wc_ctx, svn_dirent_dirname(local_abspath,
scratch_pool),
FALSE /* ignore_enoent */,
- FALSE /* show_hidden */,
scratch_pool, scratch_pool));
if (copy_mode_root || status->switched || node_rev != dir_rev)
@@ -1650,7 +1649,7 @@ do_item_commit(void **dir_baton,
{
notify->kind = item->kind;
notify->path_prefix = icb->notify_path_prefix;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, pool);
+ ctx->notify_func2(ctx->notify_baton2, notify, pool);
}
}
Modified: subversion/branches/authzperf/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_client/copy.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_client/copy.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_client/copy.c Sat Jan 3 14:00:41 2015
@@ -1058,8 +1058,13 @@ repos_to_repos_copy(const apr_array_head
SVN_ERR(svn_ra_check_path(ra_session, dst_rel, SVN_INVALID_REVNUM,
&dst_kind, pool));
if (dst_kind != svn_node_none)
- return svn_error_createf(SVN_ERR_FS_ALREADY_EXISTS, NULL,
- _("Path '%s' already exists"), dst_rel);
+ {
+ const char *path = svn_uri_skip_ancestor(repos_root,
+ pair->dst_abspath_or_url,
+ pool);
+ return svn_error_createf(SVN_ERR_FS_ALREADY_EXISTS, NULL,
+ _("Path '/%s' already exists"), path);
+ }
/* More info for our INFO structure. */
info->src_path = src_rel;
@@ -1101,12 +1106,15 @@ repos_to_repos_copy(const apr_array_head
item = svn_client_commit_item3_create(pool);
item->url = svn_path_url_add_component2(top_url, info->dst_path,
pool);
- item->state_flags = SVN_CLIENT_COMMIT_ITEM_ADD;
+ item->state_flags = SVN_CLIENT_COMMIT_ITEM_ADD
+ | SVN_CLIENT_COMMIT_ITEM_IS_COPY;
+ item->copyfrom_url = info->src_url;
+ item->copyfrom_rev = info->src_revnum;
APR_ARRAY_PUSH(commit_items, svn_client_commit_item3_t *) = item;
if (is_move && (! info->resurrection))
{
- item = apr_pcalloc(pool, sizeof(*item));
+ item = svn_client_commit_item3_create(pool);
item->url = svn_path_url_add_component2(top_url, info->src_path,
pool);
item->state_flags = SVN_CLIENT_COMMIT_ITEM_DELETE;
@@ -1609,7 +1617,6 @@ repos_to_wc_copy_single(svn_boolean_t *t
{
if (same_repositories)
{
- svn_boolean_t sleep_needed = FALSE;
const char *tmpdir_abspath, *tmp_abspath;
/* Find a temporary location in which to check out the copy source. */
@@ -1638,14 +1645,14 @@ repos_to_wc_copy_single(svn_boolean_t *t
ctx->notify_func2 = notification_adjust_func;
ctx->notify_baton2 = &nb;
- err = svn_client__checkout_internal(&pair->src_revnum,
+ err = svn_client__checkout_internal(&pair->src_revnum, timestamp_sleep,
pair->src_original,
tmp_abspath,
&pair->src_peg_revision,
&pair->src_op_revision,
svn_depth_infinity,
ignore_externals, FALSE,
- &sleep_needed, ctx, pool);
+ ra_session, ctx, pool);
ctx->notify_func2 = old_notify_func2;
ctx->notify_baton2 = old_notify_baton2;
@@ -1738,7 +1745,7 @@ repos_to_wc_copy_single(svn_boolean_t *t
svn_wc_notify_t *notify = svn_wc_create_notify(
dst_abspath, svn_wc_notify_add, pool);
notify->kind = pair->src_kind;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, pool);
+ ctx->notify_func2(ctx->notify_baton2, notify, pool);
}
return SVN_NO_ERROR;
Modified: subversion/branches/authzperf/subversion/libsvn_client/diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_client/diff.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_client/diff.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_client/diff.c Sat Jan 3 14:00:41 2015
@@ -154,9 +154,6 @@ adjust_paths_for_diff_labels(const char
new_path = ".";
else
return MAKE_ERR_BAD_RELATIVE_PATH(new_path, relative_to_dir);
-
- child_path = svn_dirent_is_child(relative_to_dir, new_path1,
- result_pool);
}
{
Modified: subversion/branches/authzperf/subversion/libsvn_client/diff_local.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_client/diff_local.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_client/diff_local.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_client/diff_local.c Sat Jan 3 14:00:41 2015
@@ -42,6 +42,7 @@
#include "svn_pools.h"
#include "svn_props.h"
#include "svn_sorts.h"
+#include "svn_subst.h"
#include "client.h"
#include "private/svn_sorts_private.h"
@@ -291,6 +292,68 @@ inner_dir_diff(const char *left_abspath,
return SVN_NO_ERROR;
}
+
+/* Translates *LEFT_ABSPATH to a temporary file if PROPS specify that the
+ file needs translation. *LEFT_ABSPATH is updated to point to a file that
+ lives at least as long as RESULT_POOL when translation is necessary.
+ Otherwise the value is not updated */
+static svn_error_t *
+translate_if_necessary(const char **local_abspath,
+ apr_hash_t *props,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const svn_string_t *eol_style_val;
+ const svn_string_t *keywords_val;
+ svn_subst_eol_style_t eol_style;
+ const char *eol;
+ apr_hash_t *keywords;
+ svn_stream_t *contents;
+ svn_stream_t *dst;
+
+ /* if (svn_hash_gets(props, SVN_PROP_SPECIAL))
+ ### TODO: Implement */
+
+ eol_style_val = svn_hash_gets(props, SVN_PROP_EOL_STYLE);
+ keywords_val = svn_hash_gets(props, SVN_PROP_KEYWORDS);
+
+ if (eol_style_val)
+ svn_subst_eol_style_from_value(&eol_style, &eol, eol_style_val->data);
+ else
+ {
+ eol = NULL;
+ eol_style = svn_subst_eol_style_none;
+ }
+
+ if (keywords_val)
+ SVN_ERR(svn_subst_build_keywords3(&keywords, keywords_val->data,
+ APR_STRINGIFY(SVN_INVALID_REVNUM),
+ "", "", 0, "", scratch_pool));
+ else
+ keywords = NULL;
+
+ if (!svn_subst_translation_required(eol_style, eol, keywords, FALSE, FALSE))
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_stream_open_readonly(&contents, *local_abspath,
+ scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_stream_open_unique(&dst, local_abspath, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, scratch_pool));
+
+ dst = svn_subst_stream_translated(dst, eol, TRUE /* repair */,
+ keywords, FALSE /* expand */,
+ scratch_pool);
+
+ SVN_ERR(svn_stream_copy3(contents, dst, cancel_func, cancel_baton,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
/* Handles reporting of a file for inner_dir_diff */
static svn_error_t *
do_file_diff(const char *left_abspath,
@@ -356,6 +419,10 @@ do_file_diff(const char *left_abspath,
svn_hash_sets(left_props, SVN_PROP_MIME_TYPE,
svn_string_create(mime_type, scratch_pool));
}
+
+ SVN_ERR(translate_if_necessary(&left_abspath, left_props,
+ ctx->cancel_func, ctx->cancel_baton,
+ scratch_pool, scratch_pool));
}
else
left_props = NULL;
@@ -379,6 +446,11 @@ do_file_diff(const char *left_abspath,
svn_hash_sets(right_props, SVN_PROP_MIME_TYPE,
svn_string_create(mime_type, scratch_pool));
}
+
+ SVN_ERR(translate_if_necessary(&right_abspath, right_props,
+ ctx->cancel_func, ctx->cancel_baton,
+ scratch_pool, scratch_pool));
+
}
else
right_props = NULL;
Modified: subversion/branches/authzperf/subversion/libsvn_client/export.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_client/export.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_client/export.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_client/export.c Sat Jan 3 14:00:41 2015
@@ -1581,7 +1581,7 @@ svn_client_export5(svn_revnum_t *result_
= svn_wc_create_notify(to_path,
svn_wc_notify_update_completed, pool);
notify->revision = edit_revision;
- (*ctx->notify_func2)(ctx->notify_baton2, notify, pool);
+ ctx->notify_func2(ctx->notify_baton2, notify, pool);
}
if (result_rev)