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

svn commit: r1565116 [1/3] - in /subversion/branches/fsfs-ucsnorm: ./ build/ac-macros/ build/generator/ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ subversion/bindings/javahl/src/org/apache/s...

Author: brane
Date: Thu Feb  6 08:45:07 2014
New Revision: 1565116

URL: http://svn.apache.org/r1565116
Log:
On the fsfs-ucsnorm branch: Sync with trunk up to r1565115.

Added:
    subversion/branches/fsfs-ucsnorm/subversion/include/svn_client_mtcc.h
      - copied unchanged from r1565115, subversion/trunk/subversion/include/svn_client_mtcc.h
    subversion/branches/fsfs-ucsnorm/tools/buildbot/master/README
      - copied unchanged from r1565115, subversion/trunk/tools/buildbot/master/README
Removed:
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/mtcc.h
    subversion/branches/fsfs-ucsnorm/tools/buildbot/master/Feeder.py
    subversion/branches/fsfs-ucsnorm/tools/buildbot/master/SVNMailNotifier.py
    subversion/branches/fsfs-ucsnorm/tools/buildbot/master/master.cfg
    subversion/branches/fsfs-ucsnorm/tools/buildbot/master/private-sample.py
    subversion/branches/fsfs-ucsnorm/tools/buildbot/master/public_html/
Modified:
    subversion/branches/fsfs-ucsnorm/   (props changed)
    subversion/branches/fsfs-ucsnorm/CHANGES
    subversion/branches/fsfs-ucsnorm/build.conf
    subversion/branches/fsfs-ucsnorm/build/ac-macros/java.m4
    subversion/branches/fsfs-ucsnorm/build/generator/gen_win_dependencies.py
    subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/ClientContext.cpp
    subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/JNIUtil.cpp
    subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/JNIUtil.h
    subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/OperationContext.cpp
    subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/OperationContext.h
    subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/RemoteSessionContext.cpp
    subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/TunnelAgent.java
    subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java
    subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java
    subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
    subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java
    subversion/branches/fsfs-ucsnorm/subversion/include/private/svn_wc_private.h
    subversion/branches/fsfs-ucsnorm/subversion/include/svn_client.h
    subversion/branches/fsfs-ucsnorm/subversion/include/svn_error_codes.h
    subversion/branches/fsfs-ucsnorm/subversion/include/svn_io.h
    subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra.h
    subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra_svn.h
    subversion/branches/fsfs-ucsnorm/subversion/include/svn_repos.h
    subversion/branches/fsfs-ucsnorm/subversion/include/svn_wc.h
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/add.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit_util.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy_foreign.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/diff.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/merge.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/mergeinfo.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/mtcc.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/patch.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/prop_commands.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/ra.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/revisions.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/util.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_delta/svndiff.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_delta/text_delta.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_fs_base/lock.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_fs_fs/cached_data.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_fs_fs/cached_data.h
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_fs_fs/dag.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_fs_fs/recovery.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_fs_fs/transaction.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_fs_x/   (props changed)
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_fs_x/cached_data.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_fs_x/index.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_fs_x/pack.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_ra_serf/update.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_ra_svn/client.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_ra_svn/cyrus_auth.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_ra_svn/deprecated.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_ra_svn/editorp.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_ra_svn/marshal.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_ra_svn/ra_svn.h
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_ra_svn/streams.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_repos/deprecated.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_repos/load-fs-vtable.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_repos/load.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_repos/reporter.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/cache-membuffer.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/config_file.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/deprecated.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/hash.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/nls.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/packed_data.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/sqlite.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/stream.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/subst.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/adm_crawler.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/adm_ops.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/deprecated.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/info.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/node.c
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc.h
    subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.c
    subversion/branches/fsfs-ucsnorm/subversion/mod_authz_svn/mod_authz_svn.c
    subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/repos.c
    subversion/branches/fsfs-ucsnorm/subversion/svnadmin/svnadmin.c
    subversion/branches/fsfs-ucsnorm/subversion/svnmucc/svnmucc.c
    subversion/branches/fsfs-ucsnorm/subversion/svnserve/serve.c
    subversion/branches/fsfs-ucsnorm/subversion/svnserve/svnserve.c
    subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/diff_tests.py
    subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnadmin_tests.py
    subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svntest/main.py
    subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_client/client-test.c
    subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_client/mtcc-test.c
    subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_ra/ra-test.c
    subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_subr/spillbuf-test.c
    subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_subr/stream-test.c
    subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_wc/pristine-store-test.c
    subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_wc/utils.c
    subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_wc/wc-test.c
    subversion/branches/fsfs-ucsnorm/subversion/tests/svn_test_fs.c
    subversion/branches/fsfs-ucsnorm/tools/dev/unix-build/Makefile.svn
    subversion/branches/fsfs-ucsnorm/tools/server-side/fsfs-stats.c

Propchange: subversion/branches/fsfs-ucsnorm/
------------------------------------------------------------------------------
  Merged /subversion/trunk:r1561502-1565115

Modified: subversion/branches/fsfs-ucsnorm/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/CHANGES?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/CHANGES (original)
+++ subversion/branches/fsfs-ucsnorm/CHANGES Thu Feb  6 08:45:07 2014
@@ -370,6 +370,53 @@ http://svn.apache.org/repos/asf/subversi
     * swig-pl: make svn_auth_set_parameter() usable (r1553823)
 
 
