You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by tr...@apache.org on 2017/12/24 05:23:09 UTC

svn commit: r1819203 [1/3] - in /subversion/branches/swig-py3: ./ build/ build/ac-macros/ build/generator/ notes/api-errata/1.10/ notes/commit-access-templates/ subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversion/bindings/swig/perl/...

Author: troycurtisjr
Date: Sun Dec 24 05:23:08 2017
New Revision: 1819203

URL: http://svn.apache.org/viewvc?rev=1819203&view=rev
Log:
On branch swig-py3: Catch up to trunk@1819202.

Added:
    subversion/branches/swig-py3/notes/api-errata/1.10/ra001.txt
      - copied unchanged from r1819202, subversion/trunk/notes/api-errata/1.10/ra001.txt
    subversion/branches/swig-py3/subversion/libsvn_client/shelve.c
      - copied unchanged from r1819202, subversion/trunk/subversion/libsvn_client/shelve.c
    subversion/branches/swig-py3/subversion/libsvn_ra_serf/list.c
      - copied unchanged from r1819202, subversion/trunk/subversion/libsvn_ra_serf/list.c
    subversion/branches/swig-py3/subversion/mod_dav_svn/reports/list.c
      - copied unchanged from r1819202, subversion/trunk/subversion/mod_dav_svn/reports/list.c
    subversion/branches/swig-py3/subversion/svn/shelve-cmd.c
      - copied unchanged from r1819202, subversion/trunk/subversion/svn/shelve-cmd.c
    subversion/branches/swig-py3/subversion/tests/cmdline/shelve_tests.py
      - copied unchanged from r1819202, subversion/trunk/subversion/tests/cmdline/shelve_tests.py
    subversion/branches/swig-py3/subversion/tests/templates/empty-fsfs-v1.zip
      - copied unchanged from r1819202, subversion/trunk/subversion/tests/templates/empty-fsfs-v1.zip
    subversion/branches/swig-py3/subversion/tests/templates/empty-fsfs-v2.zip
      - copied unchanged from r1819202, subversion/trunk/subversion/tests/templates/empty-fsfs-v2.zip
    subversion/branches/swig-py3/subversion/tests/templates/empty-fsfs-v3.zip
      - copied unchanged from r1819202, subversion/trunk/subversion/tests/templates/empty-fsfs-v3.zip
    subversion/branches/swig-py3/subversion/tests/templates/empty-fsfs-v7.zip
      - copied unchanged from r1819202, subversion/trunk/subversion/tests/templates/empty-fsfs-v7.zip
    subversion/branches/swig-py3/subversion/tests/templates/greek-fsfs-v1.zip
      - copied unchanged from r1819202, subversion/trunk/subversion/tests/templates/greek-fsfs-v1.zip
    subversion/branches/swig-py3/subversion/tests/templates/greek-fsfs-v2.zip
      - copied unchanged from r1819202, subversion/trunk/subversion/tests/templates/greek-fsfs-v2.zip
    subversion/branches/swig-py3/subversion/tests/templates/greek-fsfs-v3.zip
      - copied unchanged from r1819202, subversion/trunk/subversion/tests/templates/greek-fsfs-v3.zip
    subversion/branches/swig-py3/subversion/tests/templates/greek-fsfs-v7.zip
      - copied unchanged from r1819202, subversion/trunk/subversion/tests/templates/greek-fsfs-v7.zip
    subversion/branches/swig-py3/tools/dist/create-minor-release-branch.py
      - copied unchanged from r1819202, subversion/trunk/tools/dist/create-minor-release-branch.py
Removed:
    subversion/branches/swig-py3/notes/commit-access-templates/contrib-committer.tmpl
Modified:
    subversion/branches/swig-py3/   (props changed)
    subversion/branches/swig-py3/CHANGES
    subversion/branches/swig-py3/COMMITTERS
    subversion/branches/swig-py3/INSTALL
    subversion/branches/swig-py3/Makefile.in
    subversion/branches/swig-py3/build.conf
    subversion/branches/swig-py3/build/ac-macros/lz4.m4
    subversion/branches/swig-py3/build/ac-macros/utf8proc.m4
    subversion/branches/swig-py3/build/generator/gen_win_dependencies.py
    subversion/branches/swig-py3/build/run_tests.py
    subversion/branches/swig-py3/configure.ac
    subversion/branches/swig-py3/get-deps.sh
    subversion/branches/swig-py3/notes/commit-access-templates/partial-committer.tmpl
    subversion/branches/swig-py3/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
    subversion/branches/swig-py3/subversion/bindings/swig/perl/native/t/3client.t
    subversion/branches/swig-py3/subversion/include/private/svn_element.h
    subversion/branches/swig-py3/subversion/include/private/svn_ra_svn_private.h
    subversion/branches/swig-py3/subversion/include/private/svn_subr_private.h
    subversion/branches/swig-py3/subversion/include/private/svn_wc_private.h
    subversion/branches/swig-py3/subversion/include/svn_client.h
    subversion/branches/swig-py3/subversion/include/svn_dav.h
    subversion/branches/swig-py3/subversion/include/svn_delta.h
    subversion/branches/swig-py3/subversion/include/svn_diff.h
    subversion/branches/swig-py3/subversion/include/svn_io.h
    subversion/branches/swig-py3/subversion/include/svn_types.h
    subversion/branches/swig-py3/subversion/include/svn_version.h
    subversion/branches/swig-py3/subversion/libsvn_client/conflicts.c
    subversion/branches/swig-py3/subversion/libsvn_client/patch.c
    subversion/branches/swig-py3/subversion/libsvn_delta/element.c
    subversion/branches/swig-py3/subversion/libsvn_fs_fs/fs.h
    subversion/branches/swig-py3/subversion/libsvn_fs_fs/fs_fs.c
    subversion/branches/swig-py3/subversion/libsvn_fs_fs/low_level.c
    subversion/branches/swig-py3/subversion/libsvn_fs_fs/pack.c
    subversion/branches/swig-py3/subversion/libsvn_fs_fs/rep-cache-db.sql
    subversion/branches/swig-py3/subversion/libsvn_fs_fs/rep-cache.c
    subversion/branches/swig-py3/subversion/libsvn_fs_fs/structure
    subversion/branches/swig-py3/subversion/libsvn_fs_fs/transaction.c
    subversion/branches/swig-py3/subversion/libsvn_fs_x/   (props changed)
    subversion/branches/swig-py3/subversion/libsvn_fs_x/changes.c
    subversion/branches/swig-py3/subversion/libsvn_fs_x/low_level.c
    subversion/branches/swig-py3/subversion/libsvn_fs_x/pack.c
    subversion/branches/swig-py3/subversion/libsvn_fs_x/transaction.c
    subversion/branches/swig-py3/subversion/libsvn_ra_local/ra_plugin.c
    subversion/branches/swig-py3/subversion/libsvn_ra_serf/commit.c
    subversion/branches/swig-py3/subversion/libsvn_ra_serf/options.c
    subversion/branches/swig-py3/subversion/libsvn_ra_serf/ra_serf.h
    subversion/branches/swig-py3/subversion/libsvn_ra_serf/serf.c
    subversion/branches/swig-py3/subversion/libsvn_ra_serf/stat.c
    subversion/branches/swig-py3/subversion/libsvn_ra_serf/util.c
    subversion/branches/swig-py3/subversion/libsvn_ra_svn/editorp.c
    subversion/branches/swig-py3/subversion/libsvn_ra_svn/marshal.c
    subversion/branches/swig-py3/subversion/libsvn_ra_svn/protocol
    subversion/branches/swig-py3/subversion/libsvn_repos/list.c
    subversion/branches/swig-py3/subversion/libsvn_repos/load-fs-vtable.c
    subversion/branches/swig-py3/subversion/libsvn_repos/reporter.c
    subversion/branches/swig-py3/subversion/libsvn_subr/compress_lz4.c
    subversion/branches/swig-py3/subversion/libsvn_subr/io.c
    subversion/branches/swig-py3/subversion/libsvn_subr/object_pool.c
    subversion/branches/swig-py3/subversion/libsvn_subr/sqlite.c
    subversion/branches/swig-py3/subversion/libsvn_subr/stream.c
    subversion/branches/swig-py3/subversion/libsvn_subr/sysinfo.c
    subversion/branches/swig-py3/subversion/libsvn_subr/utf8proc/   (props changed)
    subversion/branches/swig-py3/subversion/libsvn_subr/utf8proc.c
    subversion/branches/swig-py3/subversion/libsvn_wc/wc_db.c
    subversion/branches/swig-py3/subversion/libsvn_wc/wcroot_anchor.c
    subversion/branches/swig-py3/subversion/mod_dav_svn/dav_svn.h
    subversion/branches/swig-py3/subversion/mod_dav_svn/liveprops.c
    subversion/branches/swig-py3/subversion/mod_dav_svn/util.c
    subversion/branches/swig-py3/subversion/mod_dav_svn/version.c
    subversion/branches/swig-py3/subversion/svn/cl.h
    subversion/branches/swig-py3/subversion/svn/conflict-callbacks.c
    subversion/branches/swig-py3/subversion/svn/help-cmd.c
    subversion/branches/swig-py3/subversion/svn/list-cmd.c
    subversion/branches/swig-py3/subversion/svn/notify.c
    subversion/branches/swig-py3/subversion/svn/svn.c
    subversion/branches/swig-py3/subversion/svn/util.c
    subversion/branches/swig-py3/subversion/svnadmin/svnadmin.c
    subversion/branches/swig-py3/subversion/svnbench/svnbench.c
    subversion/branches/swig-py3/subversion/svnfsfs/load-index-cmd.c
    subversion/branches/swig-py3/subversion/svnmucc/svnmucc.c
    subversion/branches/swig-py3/subversion/svnrdump/svnrdump.c
    subversion/branches/swig-py3/subversion/svnserve/serve.c
    subversion/branches/swig-py3/subversion/tests/cmdline/basic_tests.py
    subversion/branches/swig-py3/subversion/tests/cmdline/diff_tests.py
    subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout
    subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
    subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout
    subversion/branches/swig-py3/subversion/tests/cmdline/svnadmin_tests.py
    subversion/branches/swig-py3/subversion/tests/cmdline/svntest/__init__.py
    subversion/branches/swig-py3/subversion/tests/cmdline/svntest/main.py
    subversion/branches/swig-py3/subversion/tests/cmdline/svntest/verify.py
    subversion/branches/swig-py3/subversion/tests/cmdline/svntest/wc.py
    subversion/branches/swig-py3/subversion/tests/cmdline/update_tests.py
    subversion/branches/swig-py3/subversion/tests/libsvn_client/conflicts-test.c
    subversion/branches/swig-py3/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
    subversion/branches/swig-py3/subversion/tests/libsvn_ra/ra-test.c
    subversion/branches/swig-py3/subversion/tests/libsvn_repos/authz-test.c
    subversion/branches/swig-py3/subversion/tests/libsvn_repos/dump-load-test.c
    subversion/branches/swig-py3/subversion/tests/libsvn_subr/mergeinfo-test.c
    subversion/branches/swig-py3/subversion/tests/libsvn_subr/priority-queue-test.c
    subversion/branches/swig-py3/subversion/tests/libsvn_subr/subst_translate-test.c
    subversion/branches/swig-py3/tools/client-side/bash_completion
    subversion/branches/swig-py3/tools/client-side/bash_completion_test
    subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c
    subversion/branches/swig-py3/tools/client-side/svnconflict/svnconflict.c
    subversion/branches/swig-py3/tools/dev/svnmover/svnmover.c
    subversion/branches/swig-py3/tools/dev/unix-build/Makefile.svn
    subversion/branches/swig-py3/tools/dist/release.py
    subversion/branches/swig-py3/win-tests.py

