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)