+Version 1.8.6
+(12 Feb 2014, from /branches/1.8.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.8.6
+
+ User-visible changes:
+  - Client-side bugfixes:
+    * use CryptoAPI to validate intermediary certificates on Windows (r1564623)
+    * fix automatic relocate for wcs not at repository root (r1541638 et al)
+    * diff: fix when target is a drive root on Windows (r1541635)
+    * wc: improve performance when used with SQLite 3.8 (r1542765)
+    * copy: fix some scenarios that broke the working copy (r1560690)
+    * move: fix errors when moving files between an external and the parent
+      working copy (r1551524, r1551579)
+    * log: resolve performance regression in certain scenarios (r1553101 et al)
+    * merge: decrease work to detect differences between 3 files (r1548486)
+    * checkout: don't require flush support for symlinks on Windows (r1547774)
+    * commit: don't change file permissions inappropriately (issue #4440)
+    * commit: fix assertion due to invalid pool lifetime (r1553376 et al)
+    * version: don't cut off the distribution version on Linux (r1544878 et al)
+    * flush stdout before exiting to avoid information being lost (r1499470)
+    * status: fix missing sentinel value on warning codes (r1543145)
+
+  - Server-side bugfixes:
+    * reduce memory usage during checkout and export (r1564215)
+    * fsfs: create rep-cache.db with proper permissions (issue #3437)
+    * mod_dav_svn: prevent crashes with SVNListParentPath on (CVE-2014-0032)
+    * mod_dav_svn: fix SVNAllowBulkUpdates directive merging (r1548105)
+    * mod_dav_svn: include requested property changes in reports (r1557522)
+    * svnserve: correct default cache size in help text (r1563110)
+    * svnadmin dump: reduce size of dump files with '--deltas' (r1554978)
+
+ Developer-visible changes:
+  - API changes:
+    * numerous documentation fixes
+    * svn_client_commit_item3_dup() fix pool lifetime issues (r1550803)
+    * ra_serf: properly ask multiple certificate validation providers for
+      acceptance of certificate failures (r1535532)
+    * release internal fs objects when closing commit editor (r1555499)
+    * svn_client_proplist4() don't call the callback multiple times for
+      the same path in order to deliver inherited properties (r1549858 et al)
+
+  - Bindings:
+    * javahl: make test suite run without installing on OS X (r1535115)
+    * swig: fix building out of tarball on OS X (r1555654)
+    * swig-pl: fix with --enable-sqlite-compatibility-version (r1559009)
+
+
 Version 1.8.5
 (25 November 2013, from /branches/1.8.x)
 http://svn.apache.org/repos/asf/subversion/tags/1.8.5
@@ -677,7 +724,7 @@ http://svn.apache.org/repos/asf/subversi
     * decreased default http timeout for ra_serf (issue #3968)
     * prevent ra_serf from corrupting the working copy (issue #3993)
     * ra_serf transmits property changes inline to reduce requests (r1378927)
-    * allow client to avoid SSL certificate prompts (issue #2410)
+    * by default avoid SSL certificate prompts in client (issue #2410)
     * improve interactive resolution of property conflicts (r1387678 et al)
     * make ra_serf raise an error upon delta-base mismatch (issue #4235)
     * tune ra_svn transmit buffer handling (r1391788)
@@ -925,6 +972,25 @@ http://svn.apache.org/repos/asf/subversi
     * fix some reference counting bugs in swig-py bindings (r1464899, r1466524)
 
 
+Version 1.7.15
+(12 Feb 2014, from /branches/1.7.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.7.15
+
+ User-visible changes:
+  - Client-side bugfixes:
+    * copy: fix some scenarios that broke the working copy (r1560690)
+    * diff: fix regressions due to fixes in 1.7.14 (issue #4460)
+
+  - Server-side bugfixes:
+    * mod_dav_svn: prevent crashes with SVNListParentPath on (CVE-2014-0032)
+    * reduce memory usage during checkout and export (r1564215)
+
+ Developer-visible changes:
+  - General:
+    * fix failure in checkout_tests.py
+    * support compiling against Cyrus sasl 2.1.25 (r1404912, r1413402)
+
+
 Version 1.7.14
 (25 Nov 2013, from /branches/1.7.x)
 http://svn.apache.org/repos/asf/subversion/tags/1.7.14

Modified: subversion/branches/fsfs-ucsnorm/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/build.conf?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/build.conf (original)
+++ subversion/branches/fsfs-ucsnorm/build.conf Thu Feb  6 08:45:07 2014
@@ -248,7 +248,7 @@ type = lib
 path = subversion/libsvn_client
 libs = libsvn_wc libsvn_ra libsvn_delta libsvn_diff libsvn_subr apriconv apr
 install = lib
-msvc-export = svn_client.h private/svn_client_private.h
+msvc-export = svn_client.h svn_client_mtcc.h private/svn_client_private.h
 
 # Routines for binary diffing and tree-deltas
 [libsvn_delta]
@@ -1561,7 +1561,7 @@ install = tools
 libs = libsvn_repos libsvn_fs libsvn_subr apr
 
 [svn-populate-node-origins-index]
-description = Repository node origin cache populate tool
+description = Tool to populate a repository's node origins index
 type = exe
 path = tools/server-side
 sources = svn-populate-node-origins-index.c

Modified: subversion/branches/fsfs-ucsnorm/build/ac-macros/java.m4
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/build/ac-macros/java.m4?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/build/ac-macros/java.m4 (original)
+++ subversion/branches/fsfs-ucsnorm/build/ac-macros/java.m4 Thu Feb  6 08:45:07 2014
@@ -194,7 +194,7 @@ AC_DEFUN(SVN_FIND_JDK,
       if test "$enable_debugging" = "yes"; then
         JAVAC_FLAGS="-g -Xlint -Xlint:unchecked -Xlint:serial -Xlint:path $JAVAC_FLAGS"
         if test -z "$JAVAC_COMPAT_FLAGS"; then
-          JAVAC_COMPAT_FLAGS="$JAVAC_FLAGS -Xlint:-unchecked -Xlint:-deprecation -Xlint:-dep-ann"
+          JAVAC_COMPAT_FLAGS="$JAVAC_FLAGS -Xlint:-unchecked -Xlint:-deprecation -Xlint:-dep-ann -Xlint:-rawtypes"
         fi
       fi
     fi

Modified: subversion/branches/fsfs-ucsnorm/build/generator/gen_win_dependencies.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/build/generator/gen_win_dependencies.py?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/build/generator/gen_win_dependencies.py (original)
+++ subversion/branches/fsfs-ucsnorm/build/generator/gen_win_dependencies.py Thu Feb  6 08:45:07 2014
@@ -358,6 +358,7 @@ class GenDependenciesBase(gen_base.Gener
       lib_dir = os.path.join(self.apr_path, 'LibR')
       dll_dir = None
       debug_dll_dir = None
+      dll_name = None
       defines.extend(["APR_DECLARE_STATIC"])
 
       if not os.path.isdir(lib_dir) and \
@@ -388,19 +389,20 @@ class GenDependenciesBase(gen_base.Gener
       else:
         dll_dir = os.path.join(self.apr_path, 'bin')
         debug_dll_dir = None
-        
-    bin_files = os.listdir(dll_dir)
-    if debug_dll_dir and os.path.isdir(debug_dll_dir):
-      debug_bin_files = os.listdir(debug_dll_dir)
-    else:
-      debug_bin_files = bin_files 
-    
+
     extra_bin = []
-    
-    for bin in bin_files:
-      if bin in debug_bin_files:
-        if re.match('^(lib)?apr[-_].*' + suffix + '(d)?.dll$', bin):
-          extra_bin.append(bin)
+
+    if dll_dir:        
+      bin_files = os.listdir(dll_dir)
+      if debug_dll_dir and os.path.isdir(debug_dll_dir):
+        debug_bin_files = os.listdir(debug_dll_dir)
+      else:
+        debug_bin_files = bin_files 
+      
+      for bin in bin_files:
+        if bin in debug_bin_files:
+          if re.match('^(lib)?apr[-_].*' + suffix + '(d)?.dll$', bin):
+            extra_bin.append(bin)
       
     self._libraries['apr'] = SVNCommonLibrary('apr', inc_path, lib_dir, lib_name,
                                               apr_version,
@@ -465,7 +467,8 @@ class GenDependenciesBase(gen_base.Gener
       lib_dir = os.path.join(self.apr_util_path, 'LibR')
       dll_dir = None
       debug_dll_dir = None
-      defines.extend(["APR_DECLARE_STATIC"])
+      dll_name = None
+      defines.extend(["APU_DECLARE_STATIC"])
       
       if not os.path.isdir(lib_dir) and \
          os.path.isfile(os.path.join(self.apr_util_path, 'lib', lib_name)):
@@ -494,18 +497,19 @@ class GenDependenciesBase(gen_base.Gener
         dll_dir = os.path.join(self.apr_util_path, 'bin')
         debug_dll_dir = None
 
-    bin_files = os.listdir(dll_dir)
-    if debug_dll_dir and os.path.isdir(debug_dll_dir):
-      debug_bin_files = os.listdir(debug_dll_dir)
-    else:
-      debug_bin_files = bin_files 
-
     extra_bin = []
+    
+    if dll_dir:
+      bin_files = os.listdir(dll_dir)
+      if debug_dll_dir and os.path.isdir(debug_dll_dir):
+        debug_bin_files = os.listdir(debug_dll_dir)
+      else:
+        debug_bin_files = bin_files 
 
-    for bin in bin_files:
-      if bin in debug_bin_files:
-        if re.match('^(lib)?aprutil[-_].*' + suffix + '(d)?.dll$', bin):
-          extra_bin.append(bin)
+      for bin in bin_files:
+        if bin in debug_bin_files:
+          if re.match('^(lib)?aprutil[-_].*' + suffix + '(d)?.dll$', bin):
+            extra_bin.append(bin)
 
     self._libraries['aprutil'] = SVNCommonLibrary('apr-util', inc_path, lib_dir,
                                                    lib_name,

Modified: subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/ClientContext.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/ClientContext.cpp?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/ClientContext.cpp (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/ClientContext.cpp Thu Feb  6 08:45:07 2014
@@ -75,7 +75,6 @@ ClientContext::ClientContext(jobject jsv
       {
         m_context->check_tunnel_func = checkTunnel;
         m_context->open_tunnel_func = openTunnel;
-        m_context->close_tunnel_func = closeTunnel;
         m_context->tunnel_baton = m_jtunnelcb;
       }
 }
@@ -91,14 +90,12 @@ void ClientContext::setTunnelCallback(jo
     {
       m_context->check_tunnel_func = checkTunnel;
       m_context->open_tunnel_func = openTunnel;
-      m_context->close_tunnel_func = closeTunnel;
       m_context->tunnel_baton = m_jtunnelcb;
     }
   else
     {
       m_context->check_tunnel_func = NULL;
       m_context->open_tunnel_func = NULL;
-      m_context->close_tunnel_func = NULL;
       m_context->tunnel_baton = NULL;
     }
 }

Modified: subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/JNIUtil.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/JNIUtil.cpp?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/JNIUtil.cpp (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/JNIUtil.cpp Thu Feb  6 08:45:07 2014
@@ -46,6 +46,7 @@
 #include <apr_time.h>
 
 #include "svn_pools.h"
+#include "svn_error.h"
 #include "svn_fs.h"
 #include "svn_ra.h"
 #include "svn_utf.h"
@@ -117,6 +118,34 @@ bool initialize_jni_util(JNIEnv *env)
   return JNIUtil::JNIGlobalInit(env);
 }
 
+namespace {
+
+volatile svn_atomic_t *gentle_crash_write_loc = NULL;
+
+svn_error_t *
+gently_crash_the_jvm(svn_boolean_t can_return,
+                     const char *file, int line, const char *expr)
+{
+  if (!can_return)
+    {
+      // Try not to abort; aborting prevents the JVM from creating
+      // a crash log, which is oh so useful for debugging.
+      // We can't just raise a SEGV signal, either, because it will
+      // be not be caught in the context that we're interested in
+      // getting the stack trace from.
+
+      // Try reading from and writing to the zero page
+      const svn_atomic_t zeropage = svn_atomic_read(gentle_crash_write_loc);
+      svn_atomic_set(gentle_crash_write_loc, zeropage);
+    }
+
+  // Forward to the standard malfunction handler, which does call
+  // abort when !can_return; this will only happen if the write to the
+  // zero page did not cause a SEGV.
+  return svn_error_raise_on_malfunction(can_return, file, line, expr);
+}
+} // Anonymous namespace
+
 /**
  * Initialize the environment for all requests.
  * This method must be called in a single-threaded context.
@@ -244,6 +273,10 @@ bool JNIUtil::JNIGlobalInit(JNIEnv *env)
   if (isExceptionThrown())
     return false;
 
+  // Set a malfunction handler that tries not to call abort, because
+  // that would prevent the JVM from creating a crash and stack log file.
+  svn_error_set_malfunction_handler(gently_crash_the_jvm);
+
   return true;
 }
 

Modified: subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/JNIUtil.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/JNIUtil.h?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/JNIUtil.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/JNIUtil.h Thu Feb  6 08:45:07 2014
@@ -285,4 +285,13 @@ class JNIUtil
     SVN_ERR(JNIUtil::checkJavaException((errorcode)));  \
   } while(0)
 
+#define SVN_JNI_CATCH_VOID(statement)                   \
+  do {                                                  \
+    do { statement; } while(0);                         \
+    if (JNIUtil::getEnv()->ExceptionCheck()) {          \
+      JNIUtil::getEnv()->ExceptionClear();              \
+      return;                                           \
+    }                                                   \
+  } while(0)
+
 #endif  // JNIUTIL_H

Modified: subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/OperationContext.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/OperationContext.cpp?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/OperationContext.cpp (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/OperationContext.cpp Thu Feb  6 08:45:07 2014
@@ -489,7 +489,8 @@ public:
     : request_in(NULL),
       request_out(NULL),
       response_in(NULL),
-      response_out(NULL)
+      response_out(NULL),
+      jclosecb(NULL)
     {
 #if APR_VERSION_AT_LEAST(1, 3, 0)
       status = apr_file_pipe_create_ex(&request_in, &request_out,
@@ -519,6 +520,7 @@ public:
   apr_file_t *response_in;
   apr_file_t *response_out;
   apr_status_t status;
+  jobject jclosecb;
 };
 
 jobject create_Channel(const char *class_name, JNIEnv *env, apr_file_t *fd)
@@ -572,10 +574,13 @@ OperationContext::checkTunnel(void *tunn
 }
 
 svn_error_t *
-OperationContext::openTunnel(apr_file_t **request, apr_file_t **response,
-                             void **tunnel_context, void *tunnel_baton,
+OperationContext::openTunnel(svn_stream_t **request, svn_stream_t **response,
+                             svn_ra_close_tunnel_func_t *close_func,
+                             void **close_baton,
+                             void *tunnel_baton,
                              const char *tunnel_name, const char *user,
                              const char *hostname, int port,
+                             svn_cancel_func_t cancel_func, void *cancel_baton,
                              apr_pool_t *pool)
 {
   TunnelContext *tc = new TunnelContext(pool);
@@ -586,9 +591,10 @@ OperationContext::openTunnel(apr_file_t 
           svn_error_wrap_apr(tc->status, _("Could not open tunnel streams")));
     }
 
-  *tunnel_context = tc;
-  *request = tc->request_out;
-  *response = tc->response_in;
+  *close_func = closeTunnel;
+  *close_baton = tc;
+  *request = svn_stream_from_aprfile2(tc->request_out, FALSE, pool);
+  *response = svn_stream_from_aprfile2(tc->response_in, FALSE, pool);
 
   JNIEnv *env = JNIUtil::getEnv();
 
@@ -613,60 +619,47 @@ OperationContext::openTunnel(apr_file_t 
       jclass cls = env->FindClass(JAVA_PACKAGE"/callback/TunnelAgent");
       SVN_JNI_CATCH(, SVN_ERR_BASE);
       SVN_JNI_CATCH(
-          mid = env->GetMethodID(cls, "openTunnel",
-                                 "(Ljava/nio/channels/ReadableByteChannel;"
-                                 "Ljava/nio/channels/WritableByteChannel;"
-                                 "Ljava/lang/String;"
-                                 "Ljava/lang/String;"
-                                 "Ljava/lang/String;I)V"),
+          mid = env->GetMethodID(
+              cls, "openTunnel",
+              "(Ljava/nio/channels/ReadableByteChannel;"
+              "Ljava/nio/channels/WritableByteChannel;"
+              "Ljava/lang/String;"
+              "Ljava/lang/String;"
+              "Ljava/lang/String;I)"
+              "L"JAVA_PACKAGE"/callback/TunnelAgent$CloseTunnelCallback;"),
           SVN_ERR_BASE);
     }
 
   jobject jtunnelcb = jobject(tunnel_baton);
   SVN_JNI_CATCH(
-      env->CallVoidMethod(jtunnelcb, mid, jrequest, jresponse,
-                          jtunnel_name, juser, jhostname, jint(port)),
+      tc->jclosecb = env->CallObjectMethod(
+          jtunnelcb, mid, jrequest, jresponse,
+          jtunnel_name, juser, jhostname, jint(port)),
       SVN_ERR_BASE);
 
   return SVN_NO_ERROR;
 }
 
-svn_error_t *
-OperationContext::closeTunnel(void *tunnel_context, void *tunnel_baton,
-                              const char *tunnel_name, const char *user,
-                              const char *hostname, int port)
+void
+OperationContext::closeTunnel(void *tunnel_context, void *)
 {
-  delete static_cast<TunnelContext*>(tunnel_context);
-
-  jstring jtunnel_name = JNIUtil::makeJString(tunnel_name);
-  SVN_JNI_CATCH(, SVN_ERR_BASE);
-
-  jstring juser = JNIUtil::makeJString(user);
-  SVN_JNI_CATCH(, SVN_ERR_BASE);
+  TunnelContext* tc = static_cast<TunnelContext*>(tunnel_context);
+  jobject jclosecb = tc->jclosecb;
+  delete tc;
 
-  jstring jhostname = JNIUtil::makeJString(hostname);
-  SVN_JNI_CATCH(, SVN_ERR_BASE);
+  if (!jclosecb)
+    return;
 
   JNIEnv *env = JNIUtil::getEnv();
 
   static jmethodID mid = 0;
   if (0 == mid)
     {
-      jclass cls = env->FindClass(JAVA_PACKAGE"/callback/TunnelAgent");
-      SVN_JNI_CATCH(, SVN_ERR_BASE);
-      SVN_JNI_CATCH(
-          mid = env->GetMethodID(cls, "closeTunnel",
-                                 "(Ljava/lang/String;"
-                                 "Ljava/lang/String;"
-                                 "Ljava/lang/String;I)V"),
-          SVN_ERR_BASE);
+      jclass cls;
+      SVN_JNI_CATCH_VOID(
+          cls= env->FindClass(
+              JAVA_PACKAGE"/callback/TunnelAgent$CloseTunnelCallback"));
+      SVN_JNI_CATCH_VOID(mid = env->GetMethodID(cls, "closeTunnel", "()V"));
     }
-
-  jobject jtunnelcb = jobject(tunnel_baton);
-  SVN_JNI_CATCH(
-      env->CallVoidMethod(jtunnelcb, mid,
-                          jtunnel_name, juser, jhostname, jint(port)),
-      SVN_ERR_BASE);
-
-  return SVN_NO_ERROR;
+  SVN_JNI_CATCH_VOID(env->CallVoidMethod(jclosecb, mid));
 }

Modified: subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/OperationContext.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/OperationContext.h?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/OperationContext.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/OperationContext.h Thu Feb  6 08:45:07 2014
@@ -69,16 +69,16 @@ class OperationContext
       void *tunnel_baton, const char *tunnel_name);
 
   static svn_error_t *openTunnel(
-      apr_file_t **request, apr_file_t **response,
-      void **tunnel_context, void *tunnel_baton,
+      svn_stream_t **request, svn_stream_t **response,
+      svn_ra_close_tunnel_func_t *close_func, void **close_baton,
+      void *tunnel_baton,
       const char *tunnel_name, const char *user,
       const char *hostname, int port,
+      svn_cancel_func_t cancel_func, void *cancel_baton,
       apr_pool_t *pool);
 
-  static svn_error_t *closeTunnel(
-      void *tunnel_context, void *tunnel_baton,
-      const char *tunnel_name, const char *user,
-      const char *hostname, int port);
+  static void closeTunnel(
+      void *tunnel_context, void *tunnel_baton);
 
  public:
   OperationContext(SVN::Pool &pool);

Modified: subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/RemoteSessionContext.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/RemoteSessionContext.cpp?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/RemoteSessionContext.cpp (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/native/RemoteSessionContext.cpp Thu Feb  6 08:45:07 2014
@@ -75,7 +75,6 @@ RemoteSessionContext::RemoteSessionConte
     {
       m_raCallbacks->check_tunnel_func = checkTunnel;
       m_raCallbacks->open_tunnel_func = openTunnel;
-      m_raCallbacks->close_tunnel_func = closeTunnel;
       m_raCallbacks->tunnel_baton = m_jtunnelcb;
     }
 }

Modified: subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/TunnelAgent.java
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/TunnelAgent.java?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/TunnelAgent.java (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/TunnelAgent.java Thu Feb  6 08:45:07 2014
@@ -50,6 +50,22 @@ public interface TunnelAgent
     boolean checkTunnel(String name);
 
     /**
+     * Callback interface returned from {@link #openTunnel()}.
+     */
+    public static interface CloseTunnelCallback
+    {
+        /**
+         * This callback method is called when a tunnel needs to be closed
+         * and the request and response streams detached from it.
+         * <p>
+         * <b>Note:</b> Errors on connection-close are not propagated
+         * to the implementation, therefore this method cannot throw
+         * any exceptions.
+         */
+        void closeTunnel();
+    }
+
+    /**
      * This callback method is called when a tunnel needs to be
      * created and the request and response streams attached to it.
      * @param request The request stream of the tunnel. The tunnel
@@ -63,21 +79,16 @@ public interface TunnelAgent
      * @param user the tunnel username
      * @param hostname the host part of the svn+tunnel:// URL
      * @param port the port part of the svn+tunnel:// URL
+     *
+     * @return an instance od {@link CloseTunnelCallback}, which will
+     *         be invoked when the connection is closed, or
+     *         <code>null</code>.
+     *
      * @throws any exception will abort the connection
      */
-    void openTunnel(ReadableByteChannel request, WritableByteChannel response,
-                    String name, String user, String hostname, int port)
-        throws Throwable;
-
-    /**
-     * This callback method is called when a tunnel needs to be closed
-     * and the request and response streams detached from it.
-     * @param name the name of the tunnel, as in
-     *                  <tt>svn+</tt><em>name</em><tt>://...</tt>
-     * @param user the tunnel username
-     * @param hostname the host part of the svn+tunnel:// URL
-     * @param port the port part of the svn+tunnel:// URL
-     */
-    void closeTunnel(String name, String user, String hostname, int port)
+    CloseTunnelCallback openTunnel(ReadableByteChannel request,
+                                   WritableByteChannel response,
+                                   String name, String user,
+                                   String hostname, int port)
         throws Throwable;
 }

Modified: subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java Thu Feb  6 08:45:07 2014
@@ -405,7 +405,7 @@ public class RemoteSession extends JNIOb
     /*
      * Private helper methods.
      */
-    private final static void maybe_clear(Map clearable)
+    private final static<K,V> void maybe_clear(Map<K,V> clearable)
     {
         if (clearable != null && !clearable.isEmpty())
             try {

Modified: subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java Thu Feb  6 08:45:07 2014
@@ -104,8 +104,10 @@ public class RevisionRange implements Co
             try
             {
                 long revNum = Long.parseLong(revisionElement.trim());
-                this.from = new Revision.Number(revNum);
-                this.to = this.from;
+                if (revNum <= 0)
+                    return;
+                this.to = new Revision.Number(revNum);
+                this.from = new Revision.Number(revNum - 1);
             }
             catch (NumberFormatException e)
             {
@@ -133,8 +135,17 @@ public class RevisionRange implements Co
     {
         if (from != null && to != null)
         {
-            String rep = (from.equals(to) ? from.toString()
-                          : from.toString() + '-' + to.toString());
+            String rep;
+
+            if (from.getKind() == Revision.Kind.number
+                && to.getKind() == Revision.Kind.number
+                && (((Revision.Number)from).getNumber() + 1
+                    == ((Revision.Number)to).getNumber()))
+                rep = to.toString();
+            else if (from.equals(to)) // Such ranges should never happen
+                rep = from.toString();
+            else
+                rep = from.toString() + '-' + to.toString();
             if (!inheritable)
                 return rep + '*';
             return rep;

Modified: subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Thu Feb  6 08:45:07 2014
@@ -3933,30 +3933,37 @@ public class BasicTests extends SVNTests
         assertEquals(1, result.size());
     }
 
-    private class Tunnel extends Thread implements TunnelAgent
+    private class Tunnel extends Thread
+        implements TunnelAgent, TunnelAgent.CloseTunnelCallback
     {
         public boolean checkTunnel(String name)
         {
             return name.equals("test");
         }
 
-        public void openTunnel(ReadableByteChannel request,
-                               WritableByteChannel response,
-                               String name, String user,
-                               String hostname, int port)
+        public TunnelAgent.CloseTunnelCallback
+            openTunnel(ReadableByteChannel request,
+                       WritableByteChannel response,
+                       String name, String user,
+                       String hostname, int port)
         {
             this.request = request;
             this.response = response;
             start();
+            return this;
         }
 
-        public void closeTunnel(String name, String user,
-                                String hostname, int port)
-            throws Throwable
-        {
-            request.close();
-            join();
-            response.close();
+        public void closeTunnel()
+        {
+            Throwable t = null;
+            try {
+                request.close();
+                join();
+                response.close();
+            } catch (Throwable ex) {
+                t = ex;
+            }
+            assertEquals("No exception thrown", null, t);
         }
 
         private ReadableByteChannel request;

Modified: subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java Thu Feb  6 08:45:07 2014
@@ -71,7 +71,7 @@ public class RunTests
                     try
                     {
                         Class<?> clazz = Class.forName(className);
-                        final Class<?>[] argTypes = new Class[] { String.class };
+                        final Class<?>[] argTypes = new Class<?>[] { String.class };
                         Constructor<?> ctor =
                             clazz.getDeclaredConstructor(argTypes);
                         methodName = methodName.substring(i + 1);

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/private/svn_wc_private.h?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/private/svn_wc_private.h Thu Feb  6 08:45:07 2014
@@ -465,18 +465,6 @@ svn_wc__node_get_repos_info(svn_revnum_t
                             apr_pool_t *result_pool,
                             apr_pool_t *scratch_pool);
 
-
-
-/**
- * Get the depth of @a local_abspath using @a wc_ctx.  If @a local_abspath is
- * not in the working copy, return @c SVN_ERR_WC_PATH_NOT_FOUND.
- */
-svn_error_t *
-svn_wc__node_get_depth(svn_depth_t *depth,
-                       svn_wc_context_t *wc_ctx,
-                       const char *local_abspath,
-                       apr_pool_t *scratch_pool);
-
 /**
  * Get the changed revision, date and author for @a local_abspath using @a
  * wc_ctx.  Allocate the return values in @a result_pool; use @a scratch_pool
@@ -524,6 +512,8 @@ svn_wc__node_get_url(const char **url,
  * If not NULL, sets @a revision, @a repos_relpath, @a repos_root_url and
  * @a repos_uuid to the original (if a copy) or their current values.
  *
+ * If not NULL, set @a depth, to the recorded depth on @a local_abspath.
+ *
  * If @a copy_root_abspath is not NULL, and @a *is_copy indicates that the
  * node was copied, set @a *copy_root_abspath to the local absolute path of
  * the root of the copied subtree containing the node. If the copied node is
@@ -542,6 +532,7 @@ svn_wc__node_get_origin(svn_boolean_t *i
                         const char **repos_relpath,
                         const char **repos_root_url,
                         const char **repos_uuid,
+                        svn_depth_t *depth,
                         const char **copy_root_abspath,
                         svn_wc_context_t *wc_ctx,
                         const char *local_abspath,
@@ -550,18 +541,6 @@ svn_wc__node_get_origin(svn_boolean_t *i
                         apr_pool_t *scratch_pool);
 
 /**
- * Set @a *is_deleted to TRUE if @a local_abspath is deleted, using
- * @a wc_ctx.  If @a local_abspath is not in the working copy, return
- * @c SVN_ERR_WC_PATH_NOT_FOUND.  Use @a scratch_pool for all temporary
- * allocations.
- */
-svn_error_t *
-svn_wc__node_is_status_deleted(svn_boolean_t *is_deleted,
-                               svn_wc_context_t *wc_ctx,
-                               const char *local_abspath,
-                               apr_pool_t *scratch_pool);
-
-/**
  * Set @a *deleted_ancestor_abspath to the root of the delete operation
  * that deleted @a local_abspath. If @a local_abspath itself was deleted
  * and has no deleted ancestor, @a *deleted_ancestor_abspath will equal

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_client.h?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_client.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_client.h Thu Feb  6 08:45:07 2014
@@ -1040,17 +1040,7 @@ typedef struct svn_client_ctx_t
    */
   svn_ra_open_tunnel_func_t open_tunnel_func;
 
-  /** Close-tunnel callback
-   *
-   * If not @c NULL, this callback will be invoked when the pool that
-   * owns the connection created by the open_tunnel callback is
-   * cleared or destroyed. This callback is used only for ra_svn and
-   * ignored by the other RA modules.
-   * @since New in 1.9.
-   */
-  svn_ra_close_tunnel_func_t close_tunnel_func;
-
-  /** A baton used with open_tunnel_func and close_tunnel_func.
+  /** The baton used with check_tunnel_func and open_tunnel_func.
    * @since New in 1.9.
    */
   void *tunnel_baton;
@@ -6653,189 +6643,6 @@ svn_client_open_ra_session(svn_ra_sessio
 
 /** @} end group: Client session related functions */
 
-/**
- *
- * @defgroup clnt_mtcc Multi Command Context related functions
- *
- * @{
- *
- */
-
-/** This is a structure which stores a list of repository commands
- * that can be played to a repository as a single operation
- *
- * Use svn_client_mtcc_create() to create instances
- *
- * @since New in 1.9.
- */
-typedef struct svn_client_mtcc_t svn_client_mtcc_t;
-
-/** Creates a new multicommand context for an operation on @a anchor_url and
- * its descendants.
- *
- * Allocate the context in @a result_pool and perform temporary allocations in
- * @a scratch_pool.
- *
- * @since New in 1.9.
- */
-svn_error_t *
-svn_client_mtcc_create(svn_client_mtcc_t **mtcc,
-                       const char *anchor_url,
-                       svn_revnum_t base_revision,
-                       svn_client_ctx_t *ctx,
-                       apr_pool_t *result_pool,
-                       apr_pool_t *scratch_pool);
-
-/** Adds a file add operation of @a relpath to @a mtcc. If @a src_checksum
- * is not null it will be provided to the repository to verify if the file
- * was transfered succesfull.
- *
- * Perform temporary allocations in @a scratch_pool.
- *
- * @note The current implementation keeps @a src_stream open until @a mtcc
- * is committed.
- *
- * @since New in 1.9.
- */
-svn_error_t *
-svn_client_mtcc_add_add_file(const char *relpath,
-                             svn_stream_t *src_stream,
-                             const svn_checksum_t *src_checksum,
-                             svn_client_mtcc_t *mtcc,
-                             apr_pool_t *scratch_pool);
-
-/** Adds a copy operation of the node @a src_relpath at revision @a revision
- * to @a dst_relpath to @a mtcc.
- *
- * Perform temporary allocations in @a scratch_pool.
- *
- * @since New in 1.9.
- */
-svn_error_t *
-svn_client_mtcc_add_copy(const char *src_relpath,
-                         svn_revnum_t revision,
-                         const char *dst_relpath,
-                         svn_client_mtcc_t *mtcc,
-                         apr_pool_t *scratch_pool);
-
-/** Adds a delete of @a relpath to @a mtcc.
- *
- * Perform temporary allocations in @a scratch_pool.
- *
- * @since New in 1.9.
- */
-svn_error_t *
-svn_client_mtcc_add_delete(const char *relpath,
-                          svn_client_mtcc_t *mtcc,
-                          apr_pool_t *scratch_pool);
-
-/** Adds an mkdir operation of @a relpath to @a mtcc.
- *
- * Perform temporary allocations in @a scratch_pool.
- *
- * @since New in 1.9.
- */
-svn_error_t *
-svn_client_mtcc_add_mkdir(const char *relpath,
-                          svn_client_mtcc_t *mtcc,
-                          apr_pool_t *scratch_pool);
-
-
-/** Adds a move operation of the node @a src_relpath to @a dst_relpath to
- * @a mtcc.
- *
- * Perform temporary allocations in @a scratch_pool.
- *
- * @since New in 1.9.
- */
-svn_error_t *
-svn_client_mtcc_add_move(const char *src_relpath,
-                         const char *dst_relpath,
-                         svn_client_mtcc_t *mtcc,
-                         apr_pool_t *scratch_pool);
-
-/** Adds a propset operation for the property @a propname to @a propval
- * (which can be NULL for a delete) on @a relpath to @a mtcc.
- *
- * If @a skip_checks is not FALSE Subversion defined properties are verified
- * for correctness like svn_client_propset_remote()
- *
- * Perform temporary allocations in @a scratch_pool.
- *
- * @since New in 1.9.
- */
-svn_error_t *
-svn_client_mtcc_add_propset(const char *relpath,
-                            const char *propname,
-                            const svn_string_t *propval,
-                            svn_boolean_t skip_checks,
-                            svn_client_mtcc_t *mtcc,
-                            apr_pool_t *scratch_pool);
-
-
-/** Adds an update file operation for @a relpath to @a mtcc.
- *
- * The final version of the file is provided with @a src_stream. If @a
- * src_checksum is provided it will be provided to the repository to verify
- * the final result.
- *
- * If @a base_checksum is provided it will be used by the repository to verify
- * if the base file matches this checksum.
- *
- * If @a base_stream is not NULL only the binary diff from @a base_stream to
- * @a src_stream is written to the repository.
- *
- * Perform temporary allocations in @a scratch_pool.
- *
- * @note Callers should assume that the mtcc requires @a src_stream and @a
- * base_stream to be valid until @a mtcc is committed.
- *
- * @since New in 1.9.
- */
-svn_error_t *
-svn_client_mtcc_add_update_file(const char *relpath,
-                                svn_stream_t *src_stream,
-                                const svn_checksum_t *src_checksum,
-                                svn_stream_t *base_stream,
-                                const svn_checksum_t *base_checksum,
-                                svn_client_mtcc_t *mtcc,
-                                apr_pool_t *scratch_pool);
-
-/** Obtains the kind of node at @a relpath in the current state of @a mtcc.
- * This value might be from the cache (in case of modifications, copies)
- * or fetched from the repository.
- *
- * If @a check_repository is TRUE, verify the node type with the repository at
- * least once and cache the result for further checks.
- *
- * When a node does not exist this functions sets @a *kind to @c svn_node_node.
- *
- * @since New in 1.9.
- */
-svn_error_t *
-svn_client_mtcc_check_path(svn_node_kind_t *kind,
-                           const char *relpath,
-                           svn_boolean_t check_repository,
-                           svn_client_mtcc_t *mtcc,
-                           apr_pool_t *scratch_pool);
-
-/** Commits all operations stored in @a mtcc as a new revision and destroys
- * @a mtcc.
- *
- * @since New in 1.9.
- */
-svn_error_t *
-svn_client_mtcc_commit(apr_hash_t *revprop_table,
-                       svn_commit_callback2_t commit_callback,
-                       void *commit_baton,
-                       svn_client_mtcc_t *mtcc,
-                       apr_pool_t *scratch_pool);
-
-
-/** @} end group: Multi Command Context related functions */
-
-
-
 /** @} */
 
 #ifdef __cplusplus

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_error_codes.h?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_error_codes.h Thu Feb  6 08:45:07 2014
@@ -322,6 +322,11 @@ SVN_ERROR_START
              SVN_ERR_STREAM_CATEGORY_START + 3,
              "Stream doesn't support seeking")
 
+  /** Since New in 1.9. */
+  SVN_ERRDEF(SVN_ERR_STREAM_NOT_SUPPORTED,
+             SVN_ERR_STREAM_CATEGORY_START + 4,
+             "Stream doesn't support this capability")
+
   /* node errors */
 
   SVN_ERRDEF(SVN_ERR_NODE_UNKNOWN_KIND,

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_io.h?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_io.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_io.h Thu Feb  6 08:45:07 2014
@@ -831,14 +831,16 @@ svn_io_dir_file_copy(const char *src_pat
  * On entry to the handler, the pointed-to value should be the amount
  * of data which can be read or the amount of data to write.  When the
  * handler returns, the value is reset to the amount of data actually
- * read or written.  Handlers are obliged to complete a read or write
- * to the maximum extent possible; thus, a short read with no
- * associated error implies the end of the input stream, and a short
- * write should never occur without an associated error.
- *
- * In Subversion 1.7 reset support was added as an optional feature of
- * streams. If a stream implements resetting it allows reading the data
- * again after a successful call to svn_stream_reset().
+ * read or written.  The write and full read handler are obliged to
+ * complete a read or write to the maximum extent possible; thus, a
+ * short read with no associated error implies the end of the input
+ * stream, and a short write should never occur without an associated
+ * error. In Subversion 1.9 the stream api was extended to also support
+ * limited reads via the new svn_stream_read2() api.
+ *
+ * In Subversion 1.7 mark, seek and reset support was added as an optional
+ * feature of streams. If a stream implements resetting it allows reading
+ * the data again after a successful call to svn_stream_reset().
  */
 typedef struct svn_stream_t svn_stream_t;
 
@@ -888,7 +890,15 @@ typedef svn_error_t *(*svn_stream_mark_f
  * @since New in 1.7.
  */
 typedef svn_error_t *(*svn_stream_seek_fn_t)(void *baton,
-                                         const svn_stream_mark_t *mark);
+                                             const svn_stream_mark_t *mark);
+
+/** Poll handler for generic streams that support incomplete reads, @see
+ * svn_stream_t and svn_stream_data_available().
+ *
+ * @since New in 1.9.
+ */
+typedef svn_error_t *(*svn_stream_data_available_fn_t)(void *baton,
+                                              svn_boolean_t *data_available);
 
 /** Create a generic stream.  @see svn_stream_t. */
 svn_stream_t *
@@ -900,7 +910,24 @@ void
 svn_stream_set_baton(svn_stream_t *stream,
                      void *baton);
 
-/** Set @a stream's read function to @a read_fn */
+/** Set @a stream's read functions to @a read_fn and @a read_full_fn. If
+ * @a read_full_fn is NULL a default implementation based on multiple calls
+ * to @a read_fn will be used.
+ *
+ * @since New in 1.9.
+ */
+void
+svn_stream_set_read2(svn_stream_t *stream,
+                     svn_read_fn_t read_fn,
+                     svn_read_fn_t read_full_fn);
+
+/** Set @a stream's read function to @a read_fn.
+ *
+ * This function sets only the full read function to read_fn.
+ *
+ * @deprecated Provided for backward compatibility with the 1.8 API.
+ */
+SVN_DEPRECATED
 void
 svn_stream_set_read(svn_stream_t *stream,
                     svn_read_fn_t read_fn);
@@ -939,6 +966,14 @@ void
 svn_stream_set_seek(svn_stream_t *stream,
                     svn_stream_seek_fn_t seek_fn);
 
+/** Set @a stream's data available function to @a data_available_fn
+ *
+ * @since New in 1.9.
+ */
+void
+svn_stream_set_data_available(svn_stream_t *stream,
+                              svn_stream_data_available_fn_t data_available);
+
 /** Create a stream that is empty for reading and infinite for writing. */
 svn_stream_t *
 svn_stream_empty(apr_pool_t *pool);
@@ -1172,7 +1207,40 @@ svn_stream_checksummed(svn_stream_t *str
                        svn_boolean_t read_all,
                        apr_pool_t *pool);
 
-/** Read from a generic stream. @see svn_stream_t. */
+/** Read from a generic stream until @a buffer is filled upto @a *len or
+ * until EOF is reached. @see svn_stream_t
+ *
+ * @since New in 1.9.
+ */
+svn_error_t *
+svn_stream_read_full(svn_stream_t *stream,
+                     char *buffer,
+                     apr_size_t *len);
+
+/** Read all currently available upto @a *len into @a buffer. Use
+ * svn_stream_read_full() if you want to wait for the buffer to be filled
+ * or EOF. If the stream doesn't support limited reads this function will
+ * return an #SVN_ERR_STREAM_NOT_SUPPORTED error.
+ *
+ * A 0 byte read signals the end of the stream.
+ *
+ * @since New in 1.9.
+ */
+svn_error_t *
+svn_stream_read2(svn_stream_t *stream,
+                 char *buffer,
+                 apr_size_t *len);
+
+
+/** Read from a generic stream until the buffer is completely filled or EOF.
+ * @see svn_stream_t.
+ *
+ * @note This function is a wrapper of svn_stream_read_full() now, which name
+ * better documents the behavior of this function.
+ *
+ * @deprecated Provided for backward compatibilty with the 1.8 API
+ */
+SVN_DEPRECATED
 svn_error_t *
 svn_stream_read(svn_stream_t *stream,
                 char *buffer,
@@ -1248,6 +1316,20 @@ svn_stream_mark(svn_stream_t *stream,
 svn_error_t *
 svn_stream_seek(svn_stream_t *stream, const svn_stream_mark_t *mark);
 
+/** When a stream supports polling for available data, obtain a boolean
+ * indicating whether data is waiting to be read. If the stream doesn't
+ * support polling this function returns a #SVN_ERR_STREAM_NOT_SUPPORTED
+ * error.
+ *
+ * If the data_available callback is implemented and the stream is at the end
+ * the stream will set @a *data_available to FALSE.
+ *
+ * @since New in 1.9.
+ */
+svn_error_t *
+svn_stream_data_available(svn_stream_t *stream,
+                          svn_boolean_t *data_available);
+
 /** Return a writable stream which, when written to, writes to both of the
  * underlying streams.  Both of these streams will be closed upon closure of
  * the returned stream; use svn_stream_disown() if this is not the desired

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra.h?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra.h Thu Feb  6 08:45:07 2014
@@ -284,47 +284,50 @@ typedef svn_boolean_t (*svn_ra_check_tun
     void *tunnel_baton, const char *tunnel_name);
 
 /**
+ * Callback function for closing a tunnel in ra_svn.
+ *
+ * This function will be called when the pool that owns the tunnel
+ * connection is cleared or destroyed.
+ *
+ * @a tunnel_context is the baton as returned from the 
+ * svn_ra_open_tunnel_func_t.
+ *
+ * @a tunnel_baton was returned by the open-tunnel callback.
+ *
+ * @since New in 1.9.
+ */
+typedef void (*svn_ra_close_tunnel_func_t)(
+    void *close_baton, void *tunnel_baton);
+
+/**
  * Callback function for opening a tunnel in ra_svn.
  *
  * Given the @a tunnel_name, tunnel @a user and server @a hostname and
  * @a port, open a tunnel to the server and return its file handles,
  * which are owned by @a pool, in @a request and @a response.
  *
- * @a request and @a response are the standard input and output,
+ * @a request and @a response represent the standard input and output,
  * respectively, of the process on the other end of the tunnel.
  *
- * @a tunnel_context will be passed on to the close-unnel callback.
+ * If @a *close_func is set it will be called with @a close_baton when
+ * the tunnel is closed.
  *
- * @a tunnel_baton is the baton as originally passed to ra_open.
+ * The optional @a cancel_func callback can be invoked as usual to allow
+ * the user to preempt potentially lengthy operations.
+ *
+ * @a tunnel_baton is the baton as set in the callbacks.
  *
  * @since New in 1.9.
  */
 typedef svn_error_t *(*svn_ra_open_tunnel_func_t)(
-    apr_file_t **request, apr_file_t **response,
-    void **tunnel_context, void *tunnel_baton,
+    svn_stream_t **request, svn_stream_t **response,
+    svn_ra_close_tunnel_func_t *close_func, void **close_baton,
+    void *tunnel_baton,
     const char *tunnel_name, const char *user,
     const char *hostname, int port,
+    svn_cancel_func_t cancel_func, void *cancel_baton,
     apr_pool_t *pool);
 
-/**
- * Callback function for closing a tunnel in ra_svn.
- *
- * This function will be called when the pool that owns the tunnel
- * connection is cleared or destroyed. It receives the @a baton that
- * was created by the open-tunnel callback, and the same
- * @a tunnel_name, @a user, @a hostname and @a port parameters.
- *
- * @a tunel_baton was returned by the open-tunnel callback.
- *
- * @a open_baton is the baton as originally passed to ra_open.
- *
- * @since New in 1.9.
- */
-typedef svn_error_t *(*svn_ra_close_tunnel_func_t)(
-    void *tunnel_context, void *tunnel_baton,
-    const char *tunnel_name, const char *user,
-    const char *hostname, int port);
-
 
 /**
  * The update Reporter.
@@ -614,16 +617,6 @@ typedef struct svn_ra_callbacks2_t
    */
   svn_ra_open_tunnel_func_t open_tunnel_func;
 
-  /** Close-tunnel callback
-   *
-   * If not @c NULL, this callback will be invoked when the pool that
-   * owns the connection created by the open_tunnel callback is
-   * cleared or destroyed. This callback is used only for ra_svn and
-   * ignored by the other RA modules.
-   * @since New in 1.9.
-   */
-  svn_ra_close_tunnel_func_t close_tunnel_func;
-
   /** A baton used with open_tunnel_func and close_tunnel_func.
    * @since New in 1.9.
    */

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra_svn.h?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra_svn.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra_svn.h Thu Feb  6 08:45:07 2014
@@ -165,9 +165,9 @@ typedef struct svn_ra_svn_item_t
 typedef svn_error_t *(*svn_ra_svn_edit_callback)(void *baton);
 
 /** Initialize a connection structure for the given socket or
- * input/output files.
+ * input/output streams.
  *
- * Either @a sock or @a in_file/@a out_file must be set, not both.
+ * Either @a sock or @a in_stream/@a out_stream must be set, not both.
  * @a compression_level specifies the desired network data compression
  * level (zlib) from 0 (no compression) to 9 (best but slowest).
  *
@@ -184,10 +184,29 @@ typedef svn_error_t *(*svn_ra_svn_edit_c
  * It defines the number of bytes that must have been sent since the last
  * check before the next check will be made.
  *
+ * @note If @a out_stream is an wrapped apr_file_t* the backing file will be
+ * used for some operations.
+ *
  * Allocate the result in @a pool.
  *
+ * @since New in 1.9
+ */
+svn_ra_svn_conn_t *svn_ra_svn_create_conn4(apr_socket_t *sock,
+                                           svn_stream_t *in_stream,
+                                           svn_stream_t *out_stream,
+                                           int compression_level,
+                                           apr_size_t zero_copy_limit,
+                                           apr_size_t error_check_interval,
+                                           apr_pool_t *result_pool);
+
+
+/** Similar to svn_ra_svn_create_conn4() but only supports apr_file_t handles
+ * instead of the more generic streams.
+ *
  * @since New in 1.8
+ * @deprecated Provided for backward compatibility with the 1.8 API.
  */
+SVN_DEPRECATED
 svn_ra_svn_conn_t *svn_ra_svn_create_conn3(apr_socket_t *sock,
                                            apr_file_t *in_file,
                                            apr_file_t *out_file,

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_repos.h?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_repos.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_repos.h Thu Feb  6 08:45:07 2014
@@ -2854,6 +2854,11 @@ svn_repos_dump_fs(svn_repos_t *repos,
  * 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 non-NULL, use @a notify_func and @a notify_baton to send notification
  * of events to the caller.
  *
@@ -2861,9 +2866,33 @@ svn_repos_dump_fs(svn_repos_t *repos,
  * @a cancel_baton as argument to see if the client wishes to cancel
  * the load.
  *
- * @since New in 1.8.
+ * @since New in 1.9.
  */
 svn_error_t *
+svn_repos_load_fs5(svn_repos_t *repos,
+                   svn_stream_t *dumpstream,
+                   svn_revnum_t start_rev,
+                   svn_revnum_t end_rev,
+                   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 validate_props,
+                   svn_boolean_t ignore_dates,
+                   svn_repos_notify_func_t notify_func,
+                   void *notify_baton,
+                   svn_cancel_func_t cancel_func,
+                   void *cancel_baton,
+                   apr_pool_t *pool);
+
+/** Similar to svn_repos_load_fs5(), but with @a ignore_dates
+ * always passed as FALSE.
+ *
+ * @since New in 1.9.
+ * @deprecated Provided for backward compatibility with the 1.8 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
 svn_repos_load_fs4(svn_repos_t *repos,
                    svn_stream_t *dumpstream,
                    svn_revnum_t start_rev,
@@ -3126,6 +3155,7 @@ svn_repos_get_fs_build_parser4(const svn
                                apr_pool_t *pool);
 
 
+
 /**
  * A vtable that is driven by svn_repos_parse_dumpstream2().
  * Similar to #svn_repos_parse_fns3_t except that it lacks

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_wc.h?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_wc.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_wc.h Thu Feb  6 08:45:07 2014
@@ -4730,10 +4730,9 @@ svn_wc_delete(const char *path,
  * addition to the working copy.  The added node will have the properties
  * provided in @a props, or none if that is NULL.
  *
- * Check and canonicalize the properties in the same way as
- * svn_wc_prop_set4().  Return an error and don't add the node if the
- * properties are not valid on this node.  Unlike svn_wc_prop_set4()
- * there is no option to skip some of the checks and canonicalizations.
+ * Unless @a skip_checks is TRUE, check and canonicalize the properties in the
+ * same way as svn_wc_prop_set4().  Return an error and don't add the node if
+ * the properties are not valid on this node.
  *
  * ### The error code on validity check failure should be specified, and
  *     preferably should be a single code.
@@ -4747,8 +4746,25 @@ svn_wc_delete(const char *path,
  *
  * ### TODO: Split into add_dir, add_file, add_symlink?
  *
+ * @since New in 1.9.
+ */
+svn_error_t *
+svn_wc_add_from_disk3(svn_wc_context_t *wc_ctx,
+                      const char *local_abspath,
+                      const apr_hash_t *props,
+                      svn_boolean_t skip_checks,
+                      svn_wc_notify_func2_t notify_func,
+                      void *notify_baton,
+                      apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_add_from_disk3(), but always passes FALSE for
+ * @a skip_som_prop_canon
+ *
  * @since New in 1.8.
+ * @deprecated Provided for backward compatibility with the 1.8 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_add_from_disk2(svn_wc_context_t *wc_ctx,
                       const char *local_abspath,

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/add.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/add.c?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/add.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/add.c Thu Feb  6 08:45:07 2014
@@ -316,7 +316,8 @@ add_file(const char *local_abspath,
     }
 
   /* Add the file */
-  SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, local_abspath, properties,
+  SVN_ERR(svn_wc_add_from_disk3(ctx->wc_ctx, local_abspath, properties,
+                                FALSE /* skip checks */,
                                 ctx->notify_func2, ctx->notify_baton2, pool));
 
   return SVN_NO_ERROR;
@@ -378,7 +379,8 @@ add_dir_recursive(const char *dir_abspat
   iterpool = svn_pool_create(scratch_pool);
 
   /* Add this directory to revision control. */
-  err = svn_wc_add_from_disk2(ctx->wc_ctx, dir_abspath, NULL /*props*/,
+  err = svn_wc_add_from_disk3(ctx->wc_ctx, dir_abspath, NULL /*props*/,
+                              FALSE /* skip checks */,
                               ctx->notify_func2, ctx->notify_baton2,
                               iterpool);
   if (err)
@@ -873,8 +875,9 @@ add(const char *local_abspath,
                                      parent_abspath, local_abspath);
 
           SVN_ERR(svn_io_make_dir_recursively(parent_abspath, scratch_pool));
-          SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, parent_abspath,
+          SVN_ERR(svn_wc_add_from_disk3(ctx->wc_ctx, parent_abspath,
                                         NULL /*props*/,
+                                        FALSE /* skip checks */,
                                         ctx->notify_func2, ctx->notify_baton2,
                                         scratch_pool));
         }

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit.c?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit.c Thu Feb  6 08:45:07 2014
@@ -110,7 +110,8 @@ get_ra_editor(const svn_delta_editor_t *
             continue;
 
           svn_pool_clear(iterpool);
-          SVN_ERR(svn_wc__node_get_origin(NULL, NULL, &relpath, NULL, NULL, NULL,
+          SVN_ERR(svn_wc__node_get_origin(NULL, NULL, &relpath, NULL, NULL,
+                                          NULL, NULL,
                                           ctx->wc_ctx, item->path, FALSE, pool,
                                           iterpool));
           if (relpath)

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit_util.c?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit_util.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit_util.c Thu Feb  6 08:45:07 2014
@@ -505,7 +505,7 @@ harvest_not_present_for_copy(svn_wc_cont
           /* Determine from what parent we would be the deleted child */
           SVN_ERR(svn_wc__node_get_origin(
                               NULL, &parent_rev, &parent_repos_relpath,
-                              &parent_repos_root_url, NULL, NULL,
+                              &parent_repos_root_url, NULL, NULL, NULL,
                               wc_ctx,
                               svn_dirent_dirname(this_abspath,
                                                   scratch_pool),
@@ -943,7 +943,7 @@ harvest_status_callback(void *status_bat
            * directory. In either case, we require the op-root of the parent
            * to be part of the commit. See issue #4059. */
           SVN_ERR(svn_wc__node_get_origin(&parent_is_copy, NULL, NULL, NULL,
-                                          NULL, &copy_root_abspath,
+                                          NULL, NULL, &copy_root_abspath,
                                           wc_ctx, parent_abspath,
                                           FALSE, scratch_pool, scratch_pool));
 

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy.c?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy.c Thu Feb  6 08:45:07 2014
@@ -1494,7 +1494,8 @@ wc_to_repos_copy(const apr_array_header_
             continue;
 
           svn_pool_clear(iterpool);
-          SVN_ERR(svn_wc__node_get_origin(NULL, NULL, &relpath, NULL, NULL, NULL,
+          SVN_ERR(svn_wc__node_get_origin(NULL, NULL, &relpath, NULL, NULL,
+                                          NULL, NULL,
                                           ctx->wc_ctx, item->path, FALSE,
                                           scratch_pool, iterpool));
           if (relpath)
@@ -2194,7 +2195,7 @@ try_copy(svn_boolean_t *timestamp_sleep,
                   SVN_ERR(svn_wc__node_get_origin(NULL, &copyfrom_rev,
                                                   &copyfrom_repos_relpath,
                                                   &copyfrom_repos_root_url,
-                                                  NULL, NULL,
+                                                  NULL, NULL, NULL,
                                                   ctx->wc_ctx,
                                                   pair->src_abspath_or_url,
                                                   TRUE, iterpool, iterpool));

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy_foreign.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy_foreign.c?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy_foreign.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy_foreign.c Thu Feb  6 08:45:07 2014
@@ -161,7 +161,7 @@ dir_change_prop(void *dir_baton,
   if (! db->created)
     {
       /* We can still store them in the hash for immediate addition
-         with the svn_wc_add_from_disk2() call */
+         with the svn_wc_add_from_disk3() call */
       if (! db->properties)
         db->properties = apr_hash_make(db->pool);
 
@@ -214,9 +214,10 @@ ensure_added(struct dir_baton_t *db,
   db->created = TRUE;
 
   /* Add the directory with all the already collected properties */
-  SVN_ERR(svn_wc_add_from_disk2(db->eb->wc_ctx,
+  SVN_ERR(svn_wc_add_from_disk3(db->eb->wc_ctx,
                                 db->local_abspath,
                                 db->properties,
+                                TRUE /* skip checks */,
                                 db->eb->notify_func,
                                 db->eb->notify_baton,
                                 scratch_pool));
@@ -307,7 +308,7 @@ file_change_prop(void *file_baton,
     }
 
   /* We store all properties in the hash for immediate addition
-      with the svn_wc_add_from_disk2() call */
+      with the svn_wc_add_from_disk3() call */
   if (! fb->properties)
     fb->properties = apr_hash_make(fb->pool);
 
@@ -376,7 +377,8 @@ file_close(void *file_baton,
                                                     fb->pool)));
     }
 
-  SVN_ERR(svn_wc_add_from_disk2(eb->wc_ctx, fb->local_abspath, fb->properties,
+  SVN_ERR(svn_wc_add_from_disk3(eb->wc_ctx, fb->local_abspath, fb->properties,
+                                TRUE /* skip checks */,
                                 eb->notify_func, eb->notify_baton,
                                 fb->pool));
 
@@ -539,12 +541,14 @@ svn_client__copy_foreign(const char *url
 
       if (!already_locked)
         SVN_WC__CALL_WITH_WRITE_LOCK(
-              svn_wc_add_from_disk2(ctx->wc_ctx, dst_abspath, props,
+              svn_wc_add_from_disk3(ctx->wc_ctx, dst_abspath, props,
+                                    TRUE /* skip checks */,
                                     ctx->notify_func2, ctx->notify_baton2,
                                     scratch_pool),
               ctx->wc_ctx, dir_abspath, FALSE, scratch_pool);
       else
-        SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, dst_abspath, props,
+        SVN_ERR(svn_wc_add_from_disk3(ctx->wc_ctx, dst_abspath, props,
+                                      TRUE /* skip checks */,
                                       ctx->notify_func2, ctx->notify_baton2,
                                       scratch_pool));
     }

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/diff.c?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/diff.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/diff.c Thu Feb  6 08:45:07 2014
@@ -1848,6 +1848,7 @@ diff_repos_wc(const char *path_or_url1,
   svn_revnum_t cf_revision;
   const char *cf_repos_relpath;
   const char *cf_repos_root_url;
+  svn_depth_t cf_depth;
 
   SVN_ERR_ASSERT(! svn_path_is_url(path2));
 
@@ -1927,7 +1928,7 @@ diff_repos_wc(const char *path_or_url1,
                                   &cf_revision,
                                   &cf_repos_relpath,
                                   &cf_repos_root_url,
-                                  NULL, NULL,
+                                  NULL, &cf_depth, NULL,
                                   ctx->wc_ctx, abspath2,
                                   FALSE, pool, pool));
 
@@ -1960,7 +1961,6 @@ diff_repos_wc(const char *path_or_url1,
     {
       const char *copyfrom_parent_url;
       const char *copyfrom_basename;
-      svn_depth_t copy_depth;
 
       cmd_baton->repos_wc_diff_target_is_copy = TRUE;
 
@@ -1999,15 +1999,12 @@ diff_repos_wc(const char *path_or_url1,
                               diff_editor, diff_edit_baton, pool));
 
       /* Report the copy source. */
-      SVN_ERR(svn_wc__node_get_depth(&copy_depth, ctx->wc_ctx, abspath2,
-                                     pool));
-
-      if (copy_depth == svn_depth_unknown)
-        copy_depth = svn_depth_infinity;
+      if (cf_depth == svn_depth_unknown)
+        cf_depth = svn_depth_infinity;
 
       SVN_ERR(reporter->set_path(reporter_baton, "",
                                  cf_revision,
-                                 copy_depth, FALSE, NULL, scratch_pool));
+                                 cf_depth, FALSE, NULL, scratch_pool));
 
       if (strcmp(target, copyfrom_basename) != 0)
         SVN_ERR(reporter->link_path(reporter_baton, target,
@@ -2016,7 +2013,7 @@ diff_repos_wc(const char *path_or_url1,
                                                 cf_repos_relpath,
                                                 scratch_pool),
                                     cf_revision,
-                                    copy_depth, FALSE, NULL, scratch_pool));
+                                    cf_depth, FALSE, NULL, scratch_pool));
 
       /* Finish the report to generate the diff. */
       SVN_ERR(reporter->finish_report(reporter_baton, pool));

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/merge.c?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/merge.c Thu Feb  6 08:45:07 2014
@@ -759,7 +759,7 @@ filter_self_referential_mergeinfo(apr_ar
   /* If PATH itself has been added there is no need to filter. */
   SVN_ERR(svn_wc__node_get_origin(&is_copy,  &target_base.rev, &repos_relpath,
                                   &target_base.repos_root_url,
-                                  &target_base.repos_uuid, NULL,
+                                  &target_base.repos_uuid, NULL, NULL,
                                   ctx->wc_ctx, target_abspath, FALSE,
                                   pool, pool));
 
@@ -2724,7 +2724,7 @@ merge_dir_opened(void **new_dir_baton,
 
           if (old_tc)
             {
-              /* svn_wc_add4 and svn_wc_add_from_disk2 can't add a node
+              /* svn_wc_add4 and svn_wc_add_from_disk3 can't add a node
                  over an existing tree conflict */
 
               /* ### These functions should take some tree conflict argument
@@ -2762,8 +2762,9 @@ merge_dir_opened(void **new_dir_baton,
             }
           else
             {
-              SVN_ERR(svn_wc_add_from_disk2(merge_b->ctx->wc_ctx, local_abspath,
+              SVN_ERR(svn_wc_add_from_disk3(merge_b->ctx->wc_ctx, local_abspath,
                                             apr_hash_make(scratch_pool),
+                                            FALSE /* skip checks */,
                                             NULL, NULL /* no notify! */,
                                             scratch_pool));
             }

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/mergeinfo.c?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/mergeinfo.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/mergeinfo.c Thu Feb  6 08:45:07 2014
@@ -624,7 +624,7 @@ svn_client__get_wc_or_repos_mergeinfo_ca
      a URL and without that we cannot get accurate mergeinfo for
      TARGET_WCPATH. */
   SVN_ERR(svn_wc__node_get_origin(NULL, &target_rev, &repos_relpath,
-                                  &repos_root, NULL, NULL,
+                                  &repos_root, NULL, NULL, NULL,
                                   ctx->wc_ctx, local_abspath, FALSE,
                                   scratch_pool, scratch_pool));
 

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/mtcc.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/mtcc.c?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/mtcc.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/mtcc.c Thu Feb  6 08:45:07 2014
@@ -29,15 +29,68 @@
 #include "svn_pools.h"
 #include "svn_subst.h"
 
+#include "svn_client_mtcc.h"
+
+
 #include "svn_private_config.h"
 
 #include "client.h"
-#include "mtcc.h"
 
 #include <assert.h>
 
 #define SVN_PATH_IS_EMPTY(s) ((s)[0] == '\0')
 
+/* The kind of operation to perform in an svn_client_mtcc_op_t */
+typedef enum svn_client_mtcc_kind_t
+{
+  OP_OPEN_DIR,
+  OP_OPEN_FILE,
+  OP_ADD_DIR,
+  OP_ADD_FILE,
+  OP_DELETE,
+} svn_client_mtcc_kind_t;
+
+typedef struct svn_client_mtcc_op_t
+{
+  const char *name;                 /* basename of operation */
+  svn_client_mtcc_kind_t kind;      /* editor operation */
+
+  apr_array_header_t *children;     /* List of svn_client_mtcc_op_t * */
+
+  const char *src_relpath;              /* For ADD_DIR, ADD_FILE */
+  svn_revnum_t src_rev;                 /* For ADD_DIR, ADD_FILE */
+  svn_stream_t *src_stream;             /* For ADD_FILE, OPEN_FILE */
+  svn_checksum_t *src_checksum;         /* For ADD_FILE, OPEN_FILE */
+  svn_stream_t *base_stream;            /* For ADD_FILE, OPEN_FILE */
+  const svn_checksum_t *base_checksum;  /* For ADD_FILE, OPEN_FILE */
+
+  apr_array_header_t *prop_mods;        /* For all except DELETE
+                                           List of svn_prop_t */
+
+  svn_boolean_t performed_stat;         /* Verified kind with repository */
+} svn_client_mtcc_op_t;
+
+/* Check if the mtcc doesn't contain any modifications yet */
+#define MTCC_UNMODIFIED(mtcc)                                               \
+    ((mtcc->root_op->kind == OP_OPEN_DIR                                    \
+                            || mtcc->root_op->kind == OP_OPEN_FILE)         \
+     && (mtcc->root_op->prop_mods == NULL                                   \
+                            || !mtcc->root_op->prop_mods->nelts)            \
+     && (mtcc->root_op->children == NULL                                    \
+                            || !mtcc->root_op->children->nelts))
+
+struct svn_client_mtcc_t
+{
+  apr_pool_t *pool;
+  svn_revnum_t head_revision;
+  svn_revnum_t base_revision;
+
+  svn_ra_session_t *ra_session;
+  svn_client_ctx_t *ctx;
+
+  svn_client_mtcc_op_t *root_op;
+};
+
 static svn_client_mtcc_op_t *
 mtcc_op_create(const char *name,
                svn_boolean_t add,

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/patch.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/patch.c?rev=1565116&r1=1565115&r2=1565116&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/patch.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/patch.c Thu Feb  6 08:45:07 2014
@@ -2455,8 +2455,9 @@ create_missing_parents(patch_target_t *t
               if (ctx->cancel_func)
                 SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
 
-              SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, local_abspath,
+              SVN_ERR(svn_wc_add_from_disk3(ctx->wc_ctx, local_abspath,
                                             NULL /*props*/,
+                                            FALSE /* skip checks */,
                                             ctx->notify_func2, ctx->notify_baton2,
                                             iterpool));
             }
@@ -2586,8 +2587,9 @@ install_patched_target(patch_target_t *t
                * Suppress notification, we'll do that later (and also
                * during dry-run). Don't allow cancellation because
                * we'd rather notify about what we did before aborting. */
-              SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, target->local_abspath,
+              SVN_ERR(svn_wc_add_from_disk3(ctx->wc_ctx, target->local_abspath,
                                             NULL /*props*/,
+                                            FALSE /* skip checks */,
                                             NULL, NULL, pool));
             }
 
@@ -2679,8 +2681,9 @@ install_patched_prop_targets(patch_targe
             {
               SVN_ERR(svn_io_file_create_empty(target->local_abspath,
                                                scratch_pool));
-              SVN_ERR(svn_wc_add_from_disk2(ctx->wc_ctx, target->local_abspath,
+              SVN_ERR(svn_wc_add_from_disk3(ctx->wc_ctx, target->local_abspath,
                                             NULL /*props*/,
+                                            FALSE /* skip checks */,
                                             /* suppress notification */
                                             NULL, NULL,
                                             iterpool));