Propchange: subversion/branches/swig-py3/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Dec 24 05:23:08 2017
@@ -75,6 +75,8 @@
 /subversion/branches/revprop-cache:1298521-1326293
 /subversion/branches/revprop-caching-ng:1620597,1620599
 /subversion/branches/revprop-packing:1143907,1143971,1143997,1144017,1144499,1144568,1146145
+/subversion/branches/shelve:1802592-1815226
+/subversion/branches/shelve-checkpoint:1801593-1801923,1801970,1817320
 /subversion/branches/subtree-mergeinfo:876734-878766
 /subversion/branches/svn-auth-x509:1603509-1655900
 /subversion/branches/svn-info-detail:1660035-1662618
@@ -97,3 +99,4 @@
 /subversion/branches/verify-at-commit:1462039-1462408
 /subversion/branches/verify-keep-going:1439280-1546110
 /subversion/branches/wc-collate-path:1402685-1480384
+/subversion/trunk:1813660-1819202

Modified: subversion/branches/swig-py3/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/CHANGES?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/CHANGES (original)
+++ subversion/branches/swig-py3/CHANGES Sun Dec 24 05:23:08 2017
@@ -1,3 +1,8 @@
+Version 1.11.0
+(?? ??? 20XX, from /branches/1.11.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.11.0
+
+
 Version 1.10.0
 (?? ??? 2017, from /branches/1.10.x)
 http://svn.apache.org/repos/asf/subversion/tags/1.10.0

Modified: subversion/branches/swig-py3/COMMITTERS
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/COMMITTERS?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/COMMITTERS [UTF-8] (original)
+++ subversion/branches/swig-py3/COMMITTERS [UTF-8] Sun Dec 24 05:23:08 2017
@@ -47,7 +47,7 @@ Blanket commit access:
            kou   Kouhei Sutou <ko...@cozmixng.org>
       danielsh   Daniel Shahaf <d....@daniel.shahaf.name>
         peters   Peter Samuelson <pe...@p12n.org>
-      rhuijben   Bert Huijben <rh...@collab.net>
+      rhuijben   Bert Huijben <rh...@apache.org>
       stylesen   Senthil Kumaran S <st...@gmail.com>
      steveking   Stefan Küng <to...@gmail.com>
          neels   Neels J. Hofmeyr <ne...@hofmeyr.de>
@@ -169,6 +169,7 @@ Commit access for specific areas:
       prabhugs   Prabhu Gnana Sundar <pp...@gmail.com>   (verify-keep-going)
         schabi   Markus Schaber <sc...@apache.org>          (testsuite)
            gbg   Gabriela Gibson <ga...@gmail.com> (gtest)
+     lyalyakin   Pavel Lyalyakin <pa...@visualsvn.com> (site)
 
   Translation of message files:
 

Modified: subversion/branches/swig-py3/INSTALL
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/INSTALL?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/INSTALL (original)
+++ subversion/branches/swig-py3/INSTALL Sun Dec 24 05:23:08 2017
@@ -430,7 +430,7 @@ I.    INTRODUCTION
 
       12. SQLite  (REQUIRED)
 
-      Subversion requires SQLite version 3.7.12 or above.  You can meet this
+      Subversion requires SQLite version 3.8.2 or above.  You can meet this
       dependency several ways:
         * Use an SQLite amalgamation file.
         * Specify an SQLite installation to use.
@@ -527,6 +527,19 @@ I.    INTRODUCTION
 
       $ ./get-dep.sh gmock
 
+      22. LZ4 (OPTIONAL)
+
+      Subversion uses LZ4 compression libary version r129 or above. Configure
+      will attempt to locate the system library by default using pkg-config
+      and known paths.
+
+      If it is installed in a non-standard location, then use:
+
+        --with-lz4=/path/to/liblz4
+
+      If configure should use the version bundled with the sources, use:
+        --with-lz4=internal
+
   D. Documentation
 
       The primary documentation for Subversion is the free book
@@ -727,8 +740,8 @@ II.   INSTALLATION
         1.3 or later (1.2 for apr-iconv). If you are building from a Subversion
         checkout and have not downloaded Apache 2, then get these 3 libraries
         from https://www.apache.org/dist/apr/.
-      * SQLite 3.7.12 or higher from https://www.sqlite.org/download.html
-        (3.8.0 or higher recommended)
+      * SQLite 3.8.2 or higher from https://www.sqlite.org/download.html
+        (3.8.11.1 or higher recommended)
       * ZLib 1.2 or higher is required and can be obtained from
         http://www.zlib.net/
       * Either a Subversion client binary from

Modified: subversion/branches/swig-py3/Makefile.in
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/Makefile.in?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/Makefile.in (original)
+++ subversion/branches/swig-py3/Makefile.in Sun Dec 24 05:23:08 2017
@@ -190,7 +190,10 @@ CXXMAINTAINERFLAGS = @CXXMAINTAINERFLAGS
 CPPFLAGS = @CPPFLAGS@ $(EXTRA_CPPFLAGS)
 LDFLAGS = @LDFLAGS@ $(EXTRA_LDFLAGS)
 SWIG_LDFLAGS = @SWIG_LDFLAGS@ $(EXTRA_SWIG_LDFLAGS)
-SWIG_CPPFLAGS = @SWIG_CPPFLAGS@ $(EXTRA_CPPFLAGS)
+SWIG_FEATURES = @SWIG_FEATURES@
+SWIG_PY_FEATURES = @SWIG_PY_FEATURES@
+SWIG_PL_FEATURES = @SWIG_PL_FEATURES@
+SWIG_RB_FEATURES = @SWIG_RB_FEATURES@
 SWIG_PY_OPTS = @SWIG_PY_OPTS@
 
 COMPILE = $(CC) $(CMODEFLAGS) $(CPPFLAGS) $(CMAINTAINERFLAGS) $(CFLAGS) $(INCLUDES)
@@ -596,6 +599,9 @@ check: bin @TRANSFORM_LIBTOOL_SCRIPTS@ $
 	  if test "$(FSFS_COMPRESSION)" != ""; then                          \
 	    flags="--fsfs-compression $(FSFS_COMPRESSION) $$flags";          \
 	  fi;                                                                \
+	  if test "$(FSFS_DIR_DELTIFICATION)" != ""; then                    \
+	    flags="--fsfs-dir-deltification $(FSFS_DIR_DELTIFICATION) $$flags";\
+	  fi;                                                                \
 	  LD_LIBRARY_PATH='$(auth_plugin_dirs):$(LD_LIBRARY_PATH)'           \
 	  $(PYTHON) $(top_srcdir)/build/run_tests.py                         \
 	            --config-file $(top_srcdir)/subversion/tests/tests.conf  \

Modified: subversion/branches/swig-py3/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/build.conf?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/build.conf (original)
+++ subversion/branches/swig-py3/build.conf Sun Dec 24 05:23:08 2017
@@ -98,9 +98,9 @@ test-scripts =
 
 bdb-test-scripts =
 
-swig-python-opts = $(SWIG_CPPFLAGS) $(SWIG_PY_OPTS)
-swig-perl-opts = $(SWIG_CPPFLAGS) -perl -nopm -noproxy
-swig-ruby-opts = $(SWIG_CPPFLAGS) -ruby
+swig-python-opts = $(SWIG_FEATURES) $(SWIG_PY_OPTS) $(SWIG_PY_FEATURES)
+swig-perl-opts = $(SWIG_FEATURES) -perl $(SWIG_PL_FEATURES) -nopm -noproxy
+swig-ruby-opts = $(SWIG_FEATURES) -ruby $(SWIG_RB_FEATURES)
 swig-languages = python perl ruby
 swig-dirs = 
         subversion/bindings/swig/python
@@ -1471,8 +1471,7 @@ external-lib = $(SVN_SASL_LIBS)
 
 [openssl]
 type = lib
-external-lib = $(SVN_OPENSSL_LIBS)
-msvc-libs = ssleay32.lib libeay32.lib
+external-lib = $(SVN_OPENSSL_LIBS) $(SVN_LIBCRYPTO_LIBS)
 
 [intl]
 type = lib

Modified: subversion/branches/swig-py3/build/ac-macros/lz4.m4
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/build/ac-macros/lz4.m4?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/build/ac-macros/lz4.m4 (original)
+++ subversion/branches/swig-py3/build/ac-macros/lz4.m4 Sun Dec 24 05:23:08 2017
@@ -28,7 +28,15 @@ AC_DEFUN(SVN_LZ4,
   AC_ARG_WITH([lz4],
     [AS_HELP_STRING([--with-lz4=PREFIX|internal],
                     [look for lz4 in PREFIX or use the internal code])],
-    [lz4_prefix="$withval"],
+    [
+      if test "$withval" = internal; then
+        lz4_prefix=internal
+      elif test "$withval" = yes; then
+        lz4_prefix=std
+      else
+        lz4_prefix="$withval"
+      fi
+    ],
     [lz4_prefix=std])
 
   if test "$lz4_prefix" = "internal"; then
@@ -42,28 +50,36 @@ AC_DEFUN(SVN_LZ4,
       SVN_LZ4_PREFIX
     fi
     if test "$lz4_found" != "yes"; then
-      AC_MSG_ERROR([Subversion requires LZ4])
+      AC_MSG_ERROR([Subversion requires LZ4 >= r129, or use --with-lz4=internal])
     fi
   fi
   AC_SUBST(SVN_LZ4_INCLUDES)
   AC_SUBST(SVN_LZ4_LIBS)
 ])
 
+dnl LZ4 changed versioning schemes after r131, the next version being 1.7.3, so
+dnl we need to check for both schemes.  We can't use "--atleast-version=1.7.3"
+dnl because that will result in a >= 1 check for the older versioning scheme.
+dnl Instead, fallback to --max-version=3 if the old scheme fails.  This gives a
+dnl little room for major version changes, but won't falsely identify old
+dnl versions as supported.
 AC_DEFUN(SVN_LZ4_STD,
 [
   if test -n "$PKG_CONFIG"; then
     AC_MSG_CHECKING([for lz4 library via pkg-config])
-    if $PKG_CONFIG liblz4 --exists; then
+    if $PKG_CONFIG liblz4 --atleast-version=129 || $PKG_CONFIG liblz4 --max-version=3; then
       AC_MSG_RESULT([yes])
       lz4_found=yes
       SVN_LZ4_INCLUDES=`$PKG_CONFIG liblz4 --cflags`
       SVN_LZ4_LIBS=`$PKG_CONFIG liblz4 --libs`
       SVN_LZ4_LIBS="`SVN_REMOVE_STANDARD_LIB_DIRS($SVN_LZ4_LIBS)`"
+    else
+      AC_MSG_RESULT([no])
     fi
-  else
+  fi
+  if test "$lz4_found" != "yes"; then
     AC_MSG_NOTICE([lz4 configuration without pkg-config])
-    AC_CHECK_LIB(lz4, LZ4_decompress_safe, [
-      AC_MSG_RESULT([yes])
+    AC_CHECK_LIB(lz4, LZ4_compress_default, [
       lz4_found=yes
       SVN_LZ4_LIBS="-llz4"
     ])
@@ -77,8 +93,7 @@ AC_DEFUN(SVN_LZ4_PREFIX,
   CPPFLAGS="$CPPFLAGS -I$lz4_prefix/include"
   save_ldflags="$LDFLAGS"
   LDFLAGS="$LDFLAGS -L$lz4_prefix/lib"
-  AC_CHECK_LIB(lz4, LZ4_decompress_safe, [
-    AC_MSG_RESULT([yes])
+  AC_CHECK_LIB(lz4, LZ4_compress_default, [
     lz4_found=yes
     SVN_LZ4_INCLUDES="-I$lz4_prefix/include"
     SVN_LZ4_LIBS="`SVN_REMOVE_STANDARD_LIB_DIRS(-L$lz4_prefix/lib)` -llz4"

Modified: subversion/branches/swig-py3/build/ac-macros/utf8proc.m4
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/build/ac-macros/utf8proc.m4?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/build/ac-macros/utf8proc.m4 (original)
+++ subversion/branches/swig-py3/build/ac-macros/utf8proc.m4 Sun Dec 24 05:23:08 2017
@@ -28,7 +28,15 @@ AC_DEFUN(SVN_UTF8PROC,
   AC_ARG_WITH([utf8proc],
     [AS_HELP_STRING([--with-utf8proc=PREFIX|internal],
                     [look for utf8proc in PREFIX or use the internal code])],
-    [utf8proc_prefix="$withval"],
+    [
+      if test "$withval" = internal; then
+        utf8proc_prefix=internal
+      elif test "$withval" = yes; then
+        utf8proc_prefix=std
+      else
+        utf8proc_prefix="$withval"
+      fi
+    ],
     [utf8proc_prefix=std])
 
   if test "$utf8proc_prefix" = "internal"; then
@@ -53,7 +61,6 @@ AC_DEFUN(SVN_UTF8PROC_STD,
 [
   AC_MSG_NOTICE([utf8proc configuration without pkg-config])
   AC_CHECK_LIB(utf8proc, utf8proc_version, [
-    AC_MSG_RESULT([yes])
      utf8proc_found=yes
      SVN_UTF8PROC_LIBS="-lutf8proc"
   ])
@@ -67,7 +74,6 @@ AC_DEFUN(SVN_UTF8PROC_PREFIX,
   save_ldflags="$LDFLAGS"
   LDFLAGS="$LDFLAGS -L$utf8proc_prefix/lib"
   AC_CHECK_LIB(utf8proc, utf8proc_version, [
-    AC_MSG_RESULT([yes])
     utf8proc_found=yes
     SVN_UTF8PROC_INCLUDES="-I$utf8proc_prefix/include"
     SVN_UTF8PROC_LIBS="`SVN_REMOVE_STANDARD_LIB_DIRS(-L$utf8proc_prefix/lib)` -lutf8proc"

Modified: subversion/branches/swig-py3/build/generator/gen_win_dependencies.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/build/generator/gen_win_dependencies.py?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/build/generator/gen_win_dependencies.py (original)
+++ subversion/branches/swig-py3/build/generator/gen_win_dependencies.py Sun Dec 24 05:23:08 2017
@@ -878,16 +878,26 @@ class GenDependenciesBase(gen_base.Gener
                int(vermatch.group(4)))
     openssl_version = vermatch.group(1)
 
+    libcrypto = 'libcrypto'
+    libssl = 'libssl'
+    versuffix = '-%d_%d' % version[0:2]
+    if version < (1, 1, 0):
+      libcrypto = 'libeay32'
+      libssl = 'ssleay32'
+      versuffix = ''
+
     self._libraries['openssl'] = SVNCommonLibrary('openssl', inc_dir, lib_dir,
-                                                  'ssleay32.lib',
+                                                  '%s.lib' % (libssl,),
                                                   openssl_version,
-                                                  dll_name='ssleay32.dll',
+                                                  dll_name='%s%s.dll' %
+                                                      (libssl, versuffix),
                                                   dll_dir=bin_dir)
 
-    self._libraries['libeay32'] = SVNCommonLibrary('openssl', inc_dir, lib_dir,
-                                                    'libeay32.lib',
+    self._libraries['libcrypto'] = SVNCommonLibrary('openssl', inc_dir, lib_dir,
+                                                    '%s.lib' % (libcrypto,),
                                                     openssl_version,
-                                                    dll_name='libeay32.dll',
+                                                    dll_name='%s%s.dll' %
+                                                      (libcrypto, versuffix),
                                                     dll_dir=bin_dir)
 
   def _find_perl(self, show_warnings):
@@ -1373,7 +1383,7 @@ class GenDependenciesBase(gen_base.Gener
   def _find_sqlite(self, show_warnings):
     "Find the Sqlite library and version"
 
-    minimal_sqlite_version = (3, 7, 12)
+    minimal_sqlite_version = (3, 8, 2)
 
     # For SQLite we support 3 scenarios:
     # - Installed in standard directory layout

Modified: subversion/branches/swig-py3/build/run_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/build/run_tests.py?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/build/run_tests.py (original)
+++ subversion/branches/swig-py3/build/run_tests.py Sun Dec 24 05:23:08 2017
@@ -33,7 +33,7 @@
             [--httpd-version=<version>] [--httpd-whitelist=<version>]
             [--config-file=<file>] [--ssl-cert=<file>]
             [--exclusive-wc-locks] [--memcached-server=<url:port>]
-            [--fsfs-compression=<type>]
+            [--fsfs-compression=<type>] [--fsfs-dir-deltification=<true|false>]
             <abs_srcdir> <abs_builddir>
             <prog ...>
 
@@ -278,6 +278,8 @@ class TestHarness:
       cmdline.append('--memcached-server=%s' % self.opts.memcached_server)
     if self.opts.fsfs_compression is not None:
       cmdline.append('--fsfs-compression=%s' % self.opts.fsfs_compression)
+    if self.opts.fsfs_dir_deltification is not None:
+      cmdline.append('--fsfs-dir-deltification=%s' % self.opts.fsfs_dir_deltification)
 
     self.py_test_cmdline = cmdline
 
@@ -424,7 +426,7 @@ class TestHarness:
           os.write(sys.stdout.fileno(), b'.' * job.test_count())
 
 
-  def _run_global_sheduler(self, testlist, has_py_tests):
+  def _run_global_scheduler(self, testlist, has_py_tests):
     # Collect all tests to execute (separate jobs for each test in python
     # test cases, one job for each c test case).  Do that concurrently to
     # mask latency.  This takes .5s instead of about 3s.
@@ -576,7 +578,7 @@ class TestHarness:
     if self.opts.global_scheduler is None:
       failed = self._run_local_schedulers(testlist)
     else:
-      failed = self._run_global_sheduler(testlist, len(py_tests) > 0)
+      failed = self._run_global_scheduler(testlist, len(py_tests) > 0)
 
     # Open the log again to for filtering.
     if self.logfile:
@@ -1028,6 +1030,8 @@ def create_parser():
                     help='Use memcached server at specified URL (FSFS only)')
   parser.add_option('--fsfs-compression', action='store', type='str',
                     help='Set compression type (for fsfs)')
+  parser.add_option('--fsfs-dir-deltification', action='store', type='str',
+                    help='Set directory deltification option (for fsfs)')
 
   parser.set_defaults(set_log_level=None)
   return parser
@@ -1036,7 +1040,9 @@ def main():
   (opts, args) = create_parser().parse_args(sys.argv[1:])
 
   if len(args) < 3:
-    print(__doc__)
+    print("{}: at least three positional arguments required; got {!r}".format(
+      os.path.basename(sys.argv[0]), args
+    ))
     sys.exit(2)
 
   if opts.log_to_stdout:

Modified: subversion/branches/swig-py3/configure.ac
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/configure.ac?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/configure.ac (original)
+++ subversion/branches/swig-py3/configure.ac Sun Dec 24 05:23:08 2017
@@ -152,9 +152,11 @@ SVN_FIND_APACHE(20051115, $apache_whitel
 dnl Search for SQLite.  If you change SQLITE_URL from a .zip to
 dnl something else also update build/ac-macros/sqlite.m4 to reflect
 dnl the correct command to unpack the downloaded file.
-SQLITE_MINIMUM_VER="3.7.12"
-SQLITE_RECOMMENDED_VER="3.7.15.1"
-SQLITE_URL="http://www.sqlite.org/sqlite-amalgamation-$(printf %d%02d%02d%02d $(echo ${SQLITE_RECOMMENDED_VER} | sed -e 's/\./ /g')).zip"
+SQLITE_MINIMUM_VER="3.8.2"
+SQLITE_RECOMMENDED_VER="3.8.11.1"
+dnl Used to construct the SQLite download URL.
+SQLITE_RECOMMENDED_VER_REL_YEAR="2015"
+SQLITE_URL="https://www.sqlite.org/$SQLITE_RECOMMENDED_VER_REL_YEAR/sqlite-amalgamation-$(printf %d%02d%02d%02d $(echo ${SQLITE_RECOMMENDED_VER} | sed -e 's/\./ /g')).zip"
 
 SVN_LIB_SQLITE(${SQLITE_MINIMUM_VER}, ${SQLITE_RECOMMENDED_VER},
                ${SQLITE_URL})
@@ -1358,6 +1360,10 @@ if test "$RUBY" != "none"; then
 fi
 
 SVN_CHECK_SWIG
+AC_ARG_VAR(SWIG_FEATURES, [SWIG feature flags common to all bindings])
+AC_ARG_VAR(SWIG_RB_FEATURES, [SWIG feature flags specific to Ruby bindings])
+AC_ARG_VAR(SWIG_PL_FEATURES, [SWIG feature flags specific to Perl bindings])
+AC_ARG_VAR(SWIG_PY_FEATURES, [SWIG feature flags specific to Python bindings])
 
 SVN_CHECK_CTYPESGEN
 
@@ -1534,12 +1540,6 @@ if test "$CC" = "clang"; then
   SVN_STRIP_FLAG(CPPFLAGS, [-no-cpp-precomp ])
 fi
 
-# Need to strip '-no-cpp-precomp' from CPPFLAGS for SWIG as well.
-SWIG_CPPFLAGS="$CPPFLAGS"
-SVN_STRIP_FLAG(SWIG_CPPFLAGS, [-no-cpp-precomp ])
-SVN_STRIP_FLAG(SWIG_CPPFLAGS, [-Wdate-time ])
-AC_SUBST([SWIG_CPPFLAGS])
-
 dnl Since this is used only on Unix-y systems, define the path separator as '/'
 AC_DEFINE_UNQUOTED(SVN_PATH_LOCAL_SEPARATOR, '/',
         [Defined to be the path separator used on your local filesystem])

Modified: subversion/branches/swig-py3/get-deps.sh
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/get-deps.sh?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/get-deps.sh (original)
+++ subversion/branches/swig-py3/get-deps.sh Sun Dec 24 05:23:08 2017
@@ -35,7 +35,9 @@ APR_VERSION=${APR_VERSION:-"1.4.6"}
 APU_VERSION=${APU_VERSION:-"1.5.1"}
 SERF_VERSION=${SERF_VERSION:-"1.3.8"}
 ZLIB_VERSION=${ZLIB_VERSION:-"1.2.8"}
-SQLITE_VERSION=${SQLITE_VERSION:-"3.7.15.1"}
+SQLITE_VERSION=${SQLITE_VERSION:-"3.8.11.1"}
+# Used to construct the SQLite download URL.
+SQLITE_VERSION_REL_YEAR=2015
 GTEST_VERSION=${GMOCK_VERSION:-"1.7.0"}
 GMOCK_VERSION=${GMOCK_VERSION:-"1.7.0"}
 HTTPD_VERSION=${HTTPD_VERSION:-"2.4.10"}
@@ -116,7 +118,7 @@ get_sqlite() {
     test -d $BASEDIR/sqlite-amalgamation && return
 
     cd $TEMPDIR
-    $HTTP_FETCH http://www.sqlite.org/$SQLITE.zip
+    $HTTP_FETCH https://www.sqlite.org/$SQLITE_VERSION_REL_YEAR/$SQLITE.zip
     cd $BASEDIR
 
     unzip -q $TEMPDIR/$SQLITE.zip

Modified: subversion/branches/swig-py3/notes/commit-access-templates/partial-committer.tmpl
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/notes/commit-access-templates/partial-committer.tmpl?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/notes/commit-access-templates/partial-committer.tmpl (original)
+++ subversion/branches/swig-py3/notes/commit-access-templates/partial-committer.tmpl Sun Dec 24 05:23:08 2017
@@ -15,18 +15,20 @@ Hi New Partial Committer,
 The other committers and I would like to offer you partial commit
 access for maintenance of the Subversion FROBLINGS area.
 
-If you already have partial commit access to another area, you can
+#ifdef THE_INVITEE_ALREADY_HAS_PARTIAL_COMMIT_ACCESS_TO_ANOTHER_AREA
+Since you already have partial commit access to another area, you can
 accept this offer by simply replying to this mail.  We'll update the
 COMMITTERS file (or you can do it yourself, that's fine too).
 
-If you do not already have partial commit access, you can accept this
-offer by replying to this mail and following the instructions at
-<http://www.apache.org/dev/new-committers-guide.html#cla>.  You will
-receive an email with details on how to access your account.  Once you
-have access to your account, you are encouraged to modify the COMMITTERS
-file appropriately, which also serves as a test of your new username and
-password.
+#else
+You can accept this offer by replying to this mail and following the
+instructions at <http://www.apache.org/dev/new-committers-guide.html#cla>.
+You will receive an email with details on how to access your account.
+Once you have access to your account, you are encouraged to modify the
+COMMITTERS file appropriately, which also serves as a test of your new
+username and password.
 
+#endif
 Remember that you can still post patches for review before committing,
 when you want to.  Commit access just means that you can rely on your
 own judgment to decide when something is ready for commit.  Also, if

Modified: subversion/branches/swig-py3/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java (original)
+++ subversion/branches/swig-py3/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java Sun Dec 24 05:23:08 2017
@@ -141,12 +141,15 @@ public class NativeResources
      */
     private static final void init()
     {
+        final int SVN_VER_MAJOR = 1;
+        final int SVN_VER_MINOR = 11;
         initNativeLibrary();
         version = new Version();
-        if (!version.isAtLeast(1, 10, 0))
+        if (!version.isAtLeast(SVN_VER_MAJOR, SVN_VER_MINOR, 0))
         {
             throw new LinkageError("Native library version must be at least " +
-                                   "1.10.0, but is only " + version);
+                                   SVN_VER_MAJOR + "." + SVN_VER_MINOR + ".0," +
+                                   "but is only " + version);
         }
 
         runtimeVersion = new RuntimeVersion();

Modified: subversion/branches/swig-py3/subversion/bindings/swig/perl/native/t/3client.t
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/bindings/swig/perl/native/t/3client.t?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/bindings/swig/perl/native/t/3client.t (original)
+++ subversion/branches/swig-py3/subversion/bindings/swig/perl/native/t/3client.t Sun Dec 24 05:23:08 2017
@@ -1091,8 +1091,8 @@ isa_ok($dirents->{'dir1'},'_p_svn_dirent
 is($dirents->{'dir1'}->kind(),$SVN::Core::node_dir,
    'kind() returns a dir node');
 # TEST
-is($dirents->{'dir1'}->size(),0,
-   'size() returns 0 for a directory');
+is($dirents->{'dir1'}->size(), -1,
+   'size() returns -1 for a directory');
 # TEST
 is($dirents->{'dir1'}->has_props(),1,
    'has_props() returns true');

Modified: subversion/branches/swig-py3/subversion/include/private/svn_element.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/include/private/svn_element.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/include/private/svn_element.h (original)
+++ subversion/branches/swig-py3/subversion/include/private/svn_element.h Sun Dec 24 05:23:08 2017
@@ -348,7 +348,7 @@ svn_element__content_t *
 svn_element__tree_get(const svn_element__tree_t *tree,
                       int eid);
 
-svn_error_t *
+void
 svn_element__tree_set(svn_element__tree_t *tree,
                       int eid,
                       const svn_element__content_t *element);

Modified: subversion/branches/swig-py3/subversion/include/private/svn_ra_svn_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/include/private/svn_ra_svn_private.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/include/private/svn_ra_svn_private.h (original)
+++ subversion/branches/swig-py3/subversion/include/private/svn_ra_svn_private.h Sun Dec 24 05:23:08 2017
@@ -127,6 +127,11 @@ svn_error_t *
 svn_ra_svn__set_capabilities(svn_ra_svn_conn_t *conn,
                              const svn_ra_svn__list_t *list);
 
+/** Returns the preferred svndiff version to be used with connection @a conn.
+ */
+int
+svn_ra_svn__svndiff_version(svn_ra_svn_conn_t *conn);
+
 
 /**
  * Set the shim callbacks to be used by @a conn to @a shim_callbacks.

Modified: subversion/branches/swig-py3/subversion/include/private/svn_subr_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/include/private/svn_subr_private.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/include/private/svn_subr_private.h (original)
+++ subversion/branches/swig-py3/subversion/include/private/svn_subr_private.h Sun Dec 24 05:23:08 2017
@@ -738,6 +738,14 @@ const char *svn_zlib__compiled_version(v
 /* Return the zlib version we run against. */
 const char *svn_zlib__runtime_version(void);
 
+/* Return the lz4 version we compiled against. */
+const char *svn_lz4__compiled_version(void);
+
+/* Return the lz4 version we run against as a composed value:
+ * major * 100 * 100 + minor * 100 + release
+ */
+int svn_lz4__runtime_version(void);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/swig-py3/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/include/private/svn_wc_private.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/swig-py3/subversion/include/private/svn_wc_private.h Sun Dec 24 05:23:08 2017
@@ -348,6 +348,20 @@ svn_wc__get_wcroot(const char **wcroot_a
                    apr_pool_t *result_pool,
                    apr_pool_t *scratch_pool);
 
+/** Set @a *dir to the abspath of the directory in which shelved patches
+ * are stored, which is inside the WC's administrative directory, and ensure
+ * the directory exists.
+ *
+ * @a local_abspath is any path in the WC, and is used to find the WC root.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_wc__get_shelves_dir(char **dir,
+                        svn_wc_context_t *wc_ctx,
+                        const char *local_abspath,
+                        apr_pool_t *result_pool,
+                        apr_pool_t *scratch_pool);
+
 /**
  * The following are temporary APIs to aid in the transition from wc-1 to
  * wc-ng.  Use them for new development now, but they may be disappearing

Modified: subversion/branches/swig-py3/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/include/svn_client.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/include/svn_client.h (original)
+++ subversion/branches/swig-py3/subversion/include/svn_client.h Sun Dec 24 05:23:08 2017
@@ -6715,6 +6715,212 @@ svn_client_cat(svn_stream_t *out,
 
 
 
+/** Shelving commands
+ *
+ * @defgroup svn_client_shelve_funcs Client Shelving Functions
+ * @{
+ */
+
+/** Shelve a change.
+ *
+ * Shelve as @a name the local modifications found by @a paths, @a depth,
+ * @a changelists. Revert the shelved change from the WC unless @a keep_local
+ * is true.
+ *
+ * If @a dry_run is true, don't actually do it.
+ *
+ * @since New in 1.10.
+ * @warning EXPERIMENTAL.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_client_shelve(const char *name,
+                  const apr_array_header_t *paths,
+                  svn_depth_t depth,
+                  const apr_array_header_t *changelists,
+                  svn_boolean_t keep_local,
+                  svn_boolean_t dry_run,
+                  svn_client_ctx_t *ctx,
+                  apr_pool_t *pool);
+
+/** Unshelve the shelved change @a name.
+ *
+ * @a local_abspath is any path in the WC and is used to find the WC root.
+ * Rename the shelved patch to add a '.bak' extension unless @a keep is true.
+ *
+ * If @a dry_run is true, don't actually do it.
+ *
+ * @since New in 1.10.
+ * @warning EXPERIMENTAL.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_client_unshelve(const char *name,
+                    const char *local_abspath,
+                    svn_boolean_t keep,
+                    svn_boolean_t dry_run,
+                    svn_client_ctx_t *ctx,
+                    apr_pool_t *pool);
+
+/** Delete the shelved patch @a name.
+ *
+ * @a local_abspath is any path in the WC and is used to find the WC root.
+ *
+ * If @a dry_run is true, don't actually do it.
+ *
+ * @since New in 1.10.
+ * @warning EXPERIMENTAL.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_client_shelves_delete(const char *name,
+                          const char *local_abspath,
+                          svn_boolean_t dry_run,
+                          svn_client_ctx_t *ctx,
+                          apr_pool_t *pool);
+
+/** Information about a shelved patch.
+ *
+ * @since New in 1.10.
+ * @warning EXPERIMENTAL.
+ */
+typedef struct svn_client_shelved_patch_info_t
+{
+  const char *message;  /* first line of log message */
+  const char *patch_path;  /* abspath of the patch file */
+  svn_io_dirent2_t *dirent;  /* info about the patch file */
+  apr_time_t mtime;  /* a copy of dirent->mtime */
+} svn_client_shelved_patch_info_t;
+
+/** Set @a *shelved_patch_infos to a hash, keyed by patch name, of pointers to
+ * @c svn_client_shelved_patch_info_t structures.
+ *
+ * @a local_abspath is any path in the WC and is used to find the WC root.
+ *
+ * @since New in 1.10.
+ * @warning EXPERIMENTAL.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_client_shelves_list(apr_hash_t **shelved_patch_infos,
+                        const char *local_abspath,
+                        svn_client_ctx_t *ctx,
+                        apr_pool_t *result_pool,
+                        apr_pool_t *scratch_pool);
+
+/** Set @a *any_shelved to indicate if there are any shelved changes in this WC.
+ *
+ * This shall provide the answer fast, regardless of how many changes
+ * are stored, unlike svn_client_shelves_list().
+ *
+ * ### Initial implementation isn't O(1) fast -- it just calls
+ *     svn_client_shelves_list().
+ *
+ * @a local_abspath is any path in the WC and is used to find the WC root.
+ *
+ * @since New in 1.10.
+ * @warning EXPERIMENTAL.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_client_shelves_any(svn_boolean_t *any_shelved,
+                       const char *local_abspath,
+                       svn_client_ctx_t *ctx,
+                       apr_pool_t *scratch_pool);
+
+/** Set @a *affected_paths to a hash with one entry for each path affected
+ * by the shelf @a name. The hash key is the old path and value is
+ * the new path, both relative to the WC root. The key and value are the
+ * same except when a path is moved or copied.
+ *
+ * @since New in 1.10.
+ * @warning EXPERIMENTAL.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_client_shelf_get_paths(apr_hash_t **affected_paths,
+                           const char *name,
+                           const char *local_abspath,
+                           svn_client_ctx_t *ctx,
+                           apr_pool_t *result_pool,
+                           apr_pool_t *scratch_pool);
+
+/** Set @a *has_changes to indicate whether the shelf @a name
+ * contains any modifications, in other words if svn_client_shelf_get_paths()
+ * would return a non-empty set of paths.
+ *
+ * @since New in 1.10.
+ * @warning EXPERIMENTAL.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_client_shelf_has_changes(svn_boolean_t *has_changes,
+                             const char *name,
+                             const char *local_abspath,
+                             svn_client_ctx_t *ctx,
+                             apr_pool_t *scratch_pool);
+
+/** Write local changes to a patch file for shelved change @a name.
+ *
+ * @a message: An optional log message.
+ *
+ * @a wc_root_abspath: The WC root dir.
+ *
+ * @a overwrite_existing: If a file at @a patch_abspath exists, overwrite it.
+ *
+ * @a paths, @a depth, @a changelists: The selection of local paths to diff.
+ *
+ * @since New in 1.10.
+ * @warning EXPERIMENTAL.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_client_shelf_write_patch(const char *name,
+                             const char *message,
+                             const char *wc_root_abspath,
+                             svn_boolean_t overwrite_existing,
+                             const apr_array_header_t *paths,
+                             svn_depth_t depth,
+                             const apr_array_header_t *changelists,
+                             svn_client_ctx_t *ctx,
+                             apr_pool_t *scratch_pool);
+
+/** Apply the patch file for shelved change @a name to the WC.
+ *
+ * @a wc_root_abspath: The WC root dir.
+ *
+ * @a reverse: Apply the patch in reverse.
+ *
+ * @a dry_run: Don't really apply the changes, just notify what would be done.
+ *
+ * @since New in 1.10.
+ * @warning EXPERIMENTAL.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_client_shelf_apply_patch(const char *name,
+                             const char *wc_root_abspath,
+                             svn_boolean_t reverse,
+                             svn_boolean_t dry_run,
+                             svn_client_ctx_t *ctx,
+                             apr_pool_t *scratch_pool);
+
+/** Delete the patch file for shelved change @a name.
+ *
+ * @a wc_root_abspath: The WC root dir.
+ *
+ * @since New in 1.10.
+ * @warning EXPERIMENTAL.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_client_shelf_delete_patch(const char *name,
+                              const char *wc_root_abspath,
+                              svn_client_ctx_t *ctx,
+                              apr_pool_t *scratch_pool);
+
+/** @} */
+
 /** Changelist commands
  *
  * @defgroup svn_client_changelist_funcs Client Changelist Functions

Modified: subversion/branches/swig-py3/subversion/include/svn_dav.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/include/svn_dav.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/include/svn_dav.h (original)
+++ subversion/branches/swig-py3/subversion/include/svn_dav.h Sun Dec 24 05:23:08 2017
@@ -397,6 +397,15 @@ extern "C" {
 
 /** Presence of this in a DAV header in an OPTIONS response indicates
  * that the transmitter (in this case, the server) knows how to handle
+ * 'list' requests.
+ *
+ * @since New in 1.10.
+ */
+#define SVN_DAV_NS_DAV_SVN_LIST\
+            SVN_DAV_PROP_NS_DAV "svn/list"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to handle
  * svndiff2 format encoding.
  *
  * @since New in 1.10.

Modified: subversion/branches/swig-py3/subversion/include/svn_delta.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/include/svn_delta.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/include/svn_delta.h (original)
+++ subversion/branches/swig-py3/subversion/include/svn_delta.h Sun Dec 24 05:23:08 2017
@@ -693,12 +693,11 @@ svn_txdelta_skip_svndiff_window(apr_file
 /** A structure full of callback functions the delta source will invoke
  * as it produces the delta.
  *
- * @note Fields may be added to the end of this structure in future
- * versions.  Therefore, users shouldn't allocate structures of this
- * type, to preserve binary compatibility.
- *
- * @note It is recommended to use svn_delta_default_editor() or some other
- * constructor, to ensure that unused slots are filled in with no-op functions.
+ * @note Don't try to allocate one of these yourself.  Instead, always
+ * use svn_delta_default_editor() or some other constructor, to avoid
+ * backwards compatibility problems if the structure is extended in
+ * future releases and to ensure that unused slots are filled in with
+ * no-op functions.
  *
  * <h3>Function Usage</h3>
  *
@@ -769,10 +768,11 @@ svn_txdelta_skip_svndiff_window(apr_file
  *
  * The @c add_file and @c open_file callbacks each return a baton
  * for the file being created or changed.  This baton can then be
- * passed to @c apply_textdelta to change the file's contents, or
- * @c change_file_prop to change the file's properties.  When the
- * producer is finished making changes to a file, it should call
- * @c close_file, to let the consumer clean up and free the baton.
+ * passed to @c apply_textdelta or @c apply_textdelta_stream to change
+ * the file's contents, or @c change_file_prop to change the file's
+ * properties.  When the producer is finished making changes to a
+ * file, it should call @c close_file, to let the consumer clean up
+ * and free the baton.
  *
  * The @c add_file and @c add_directory functions each take arguments
  * @a copyfrom_path and @a copyfrom_revision.  If @a copyfrom_path is
@@ -814,15 +814,16 @@ svn_txdelta_skip_svndiff_window(apr_file
  * 5. When the producer calls @c open_file or @c add_file, either:
  *
  *    (a) The producer must follow with any changes to the file
- *    (@c change_file_prop and/or @c apply_textdelta, as applicable),
- *    followed by a @c close_file call, before issuing any other file
- *    or directory calls, or
+ *    (@c change_file_prop and/or @c apply_textdelta /
+ *    @c apply_textdelta_stream, as applicable), followed by
+ *    a @c close_file call, before issuing any other file or
+ *    directory calls, or
  *
  *    (b) The producer must follow with a @c change_file_prop call if
  *    it is applicable, before issuing any other file or directory
  *    calls; later, after all directory batons including the root
- *    have been closed, the producer must issue @c apply_textdelta
- *    and @c close_file calls.
+ *    have been closed, the producer must issue @c apply_textdelta /
+ *    @c apply_textdelta_stream and @c close_file calls.
  *
  * 6. When the producer calls @c apply_textdelta, it must make all of
  *    the window handler calls (including the @c NULL window at the
@@ -831,7 +832,7 @@ svn_txdelta_skip_svndiff_window(apr_file
  * So, the producer needs to use directory and file batons as if it
  * is doing a single depth-first traversal of the tree, with the
  * exception that the producer may keep file batons open in order to
- * make @c apply_textdelta calls at the end.
+ * make @c apply_textdelta / @c apply_textdelta_stream calls at the end.
  *
  *
  * <h3>Pool Usage</h3>
@@ -855,12 +856,13 @@ svn_txdelta_skip_svndiff_window(apr_file
  * Note that close_directory can be called *before* a file in that
  * directory has been closed. That is, the directory's baton is
  * closed before the file's baton. The implication is that
- * @c apply_textdelta and @c close_file should not refer to a parent
- * directory baton UNLESS the editor has taken precautions to
- * allocate it in a pool of the appropriate lifetime (the @a dir_pool
- * passed to @c open_directory and @c add_directory definitely does not
- * have the proper lifetime). In general, it is recommended to simply
- * avoid keeping a parent directory baton in a file baton.
+ * @c apply_textdelta / @c apply_textdelta_stream and @c close_file
+ * should not refer to a parent directory baton UNLESS the editor has
+ * taken precautions to allocate it in a pool of the appropriate
+ * lifetime (the @a dir_pool passed to @c open_directory and
+ * @c add_directory definitely does not have the proper lifetime).
+ * In general, it is recommended to simply avoid keeping a parent
+ * directory baton in a file baton.
  *
  *
  * <h3>Errors</h3>
@@ -1008,7 +1010,8 @@ typedef struct svn_delta_editor_t
   /** We are going to add a new file at @a path, a child of the
    * directory represented by @a parent_baton.  The callback can
    * store a baton for this new file in @a **file_baton; whatever value
-   * it stores there should be passed through to @c apply_textdelta.
+   * it stores there should be passed through to @c apply_textdelta or
+   * @c apply_textdelta_stream.
    *
    * If @a copyfrom_path is non-@c NULL, this add has history (i.e., is a
    * copy), and the origin of the copy may be recorded as
@@ -1040,8 +1043,8 @@ typedef struct svn_delta_editor_t
    *
    * The callback can store a baton for this new file in @a **file_baton;
    * whatever value it stores there should be passed through to
-   * @c apply_textdelta.  If a valid revnum, @a base_revision is the
-   * current revision of the file.
+   * @c apply_textdelta or @c apply_textdelta_stream.  If a valid revnum,
+   * @a base_revision is the current revision of the file.
    *
    * Allocations for the returned @a file_baton should be performed in
    * @a result_pool. It is also typical to save this pool for later usage
@@ -1106,11 +1109,11 @@ typedef struct svn_delta_editor_t
    * more, so whatever resources it refers to may now be freed.
    *
    * @a text_checksum is the hex MD5 digest for the fulltext that
-   * resulted from a delta application, see @c apply_textdelta.  The
-   * checksum is ignored if NULL.  If not null, it is compared to the
-   * checksum of the new fulltext, and the error
-   * SVN_ERR_CHECKSUM_MISMATCH is returned if they do not match.  If
-   * there is no new fulltext, @a text_checksum is ignored.
+   * resulted from a delta application, see @c apply_textdelta and
+   * @c apply_textdelta_stream.  The checksum is ignored if NULL.
+   * If not null, it is compared to the checksum of the new fulltext,
+   * and the error SVN_ERR_CHECKSUM_MISMATCH is returned if they do
+   * not match.  If there is no new fulltext, @a text_checksum is ignored.
    *
    * Any temporary allocations may be performed in @a scratch_pool.
    */
@@ -1147,6 +1150,7 @@ typedef struct svn_delta_editor_t
                              apr_pool_t *scratch_pool);
 
   /** Apply a text delta stream, yielding the new revision of a file.
+   * This callback operates on the passed-in @a editor instance.
    *
    * @a file_baton indicates the file we're creating or updating, and the
    * ancestor file on which it is based; it is the baton set by some
@@ -1166,6 +1170,8 @@ typedef struct svn_delta_editor_t
    * empty string).
    *
    * Any temporary allocations may be performed in @a scratch_pool.
+   *
+   * @since New in 1.10.
    */
   svn_error_t *(*apply_textdelta_stream)(
     const struct svn_delta_editor_t *editor,

Modified: subversion/branches/swig-py3/subversion/include/svn_diff.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/include/svn_diff.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/include/svn_diff.h (original)
+++ subversion/branches/swig-py3/subversion/include/svn_diff.h Sun Dec 24 05:23:08 2017
@@ -1246,6 +1246,9 @@ svn_diff_get_binary_diff_result_stream(c
 
 /**
  * Data type to manage parsing of patches.
+ *
+ * Represents a patch to one target file.
+ *
  * API users should not allocate structures of this type directly.
  *
  * @since New in 1.7. */
@@ -1272,7 +1275,9 @@ typedef struct svn_patch_t {
   svn_diff_operation_kind_t operation;
 
   /**
-   * Indicates whether the patch is being interpreted in reverse. */
+   * Indicates whether the patch is being interpreted in reverse.
+   * ### If so, how does this affect the interpretation of other fields?
+   */
   svn_boolean_t reverse;
 
   /**

Modified: subversion/branches/swig-py3/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/include/svn_io.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/include/svn_io.h (original)
+++ subversion/branches/swig-py3/subversion/include/svn_io.h Sun Dec 24 05:23:08 2017
@@ -2633,6 +2633,15 @@ svn_io_file_readline(apr_file_t *file,
                      apr_pool_t *result_pool,
                      apr_pool_t *scratch_pool);
 
+/** Reads a string from stdin until a newline or EOF is found
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_io_stdin_readline(const char **result,
+                      apr_pool_t *result_pool,
+                      apr_pool_t *scratch_pool);
+
 /** @} */
 
 #ifdef __cplusplus

Modified: subversion/branches/swig-py3/subversion/include/svn_types.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/include/svn_types.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/include/svn_types.h (original)
+++ subversion/branches/swig-py3/subversion/include/svn_types.h Sun Dec 24 05:23:08 2017
@@ -652,7 +652,7 @@ typedef struct svn_dirent_t
   /** node kind */
   svn_node_kind_t kind;
 
-  /** length of file text, or 0 for directories */
+  /** length of file text, otherwise SVN_INVALID_FILESIZE */
   svn_filesize_t size;
 
   /** does the node have props? */

Modified: subversion/branches/swig-py3/subversion/include/svn_version.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/include/svn_version.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/include/svn_version.h (original)
+++ subversion/branches/swig-py3/subversion/include/svn_version.h Sun Dec 24 05:23:08 2017
@@ -61,7 +61,7 @@ extern "C" {
  * Modify when new functionality is added or new interfaces are
  * defined, but all changes are backward compatible.
  */
-#define SVN_VER_MINOR      10
+#define SVN_VER_MINOR      11
 
 /**
  * Patch number.

Modified: subversion/branches/swig-py3/subversion/libsvn_client/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_client/conflicts.c?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_client/conflicts.c (original)
+++ subversion/branches/swig-py3/subversion/libsvn_client/conflicts.c Sun Dec 24 05:23:08 2017
@@ -5011,7 +5011,7 @@ conflict_tree_get_details_incoming_delet
 
   conflict->tree_conflict_incoming_details = details;
 
-  if (details->moves)
+  if (details && details->moves)
     SVN_ERR(init_wc_move_targets(details, conflict, ctx, scratch_pool));
 
   return SVN_NO_ERROR;
@@ -5711,15 +5711,12 @@ find_modified_rev(void *baton,
         details->children_modified = svn_tristate_true;
     }
 
-  if (details)
-    {
-      if (b->node_kind == svn_node_dir &&
-          details->children_modified == svn_tristate_unknown)
-            details->children_modified = svn_tristate_false;
+  if (b->node_kind == svn_node_dir &&
+      details->children_modified == svn_tristate_unknown)
+        details->children_modified = svn_tristate_false;
 
-      APR_ARRAY_PUSH(b->edits, struct conflict_tree_incoming_edit_details *) =
-        details;
-    }
+  APR_ARRAY_PUSH(b->edits, struct conflict_tree_incoming_edit_details *) =
+    details;
 
   svn_pool_destroy(iterpool);
 

Modified: subversion/branches/swig-py3/subversion/libsvn_client/patch.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_client/patch.c?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_client/patch.c (original)
+++ subversion/branches/swig-py3/subversion/libsvn_client/patch.c Sun Dec 24 05:23:08 2017
@@ -2145,8 +2145,8 @@ reject_hunk(patch_target_t *target, targ
   if (prop_name)
     {
       /* ### Print 'Added', 'Deleted' or 'Modified' instead of 'Property'. */
-      svn_stream_printf(target->reject_stream,
-                        pool, "Property: %s" APR_EOL_STR, prop_name);
+      SVN_ERR(svn_stream_printf(target->reject_stream,
+                                pool, "Property: %s" APR_EOL_STR, prop_name));
       atat = prop_atat;
     }
   else
@@ -2511,7 +2511,8 @@ sort_matched_hunks(const void *a, const
  * in RESULT_POOL. Use WC_CTX as the working copy context.
  * STRIP_COUNT specifies the number of leading path components
  * which should be stripped from target paths in the patch.
- * REMOVE_TEMPFILES, PATCH_FUNC, and PATCH_BATON as in svn_client_patch().
+ * REMOVE_TEMPFILES is as in svn_client_patch().
+ * TARGETS_INFO is for preserving info across calls.
  * IGNORE_WHITESPACE tells whether whitespace should be considered when
  * doing the matching.
  * Call cancel CANCEL_FUNC with baton CANCEL_BATON to trigger cancellation.

Modified: subversion/branches/swig-py3/subversion/libsvn_delta/element.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_delta/element.c?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_delta/element.c (original)
+++ subversion/branches/swig-py3/subversion/libsvn_delta/element.c Sun Dec 24 05:23:08 2017
@@ -375,14 +375,12 @@ svn_element__tree_get(const svn_element_
   return svn_eid__hash_get(tree->e_map, eid);
 }
 
-svn_error_t *
+void
 svn_element__tree_set(svn_element__tree_t *tree,
                       int eid,
                       const svn_element__content_t *element)
 {
   svn_eid__hash_set(tree->e_map, eid, element);
-
-  return SVN_NO_ERROR;
 }
 
 void

Modified: subversion/branches/swig-py3/subversion/libsvn_fs_fs/fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_fs_fs/fs.h?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_fs_fs/fs.h (original)
+++ subversion/branches/swig-py3/subversion/libsvn_fs_fs/fs.h Sun Dec 24 05:23:08 2017
@@ -188,6 +188,18 @@ extern "C" {
 /* The minimum format number that supports svndiff version 2. */
 #define SVN_FS_FS__MIN_SVNDIFF2_FORMAT 8
 
+/* The minimum format number that supports the special notation ("-")
+   for optional values that are not present in the representation strings,
+   such as SHA1 or the uniquifier.  For example:
+
+     15 0 563 7809 28ef320a82e7bd11eebdf3502d69e608 - 14-g/_5
+ */
+#define SVN_FS_FS__MIN_REP_STRING_OPTIONAL_VALUES_FORMAT 8
+
+ /* The minimum format number that supports V2 schema of the rep-cache.db
+    database. */
+#define SVN_FS_FS__MIN_REP_CACHE_SCHEMA_V2_FORMAT 8
+
 /* On most operating systems apr implements file locks per process, not
    per file.  On Windows apr implements the locking as per file handle
    locks, so we don't have to add our own mutex for just in-process

Modified: subversion/branches/swig-py3/subversion/libsvn_fs_fs/fs_fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_fs_fs/fs_fs.c?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_fs_fs/fs_fs.c (original)
+++ subversion/branches/swig-py3/subversion/libsvn_fs_fs/fs_fs.c Sun Dec 24 05:23:08 2017
@@ -1470,7 +1470,10 @@ svn_fs_fs__min_unpacked_rev(svn_revnum_t
 {
   fs_fs_data_t *ffd = fs->fsap_data;
 
-  SVN_ERR(svn_fs_fs__update_min_unpacked_rev(fs, pool));
+  /* Calling this for pre-v4 repos is illegal. */
+  if (ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
+    SVN_ERR(svn_fs_fs__update_min_unpacked_rev(fs, pool));
+
   *min_unpacked = ffd->min_unpacked_rev;
 
   return SVN_NO_ERROR;

Modified: subversion/branches/swig-py3/subversion/libsvn_fs_fs/low_level.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_fs_fs/low_level.c?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_fs_fs/low_level.c (original)
+++ subversion/branches/swig-py3/subversion/libsvn_fs_fs/low_level.c Sun Dec 24 05:23:08 2017
@@ -670,7 +670,7 @@ svn_fs_fs__write_changes(svn_stream_t *s
     }
 
   if (terminate_list)
-    svn_stream_puts(stream, "\n");
+    SVN_ERR(svn_stream_puts(stream, "\n"));
 
   svn_pool_destroy(iterpool);
 
@@ -741,6 +741,9 @@ read_header_block(apr_hash_t **headers,
   return SVN_NO_ERROR;
 }
 
+/* ### Ouch!  The implementation of this function currently modifies
+   ### the input string when tokenizing it (so the input cannot be
+   ### used after that). */
 svn_error_t *
 svn_fs_fs__parse_representation(representation_t **rep_p,
                                 svn_stringbuf_t *text,
@@ -811,13 +814,21 @@ svn_fs_fs__parse_representation(represen
   if (str == NULL)
     return SVN_NO_ERROR;
 
-  /* Read the SHA1 hash. */
-  if (strlen(str) != (APR_SHA1_DIGESTSIZE * 2))
-    return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
-                            _("Malformed text representation offset line in node-rev"));
+  /* Is the SHA1 hash present? */
+  if (str[0] == '-' && str[1] == 0)
+    {
+      checksum = NULL;
+    }
+  else
+    {
+      /* Read the SHA1 hash. */
+      if (strlen(str) != (APR_SHA1_DIGESTSIZE * 2))
+        return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
+                                _("Malformed text representation offset line in node-rev"));
 
-  SVN_ERR(svn_checksum_parse_hex(&checksum, svn_checksum_sha1, str,
-                                 scratch_pool));
+      SVN_ERR(svn_checksum_parse_hex(&checksum, svn_checksum_sha1, str,
+                                     scratch_pool));
+    }
 
   /* We do have a valid SHA1 but it might be all 0.
      We cannot be sure where that came from (Alas! legacy), so let's not
@@ -829,21 +840,36 @@ svn_fs_fs__parse_representation(represen
   if (checksum)
     memcpy(rep->sha1_digest, checksum->digest, sizeof(rep->sha1_digest));
 
-  /* Read the uniquifier. */
-  str = svn_cstring_tokenize("/", &string);
+  str = svn_cstring_tokenize(" ", &string);
   if (str == NULL)
     return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
                             _("Malformed text representation offset line in node-rev"));
 
-  SVN_ERR(svn_fs_fs__id_txn_parse(&rep->uniquifier.noderev_txn_id, str));
+  /* Is the uniquifier present? */
+  if (str[0] == '-' && str[1] == 0)
+    {
+      end = string;
+    }
+  else
+    {
+      char *substring = str;
 
-  str = svn_cstring_tokenize(" ", &string);
-  if (str == NULL || *str != '_')
-    return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
-                            _("Malformed text representation offset line in node-rev"));
+      /* Read the uniquifier. */
+      str = svn_cstring_tokenize("/", &substring);
+      if (str == NULL)
+        return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
+                                _("Malformed text representation offset line in node-rev"));
+
+      SVN_ERR(svn_fs_fs__id_txn_parse(&rep->uniquifier.noderev_txn_id, str));
+
+      str = svn_cstring_tokenize(" ", &substring);
+      if (str == NULL || *str != '_')
+        return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
+                                _("Malformed text representation offset line in node-rev"));
 
-  ++str;
-  rep->uniquifier.number = svn__base36toui64(&end, str);
+      ++str;
+      rep->uniquifier.number = svn__base36toui64(&end, str);
+    }
 
   if (*end)
     return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
@@ -1034,25 +1060,37 @@ svn_fs_fs__read_noderev(node_revision_t
 }
 
 /* Return a textual representation of the DIGEST of given KIND.
- * If IS_NULL is TRUE, no digest is available.
  * Allocate the result in RESULT_POOL.
  */
 static const char *
 format_digest(const unsigned char *digest,
               svn_checksum_kind_t kind,
-              svn_boolean_t is_null,
               apr_pool_t *result_pool)
 {
   svn_checksum_t checksum;
   checksum.digest = digest;
   checksum.kind = kind;
 
-  if (is_null)
-    return "(null)";
-
   return svn_checksum_to_cstring_display(&checksum, result_pool);
 }
 
+/* Return a textual representation of the uniquifier represented
+ * by NODEREV_TXN_ID and NUMBER.  Use POOL for the allocations.
+ */
+static const char *
+format_uniquifier(const svn_fs_fs__id_part_t *noderev_txn_id,
+                  apr_uint64_t number,
+                  apr_pool_t *pool)
+{
+  char buf[SVN_INT64_BUFFER_SIZE];
+  const char *txn_id_str;
+
+  txn_id_str = svn_fs_fs__id_txn_unparse(noderev_txn_id, pool);
+  svn__ui64tobase36(buf, number);
+
+  return apr_psprintf(pool, "%s/_%s", txn_id_str, buf);
+}
+
 svn_stringbuf_t *
 svn_fs_fs__unparse_representation(representation_t *rep,
                                   int format,
@@ -1060,32 +1098,80 @@ svn_fs_fs__unparse_representation(repres
                                   apr_pool_t *result_pool,
                                   apr_pool_t *scratch_pool)
 {
-  char buffer[SVN_INT64_BUFFER_SIZE];
+  svn_stringbuf_t *str;
+  const char *sha1_str;
+  const char *uniquifier_str;
+
   if (svn_fs_fs__id_txn_used(&rep->txn_id) && mutable_rep_truncated)
     return svn_stringbuf_ncreate("-1", 2, result_pool);
 
-  if (format < SVN_FS_FS__MIN_REP_SHARING_FORMAT || !rep->has_sha1)
-    return svn_stringbuf_createf
-            (result_pool, "%ld %" APR_UINT64_T_FMT " %" SVN_FILESIZE_T_FMT
-             " %" SVN_FILESIZE_T_FMT " %s",
-             rep->revision, rep->item_index, rep->size,
-             rep->expanded_size,
-             format_digest(rep->md5_digest, svn_checksum_md5, FALSE,
-                           scratch_pool));
-
-  svn__ui64tobase36(buffer, rep->uniquifier.number);
-  return svn_stringbuf_createf
-          (result_pool, "%ld %" APR_UINT64_T_FMT " %" SVN_FILESIZE_T_FMT
-           " %" SVN_FILESIZE_T_FMT " %s %s %s/_%s",
-           rep->revision, rep->item_index, rep->size,
-           rep->expanded_size,
-           format_digest(rep->md5_digest, svn_checksum_md5,
-                         FALSE, scratch_pool),
-           format_digest(rep->sha1_digest, svn_checksum_sha1,
-                         !rep->has_sha1, scratch_pool),
-           svn_fs_fs__id_txn_unparse(&rep->uniquifier.noderev_txn_id,
-                                     scratch_pool),
-           buffer);
+  /* Format of the string:
+     <rev> <item_index> <size> <expanded-size> <md5> [<sha1>] [<uniquifier>]
+   */
+  str = svn_stringbuf_createf(
+          result_pool,
+          "%ld"
+          " %" APR_UINT64_T_FMT
+          " %" SVN_FILESIZE_T_FMT
+          " %" SVN_FILESIZE_T_FMT
+          " %s",
+          rep->revision,
+          rep->item_index,
+          rep->size,
+          rep->expanded_size,
+          format_digest(rep->md5_digest, svn_checksum_md5, scratch_pool));
+
+  /* Compatibility: these formats don't understand <sha1> and <uniquifier>. */
+  if (format < SVN_FS_FS__MIN_REP_SHARING_FORMAT)
+    return str;
+
+  if (format < SVN_FS_FS__MIN_REP_STRING_OPTIONAL_VALUES_FORMAT)
+    {
+      /* Compatibility: these formats can only have <sha1> and <uniquifier>
+         present simultaneously, or don't have them at all. */
+      if (rep->has_sha1)
+        {
+          sha1_str = format_digest(rep->sha1_digest, svn_checksum_sha1,
+                                   scratch_pool);
+          uniquifier_str = format_uniquifier(&rep->uniquifier.noderev_txn_id,
+                                             rep->uniquifier.number,
+                                             scratch_pool);
+          svn_stringbuf_appendbyte(str, ' ');
+          svn_stringbuf_appendcstr(str, sha1_str);
+          svn_stringbuf_appendbyte(str, ' ');
+          svn_stringbuf_appendcstr(str, uniquifier_str);
+        }
+      return str;
+    }
+
+  /* The most recent formats support optional <sha1> and <uniquifier> values. */
+  if (rep->has_sha1)
+    {
+      sha1_str = format_digest(rep->sha1_digest, svn_checksum_sha1,
+                               scratch_pool);
+    }
+  else
+    sha1_str = "-";
+
+  if (rep->uniquifier.number == 0 &&
+      rep->uniquifier.noderev_txn_id.number == 0 &&
+      rep->uniquifier.noderev_txn_id.revision == 0)
+    {
+      uniquifier_str = "-";
+    }
+  else
+    {
+      uniquifier_str = format_uniquifier(&rep->uniquifier.noderev_txn_id,
+                                         rep->uniquifier.number,
+                                         scratch_pool);
+    }
+
+  svn_stringbuf_appendbyte(str, ' ');
+  svn_stringbuf_appendcstr(str, sha1_str);
+  svn_stringbuf_appendbyte(str, ' ');
+  svn_stringbuf_appendcstr(str, uniquifier_str);
+
+  return str;
 }
 
 

Modified: subversion/branches/swig-py3/subversion/libsvn_fs_fs/pack.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_fs_fs/pack.c?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_fs_fs/pack.c (original)
+++ subversion/branches/swig-py3/subversion/libsvn_fs_fs/pack.c Sun Dec 24 05:23:08 2017
@@ -2067,9 +2067,9 @@ pack_body(void *baton,
   if (fully_packed)
     {
       if (pb->notify_func)
-        (*pb->notify_func)(pb->notify_baton,
-                           ffd->min_unpacked_rev / ffd->max_files_per_dir,
-                           svn_fs_pack_notify_noop, pool);
+        SVN_ERR(pb->notify_func(pb->notify_baton,
+                                ffd->min_unpacked_rev / ffd->max_files_per_dir,
+                                svn_fs_pack_notify_noop, pool));
 
       return SVN_NO_ERROR;
     }
@@ -2122,7 +2122,7 @@ svn_fs_fs__pack(svn_fs_t *fs,
   if (!ffd->max_files_per_dir)
     {
       if (notify_func)
-        (*notify_func)(notify_baton, -1, svn_fs_pack_notify_noop, pool);
+        SVN_ERR(notify_func(notify_baton, -1, svn_fs_pack_notify_noop, pool));
 
       return SVN_NO_ERROR;
     }
@@ -2132,9 +2132,9 @@ svn_fs_fs__pack(svn_fs_t *fs,
   if (fully_packed)
     {
       if (notify_func)
-        (*notify_func)(notify_baton,
-                       ffd->min_unpacked_rev / ffd->max_files_per_dir,
-                       svn_fs_pack_notify_noop, pool);
+        SVN_ERR(notify_func(notify_baton,
+                            ffd->min_unpacked_rev / ffd->max_files_per_dir,
+                            svn_fs_pack_notify_noop, pool));
 
       return SVN_NO_ERROR;
     }

Modified: subversion/branches/swig-py3/subversion/libsvn_fs_fs/rep-cache-db.sql
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_fs_fs/rep-cache-db.sql?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_fs_fs/rep-cache-db.sql (original)
+++ subversion/branches/swig-py3/subversion/libsvn_fs_fs/rep-cache-db.sql Sun Dec 24 05:23:08 2017
@@ -21,7 +21,7 @@
  * ====================================================================
  */
 
--- STMT_CREATE_SCHEMA
+-- STMT_CREATE_SCHEMA_V1
 /* A table mapping representation hashes to locations in a rev file. */
 CREATE TABLE rep_cache (
   hash TEXT NOT NULL PRIMARY KEY,
@@ -33,36 +33,63 @@ CREATE TABLE rep_cache (
 
 PRAGMA USER_VERSION = 1;
 
+-- STMT_CREATE_SCHEMA_V2
+/* A table mapping representation hashes to locations in a rev file.
+   Same as in V1 schema, except that it uses the `WITHOUT ROWID` optimization:
+   https://sqlite.org/withoutrowid.html
+
+   Note that this optimization is only supported starting from SQLite version
+   3.8.2 (2013-12-06).  To keep compatibility with existing binaries, it is
+   only used for newer filesystem formats that were released together with
+   bumping the minimum required SQLite version.
+ */
+CREATE TABLE rep_cache (
+  hash TEXT NOT NULL PRIMARY KEY,
+  revision INTEGER NOT NULL,
+  offset INTEGER NOT NULL,
+  size INTEGER NOT NULL,
+  expanded_size INTEGER NOT NULL
+  ) WITHOUT ROWID;
+
+PRAGMA USER_VERSION = 2;
 
 -- STMT_GET_REP
+/* Works for both V1 and V2 schemas. */
 SELECT revision, offset, size, expanded_size
 FROM rep_cache
 WHERE hash = ?1
 
 -- STMT_SET_REP
+/* Works for both V1 and V2 schemas. */
 INSERT OR FAIL INTO rep_cache (hash, revision, offset, size, expanded_size)
 VALUES (?1, ?2, ?3, ?4, ?5)
 
 -- STMT_GET_REPS_FOR_RANGE
+/* Works for both V1 and V2 schemas. */
 SELECT hash, revision, offset, size, expanded_size
 FROM rep_cache
 WHERE revision >= ?1 AND revision <= ?2
 
 -- STMT_GET_MAX_REV
+/* Works for both V1 and V2 schemas. */
 SELECT MAX(revision)
 FROM rep_cache
 
 -- STMT_DEL_REPS_YOUNGER_THAN_REV
+/* Works for both V1 and V2 schemas. */
 DELETE FROM rep_cache
 WHERE revision > ?1
 
 /* An INSERT takes an SQLite reserved lock that prevents other writes
    but doesn't block reads.  The incomplete transaction means that no
    permanent change is made to the database and the transaction is
-   removed when the database is closed.  */
+   removed when the database is closed.
+
+   Works for both V1 and V2 schemas.  */
 -- STMT_LOCK_REP
 BEGIN TRANSACTION;
 INSERT INTO rep_cache VALUES ('dummy', 0, 0, 0, 0)
 
 -- STMT_UNLOCK_REP
+/* Works for both V1 and V2 schemas. */
 ROLLBACK TRANSACTION;

Modified: subversion/branches/swig-py3/subversion/libsvn_fs_fs/rep-cache.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_fs_fs/rep-cache.c?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_fs_fs/rep-cache.c (original)
+++ subversion/branches/swig-py3/subversion/libsvn_fs_fs/rep-cache.c Sun Dec 24 05:23:08 2017
@@ -36,9 +36,6 @@
 
 #include "rep-cache-db.h"
 
-/* A few magic values */
-#define REP_CACHE_SCHEMA_FORMAT   1
-
 REP_CACHE_DB_SQL_DECLARE_STATEMENTS(statements);
 
 
@@ -102,13 +99,17 @@ open_rep_cache(void *baton,
 
   SVN_SQLITE__ERR_CLOSE(svn_sqlite__read_schema_version(&version, sdb, pool),
                         sdb);
-  if (version < REP_CACHE_SCHEMA_FORMAT)
+  /* If we have an uninitialized database, go ahead and create the schema. */
+  if (version <= 0)
     {
-      /* Must be 0 -- an uninitialized (no schema) database. Create
-         the schema. Results in schema version of 1.  */
-      SVN_SQLITE__ERR_CLOSE(svn_sqlite__exec_statements(sdb,
-                                                        STMT_CREATE_SCHEMA),
-                            sdb);
+      int stmt;
+
+      if (ffd->format >= SVN_FS_FS__MIN_REP_CACHE_SCHEMA_V2_FORMAT)
+        stmt = STMT_CREATE_SCHEMA_V2;
+      else
+        stmt = STMT_CREATE_SCHEMA_V1;
+
+      SVN_SQLITE__ERR_CLOSE(svn_sqlite__exec_statements(sdb, stmt), sdb);
     }
 
   /* This is used as a flag that the database is available so don't

Modified: subversion/branches/swig-py3/subversion/libsvn_fs_fs/structure
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_fs_fs/structure?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_fs_fs/structure (original)
+++ subversion/branches/swig-py3/subversion/libsvn_fs_fs/structure Sun Dec 24 05:23:08 2017
@@ -568,6 +568,9 @@ defined:
             ### in formats >=4, also present:
             <sha1-digest> gives hex SHA1 digest of expanded rep
             <uniquifier> see representation_t->uniquifier in fs.h
+            ### Starting from format 8, a special notation "-"
+            can be used for optional values that are not present
+            (<sha1-digest> and <uniquifier>).
   cpath     FS pathname node was created at
   copyfrom  "<rev> <path>" of copyfrom data
   copyroot  "<rev> <created-path>" of the root of this copy

Modified: subversion/branches/swig-py3/subversion/libsvn_fs_fs/transaction.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_fs_fs/transaction.c?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_fs_fs/transaction.c (original)
+++ subversion/branches/swig-py3/subversion/libsvn_fs_fs/transaction.c Sun Dec 24 05:23:08 2017
@@ -2697,6 +2697,8 @@ svn_fs_fs__set_proplist(svn_fs_t *fs,
     {
       noderev->prop_rep = apr_pcalloc(pool, sizeof(*noderev->prop_rep));
       noderev->prop_rep->txn_id = *svn_fs_fs__id_txn_id(noderev->id);
+      SVN_ERR(set_uniquifier(fs, noderev->prop_rep, pool));
+      noderev->prop_rep->revision = SVN_INVALID_REVNUM;
       SVN_ERR(svn_fs_fs__put_node_revision(fs, noderev->id, noderev, FALSE,
                                            pool));
     }
@@ -3259,7 +3261,8 @@ write_final_rev(const svn_fs_id_t **new_
                              ? SVN_FS_FS__ITEM_TYPE_DIR_PROPS
                              : SVN_FS_FS__ITEM_TYPE_FILE_PROPS;
       SVN_ERR(svn_fs_fs__get_proplist(&proplist, fs, noderev, pool));
-
+      noderev->prop_rep->txn_id = *txn_id;
+      SVN_ERR(set_uniquifier(fs, noderev->prop_rep, pool));
       noderev->prop_rep->revision = rev;
 
       if (ffd->deltify_properties)
@@ -3328,13 +3331,28 @@ write_final_rev(const svn_fs_id_t **new_
         }
     }
 
-  /* don't serialize SHA1 for dirs to disk (waste of space) */
+  /* don't serialize SHA1 for dir content to disk (waste of space) */
+  /* ### Could clients record bogus last-changed-revisions (issue #4700)? */
   if (noderev->data_rep && noderev->kind == svn_node_dir)
     noderev->data_rep->has_sha1 = FALSE;
 
-  /* don't serialize SHA1 for props to disk (waste of space) */
-  if (noderev->prop_rep)
-    noderev->prop_rep->has_sha1 = FALSE;
+  /* Compatibility: while we don't need to serialize SHA1 for props (it is
+     not used), older formats can only have representation strings that either
+     have both the SHA1 value *and* the uniquifier, or don't have them at all.
+     For such formats, both values get written to the disk only if the SHA1
+     is present.
+
+     We cannot omit the uniquifier, as doing so breaks svn_fs_props_changed()
+     for properties with shared representations, see issues #4623 and #4700.
+     Therefore, we skip writing SHA1, but only for the newer formats where
+     this dependency is untied and we can write the uniquifier to the disk
+     without the SHA1.
+   */
+  if (ffd->format >= SVN_FS_FS__MIN_REP_STRING_OPTIONAL_VALUES_FORMAT &&
+      noderev->prop_rep)
+    {
+      noderev->prop_rep->has_sha1 = FALSE;
+    }
 
   /* Workaround issue #4031: is-fresh-txn-root in revision files. */
   noderev->is_fresh_txn_root = FALSE;

Propchange: subversion/branches/swig-py3/subversion/libsvn_fs_x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Dec 24 05:23:08 2017
@@ -96,4 +96,4 @@
 /subversion/branches/verify-keep-going/subversion/libsvn_fs_x:1439280-1492639,1546002-1546110
 /subversion/branches/wc-collate-path/subversion/libsvn_fs_x:1402685-1480384
 /subversion/trunk/subversion/libsvn_fs_fs:1415133-1596500,1596567,1597414,1597989,1598273,1599140,1600872,1601633,1603485-1603487,1603499,1603605,1604128,1604188,1604413-1604414,1604416-1604417,1604421,1604442,1604700,1604717,1604720,1604726,1604755,1604794,1604802,1604824,1604836,1604844,1604902-1604903,1604911,1604925,1604933,1604947,1605059-1605060,1605064-1605065,1605068,1605071-1605073,1605075,1605123,1605188-1605189,1605191,1605197,1605444,1605633,1606132,1606142,1606144,1606514,1606526,1606528,1606551,1606554,1606564,1606598-1606599,1606656,1606658,1606662,1606744,1606840,1607085,1607572,1612407,1612810,1613339,1613872,1614611,1615348,1615351-1615352,1615356,1616338-1616339,1616613,1617586,1617688,1618138,1618151,1618153,1618226,1618641,1618653,1618662,1619068,1619358,1619413,1619769,1619774,1620602,1620909,1620912,1620928,1620930,1621275,1621635,1622931,1622937,1622942,1622946,1622959-1622960,1622963,1622987,1623007,1623368,1623373,1623377,1623379,1623381,1623398,1623402,162
 4011,1624265,1624512,1626246,1626871,1626873,1626886,1627497-1627498,1627502,1627947-1627949,1627966,1628083,1628093,1628158-1628159,1628161,1628392-1628393,1628415,1628427,1628676,1628738,1628762,1628764,1629854-1629855,1629857,1629865,1629873,1629875,1629879,1630067,1630070,1631049-1631051,1631075,1631115,1631171,1631180,1631185-1631186,1631196-1631197,1631239-1631240,1631548,1631550,1631563,1631567,1631588,1631598,1632646,1632776,1632849,1632851-1632853,1632856-1632857,1632868,1632908,1632926,1633232,1633617-1633618,1634872,1634875,1634879-1634880,1634920,1636478,1636483,1636629,1636644,1637184,1637186,1637330,1637358,1637363,1637393,1639319,1639322,1639335,1639348,1639352,1639355,1639358,1639414,1639419,1639426,1639430,1639436,1639440,1639549,1640061-1640062,1640197,1640915,1640966,1641013,1643139,1643233,1645567,1646021,1646712,1646716,1647537,1647540-1647541,1647820,1647905,1648230,1648238,1648241-1648243,1648253,1648272,1648532,1648537-1648539,1648542,1648591,1648612,1649590,
 1651567,1652068,1652076,1652441,1652451,1653608,1654932,1654934,1654937,1655635,1655649,1655651,1655664,1656176,1657525,1657972,1657978,1658482,1659212,1659217,1659314,1659509,1662668,1665318,1665854,1665894,1667090,1667101,1667538,1669743,1669746,1669749,1669945,1670139,1670953,1673170,1673197,1673202,1673204,1673445,1673454,1673685,1673689,1673875,1674165,1674341,1674400,1674404,1674631,1674669,1674673,1675396,1676667,1677431,1678149,1678151,1678718,1678725,1679169,1679907,1679920-1679924,1679926,1680347,1680460,1680464,1680476,1680819,1681949,1681966,1681974,1681994,1682008,1682076,1682086,1682093,1682259,1682265,1682739,1682864,1683311,1683330,1683378,1683544,1683553,1684047,1686232,1686542,1686546,1686554,1686557,1687061,1687064,1687070-1687071,1687074,1687078-1687079,1688270,1688425,1692650,1693886,1694489,1694848,1696171,1696185,1696627-1696628,1696630,1696758,1697372,1697381,1697387,1697393,1697403,1697405,1701017,1701053,1702600,1702922,1703069,1703142,1703237,1703240,17052
 66,1705638,1705643,1705646,1705724,1705730,1705739,1706612,1706615,1706617,1706619,1706675-1706676,1706679,1706979-1706980,1707308,1707971-1707973,1707986,1707988-1707989,1708004,1709388,1709799,1710017,1710359,1710368,1710370,1711507,1711582,1711672,1712927,1715793,1715947,1716047,1716067,1716784,1716973-1716974,1717332,1717334,1717864,1719269,1719336,1719413,1719730,1720015,1721285,1723715,1723720,1723834,1723839,1725179-1725180,1726004,1726099,1726116,1726897,1726995,1727006-1727007,1727028,1727040,1727707,1727822,1730491,1735916,1736357,1736359,1737355-1737356,1740721-1740722,1741096,1741200,1741206,1741214,1741224,1742540,1745055,1745107,1745852,1746006,1746012,1746026,1756258-1756266,1756364,1756377,1759117,1759122-1759126,1759135,1759404-1759405,1759686,1764340,1764481,1764676,1766352,1780810,1781655,1781694,1785053,1785737-1785738,1785741,1785754,1785904,1786445-1786446,1786515
-/subversion/trunk/subversion/libsvn_fs_x:1414756-1509914
+/subversion/trunk/subversion/libsvn_fs_x:1414756-1509914,1813660-1819202

Modified: subversion/branches/swig-py3/subversion/libsvn_fs_x/changes.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_fs_x/changes.c?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_fs_x/changes.c (original)
+++ subversion/branches/swig-py3/subversion/libsvn_fs_x/changes.c Sun Dec 24 05:23:08 2017
@@ -184,7 +184,7 @@ svn_fs_x__changes_append_list(apr_size_t
 
   /* simply append the list and all changes */
   for (i = 0; i < list->nelts; ++i)
-    append_change(changes, APR_ARRAY_IDX(list, i, svn_fs_x__change_t *));
+    SVN_ERR(append_change(changes, APR_ARRAY_IDX(list, i, svn_fs_x__change_t *)));
 
   /* terminate the list by storing the next changes offset */
   APR_ARRAY_PUSH(changes->offsets, int) = changes->changes->nelts;

Modified: subversion/branches/swig-py3/subversion/libsvn_fs_x/low_level.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_fs_x/low_level.c?rev=1819203&r1=1819202&r2=1819203&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/libsvn_fs_x/low_level.c (original)
+++ subversion/branches/swig-py3/subversion/libsvn_fs_x/low_level.c Sun Dec 24 05:23:08 2017
@@ -1131,7 +1131,7 @@ svn_fs_x__write_changes(svn_stream_t *st
     }
 
   if (terminate_list)
-    svn_stream_puts(stream, "\n");
+    SVN_ERR(svn_stream_puts(stream, "\n"));
 
   svn_pool_destroy(iterpool);