Checkout Tools
  • last updated 4 hours ago
Constraints: committers
Constraints: files
Constraints: dates
Merge the swig-py3 branch to trunk.
  1. … 61 more files in changeset.
Reimplement fsfs private operations required by `svnfsfs` (stats, dump index,

load index) as "ioctls".

Technically we achieve this by introducing the new svn_fs_ioctl() API that

adds a generic way of performing backend-specific I/O operations.

This change serves two purposes:

- It allows us to properly expose FS-specific details and invoke FS-specific

operations everywhere without necessarily promoting them into a proper

public API (the ioctl code itself may be made either public or private,

depending on the requirements).

- It solves a potential dependency/linking problem where tools like `svnfsfs`

work through the libsvn_fs's loader, but also have to load and call private

APIs from libsvn_fs_fs thus ignoring the loader. The latter part may

potentially cause issues with the global shared state, etc. With the

patch, all such operations always go through the FS loader.

* subversion/include/svn_fs.h

(svn_fs_ioctl, SVN_FS_DECLARE_IOCTL_CODE, svn_fs_ioctl_code_t): New.

* subversion/include/svn_error_codes.h


* subversion/include/private/svn_fs_fs_private.h

(svn_fs_fs__get_stats, svn_fs_fs__dump_index, svn_fs_fs__load_index):

These functions are now implemented as...


SVN_FS_FS__IOCTL_LOAD_INDEX): ...these new ioctls, which ...

(svn_fs_fs__ioctl_get_stats_input_t, svn_fs_fs__ioctl_get_stats_output_t,

svn_fs_fs__ioctl_dump_index_input_t, svn_fs_fs__ioctl_load_index_input_t):

...use these new structures.

* subversion/libsvn_fs/fs-loader.h

(fs_library_vtable_t.ioctl, fs_vtable_t.ioctl): New vtable members.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_ioctl): Implement the new API by forwarding it to an appropriate

vtable member.

* subversion/libsvn_fs_fs/fs_fs.h

(svn_fs_fs__get_stats, svn_fs_fs__dump_index, svn_fs_fs__load_index):

These functions are now declared here.

* subversion/libsvn_fs_fs/fs.c

(): Include `svn_fs_fs_private.h`.

(fs_ioctl): Implement the ioctl dispatcher for three current fsfs-specific


(fs_vtable): Initialize the `ioctl` field.

(library_vtable): Initialize the `ioctl` field to NULL.

* subversion/libsvn_fs_fs/dump-index.c,



(): Tweak includes.

* subversion/libsvn_fs_base/fs.c

(library_vtable, fs_vtable): Initialize the `ioctl` field to NULL.

* subversion/libsvn_fs_x/fs.c

(library_vtable, fs_vtable): Initialize the `ioctl` field to NULL.

* subversion/svnfsfs/dump-index-cmd.c

(dump_index): Invoke an appropriate svn_fs_ioctl().

* subversion/svnfsfs/load-index-cmd.c

(load_index): Invoke an appropriate svn_fs_ioctl().

* subversion/svnfsfs/stats-cmd.c

(subcommand__stats): Invoke an appropriate svn_fs_ioctl().

* subversion/tests/libsvn_fs/fs-test.c

(test_unrecognized_ioctl): New test.

(test_funcs): Run the new test.

* subversion/tests/libsvn_fs_fs/fs-fs-private-test.c

(get_repo_stats, dump_index, load_index): Switch to svn_fs_ioctl().

* build.conf

(svnfsfs, fs-fs-private-test): Don't link to libsvn_fs_fs.

  1. … 17 more files in changeset.
* build.conf

(libsvn_subr): Following up on r1850611, add new private header to exports.

Begin implementing client operations in SVN++, starting with status.

* build.conf (private-includes): Add SVN++ client headers.

* doc/doxygen.conf (INPUT): Likewise.

[in subversion/bindings/cxx]

* include/svnxx/client/context.hpp: New.

* include/svnxx/client/status.hpp: Likewise new.

* include/svnxx/client.hpp: New again; includes the above two headers.

* include/svnxx.hpp: Include svnxx/client.hpp.

* src/client_context.cpp: New.

* src/client_status.cpp: New.

* src/private.hpp: Include the above two headers.

* src/private/client_private.hpp: New.

* cxx/src/private/client_context_private.hpp: And new again.

* src/private/exception_private.hpp

(iteration_stopped): Typofixed from iteration_etopped.

* tests/test_exceptions.cpp: Propagate the above typofixtion.

* tests/test_client_status.cpp: New. Contains a (disabled) example of how the

svn::client::status operation might be used.

  1. … 14 more files in changeset.
Make SVN++ compile and work without warnings in maintainer mode on Linux/g++.

* build.conf (svnxx-tests): Repeat the library dependencies of libsvnxx,

since our generator isn't smart enough to inherit its dependencies

at link time.

[in subversion/bindings/cxx]

* include/svnxx/exception.hpp (message::message): Fix -Wshadow.

* src/aprwrap/pool.hpp (pool::safe_alloc): Likewise.

* src/exception.cpp

(checked_call..error_deleter): Likewise.

(handle_one_error..message_builder::message_builder): Likewise.

* tests/test_revision.cpp (assignment): Do not rely on the system_clock's

time_point precision being smaller than the time we store in svn::revision.

Cast it to the nearest second instead.

* tests/test_strings.cpp (generate_string_data): Fix -Wsign-compare.

  1. … 5 more files in changeset.
* build.conf (private-includes): Add all *.hpp files in


* build.conf (svnxx-tests): *REALLY* revert r1849730. How those silly

characters appeared in r1849731 is a mystery best not thought about.

* build.conf: Revert r1849730 as it broke tests on Windows.

Install the SVN++ library. Headers are missing for now.

* (svnxx_libdir, INSTALL_SVNXX_LIB): New.

* build.conf (test-svnxx): Change the tests install group.

  1. … 1 more file in changeset.
Make sure we don't require any part of Boost unless explicitly requested by

enabling the C++ bindings.


(--enable-svnxx): New option to compile C++ bindings.

(--enable-svnxx-tests): New option to compile C++ bindings tests.

(SVN_HAVE_CXX_BOOST): Remove substitution variable.

(SVN_BUILD_SVNXX, SVN_BUILD_SVNXX_TESTS): New substitution variables.

* build.conf

(libsvnxx): Only build when SVN_BUILD_SVNXX is enabled.

(svnxx-tests): Only build when SVN_BUILD_SVNXX_TESTS is enabled.




  1. … 2 more files in changeset.
Switch all SVN++ tests to Boost.Test.

* build/ac-macros/ax_boost_unit_test_framework.m4: New; imported from the Autoconf Archive.

* LICENSE: Add entry for ax_boost_unit_test_framework.m4.

* aclocal.m4: Include ax_boost_unit_test_framework.m4.



(BOOST_TEST_LDFLAGS): Rename from BOOST_LDFLAGS, redefine.

(COMPILE_SVNXX): Rename from COMPILE_SVNXX_CXX, redefine.


(LINK_SVNXX_TEST): Rename from LINK_CXX_BOOST, redefine.

* build.conf

(libsvnxx, svnxx-tests): Update compile and link commands.

* Update SVN++ bits.

* subversion/bindings/cxx/src/aprwrap/array.hpp:

Add comments to mark obsolete constructs that should change to C++11 idiom.

* subversion/bindings/cxx/src/aprwrap/hash.hpp: Likewise.

* subversion/bindings/cxx/tests/cxxhl-tests.cpp.

* subversion/bindings/cxx/tests/test_aprwrap.cpp: Removed.

* subversion/bindings/cxx/tests/svnxx-tests.cpp,

* subversion/bindings/cxx/tests/fixture_initialize_apr.hpp,

* subversion/bindings/cxx/tests/test_aprwrap_array_helpers.hpp: New.

* subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp,

* subversion/bindings/cxx/tests/test_aprwrap_const_arrays.cpp,

* subversion/bindings/cxx/tests/test_aprwrap_hashes.cpp,

* subversion/bindings/cxx/tests/test_aprwrap_pools.cpp: New; extracted from the

removed test_aprwrap.cpp and reworked for Boost.Test.

* subversion/bindings/cxx/tests/test_exceptions.cpp: Renamed from test_exception.cpp

and reworked for Boost.Test.

  1. … 18 more files in changeset.
Add optional dependency on the Boost C++ libraries for the SVN++ test suite.

* build/ac-macros/ax_boost_base.m4: New; imported from The Autoconf Archive.

* LICENSE, NOTICE: Document the license for ax_boost_base.m4.

* aclocal.m4: Inlcude build/ac-macros/ax_boost_base.m4

* build.conf

(options.private-includes): Add headers from subversion/bindings/cxx/tests.

(svnxx-tests): Declare test target for SVN++.

* Check for Boost availability.



(COMPILE_SVNXX_CXX_BOOST, LINK_CXX_BOOST): New compile and link commands.

  1. … 6 more files in changeset.
Rename the C++HL library to SVN++, renaming files, namespaces and directories.


(SVNXX_INCLUDES): Renamed and changed from CXXHL_INCLUDES.

(COMPILE_SVNXX_CXX): Renamed and changed from COMPILE_CXXHL_CXX.

* build.conf

(options.private-includes): Update C++ bindings' header paths.

(libsvnxx): Rename and update target from libsvncxxhl.

* build/generator/

(Generator.write): Use 'svnxx-' instead of 'cxxhl-' for extra-install check.

* build/generator/

(WinGeneratorBase.get_win_includes): Check for 'svnxx', not 'cxxhl'.

* subversion/bindings/cxx/: Renamed from .../bindings/cxxhl/.

* subversion/bindings/cxx/include/svnxx/: Renamed from .../include/svncxxhl/.

* subversion/bindings/cxx/include/svnxx.hpp: Renamed from .../include/svncxxhl.hpp.

* subversion/bindings/cxx/**: Rename namespaces, include paths and guards.

  1. … 20 more files in changeset.
Remove optional dependency on Googletest and Googlemock.

* INSTALL: don't mention googlemock.




* build.conf

(cxxhl-tests): Temporarily disabled due to dependencies.

(libgooglemock): Removed.

* Remove references to Googlemock.

* Likewise.

* Likewise.

* doc/programmer/gtest-guide.txt: Removed.

  1. … 6 more files in changeset.
Make only libsvn_subr directly depend on some macOS frameworks.

The comment in build/ac-macros/macosx.m4, which said that libtool 1.5.x

doesn't track transitive dependencies for macOS frameworks, has not been

true since libtlool-1.5.24.

Consequently, take the daring step of updating the requred libtool

version to 2.0, which is (*gasp!*) only 11 years old.



* build.conf

(macos-plist, macos-keychain): New external libraries.

(libsvn_subr): Links with macos-plist and macos-keychain.

* build/ac-macros/macosx.m4

(SVN_LIB_MACOS_PLIST): Remove obsolete comment.

Do not update LIBS, define SVN_MACOS_PLIST_LIBS instead.


* build/


Remove the special version check for libtool on Solaris.

  1. … 3 more files in changeset.
Merge the 'java10-compat' branch to trunk
  1. … 6 more files in changeset.
Add a fuzzing test for svn_txdelta_parse_svndiff(). No issue found so far.

* build.conf: Add afl-svndiff

* subversion/tests/afl/afl-svndiff.c: New.

* subversion/tests/afl/afl-svndiff-testcase/: New.

* subversion/tests/afl/afl-svndiff-testcase/test1: New.

* subversion/tests/afl/afl-svndiff-testcase/test2: New.

* subversion/tests/afl/afl-svndiff-testcase/test3: New.

  1. … 5 more files in changeset.
Fixes libsvn_auth_gnome_keyring.pc when configured with libsecret, and

make dependencies private.

*, build/ac-macros/libsecret.m4:

Set SVN_GNOME_KEYRING_PCLIBS to libsecret/gnome-keyring as appropriate.

* build.conf (gnome-keyring):

Substitute SVN_GNOME_KEYRING_PCLIBS as private deps of

libsvn_auth_gnome_keyring in generated pkg-config file.

Reviewed by: philip

  1. … 2 more files in changeset.
Fix an issue in the svn_txdelta_to_svndiff_stream() API that could cause

unexpected short reads (EOFs) on the stream.

This API is used when performing PUT requests to the server. Consequently,

the bug could result in truncated payload being sent to the server and

failing commits over http://.

* subversion/libsvn_delta/svndiff.c

(svndiff_stream_read_fn): Handle a case where we have received the final

window from the txdelta stream, but the remaining part of the buffer

cannot fully accommodate it during this call to read_fn. Instead of

exiting and triggering an unexpected short read, allow the remaining

part to be read during subsequent calls to read_fn.

* subversion/tests/libsvn_delta

(): Add 'svndiff-stream-test' to svn:ignore.

* subversion/tests/libsvn_delta/svndiff-stream-test.c: New file with a

regression test for this issue.

* build.conf

(svndiff-stream-test): New.

(__ALL_TESTS__): Run svndiff-stream-test.

  1. … 3 more files in changeset.
Add SWIG_FEATURES variable (and lang-specific variants) to tune how swig bindings are generated.

SWIG_FEATURES is used for general swig options, like -Wall, while

SWIG_(PL|PY|RB)_FEATURES allows tuning language specific settings.

This replaces the incorrect usage of CPPFLAGS as the mechanism for controlling

swig's behavior, thus avoiding the need to filter unknown flags before passing

them on to swig (c.f., r1722164).




* build.conf

(swig-*-opts): Replace SWIG_CPPFLAGS with SWIG_FEATURES and add relevant


  1. … 2 more files in changeset.
Allow building against OpenSSL 1.1.0 on Windows by properly detect the

library name, that starting with 1.1.0 now matches that on other platforms.

* build/generator/

(*): Accidentally added an 'f' at start of file. Fixed in r1814725.

(_find_openssl): Use new library names when possible.

* build.conf

Use standard dependency notation on Windows to support dynamic names.

  1. … 1 more file in changeset.
Build against the system utf8proc library by default instead of the

internal copy of the utf8proc code. Add --with-utf8proc=PREFIX|internal

to allow the user to specify either where to find utf8proc or that the

internal copy be used. The Windows build will continue to use the

internal utf8proc code.

* build/ac-macros/utf8proc.m4: New.

* aclocal.m4: Include utf8proc.m4.




* build.conf

(libsvn_subr): Add utf8proc to link.

(utf8proc): New.

* subversion/libsvn_subr/utf8proc/utf8proc.h: Rename to ...

* subversion/libsvn_subr/utf8proc/utf8proc_internal.h: ... this.

* subversion/libsvn_subr/utf8proc/utf8proc.c: Include svn_private_config.h

and utf8proc_internal.h, protect with SVN_INTERNAL_UTF8PROC.

* subversion/libsvn_subr/utf8proc.c: Include system utf8proc.h or internal


* subversion/svn_private_config.hw: Define SVN_INTERNAL_UTF8PROC to

enable internal copy of utf8proc.

* subversion/tests/libsvn_subr/utf-test.c

(test_utf_fuzzy_escape): Allow for small output difference between

utf8proc 1.x and 2.x.

  1. … 10 more files in changeset.
Build against the system LZ4 library by default instead of the

internal copy of the LZ4 code. Add --with-lz4=PREFIX|internal

to allow the user to specify either where to find LZ4 or that

the internal copy be used. The Windows build will continue to

use the internal LZ4 code.

* build/ac-macros/lz4.m4: New.

* aclocal.m4: Include lz4.m4.

* Call SVN_LZ4.



* build.conf

(libsvn_subr): Add lz4 to link.

(lz4): New.

* subversion/libsvn_subr/lz4/lz4.h: Rename to ...

* subversion/libsvn_subr/lz4/lz4internal.h: ... this, include

svn_private_config.h, protect with SVN_INTERNAL_LZ4.

* subversion/libsvn_subr/lz4/lz4.c: Include svn_private_config.h and

lz4internal.h, protect with SVN_INTERNAL_LZ4.

* subversion/libsvn_subr/compress.c: Include system lz4.h or lz4internal.h.

* subversion/svn_private_config.hw: Define SVN_INTERNAL_LZ4 to

enable internal copy of LZ4.

  1. … 9 more files in changeset.
Disable static builds of the apache and auth provider modules as

these are only ever used via dlopen() and so only shared modules

are required. As well as removing redundant compilation this

also solves the problem that KDE5, as used by the kwallet auth

provider, does not support compilation without -fPIC.

* build/generator/

(TargetSharedOnlyLib, TargetSharedOnlyCxxLib): New target types to

provide explicit compile/link commands for shared-only builds.

* build.conf

(libsvn_auth_gnome_keyring): Change to shared-only-lib.

(libsvn_auth_kwallet): Change to shared-only-cxx-lib.





shared_only_LDFLAGS): New.

(libsvn_auth_gnome_keyring_LDFLAGS, libsvn_auth_kwallet_LDFLAGS): Remove.


(shared_only_LDFLAGS): New.

(libsvn_auth_gnome_keyring_LDFLAGS, libsvn_auth_kwallet_LDFLAGS): Remove.

  1. … 3 more files in changeset.
Following up to r1801940, don't forget to declare the new compress-test

in the [__ALL_TESTS__] section of the build configuration.

* build.conf

(__ALL_TESTS__): As above.

fsfs: Add initial support for LZ4 compression.

This can significantly (up to 3 times) improve the speed of commits and

other operations with large binary or incompressible files, while still

maintaining a decent compression ratio.

Our current use of zlib compression — which, depending on the protocol,

can be used multiple times — heavily affects the speed of commits with

large binary or incompressible files. According to the Squash benchmark

( and to my measurements, the

zlib compression speed with the default level is about 30-40 MiB/s, and

it doesn't matter if the file is incompressible or not.

This patch provides an alternative in the form of the LZ4 compression.

While still providing a decent compression ratio, LZ4 offers much faster

compression even than zlib with level=1, and can skip incompressible data

chunks. Presumably, LZ4 is used for on-the-fly compression in different

file systems for these reasons.

With this patch, LZ4 compression will be enabled for fsfs repositories which

specify compression-level=1 in fsfs.conf. The interoperability is implemented

by bumping the format of svndiff to 2 and the repository file system format

to 8. From the client perspective, the patch starts using LZ4 compression

only for file:// protocol, and the support/negotiation of the use of svndiff2

with LZ4 compression for http:// and svn:// can be added later.

The tests for LZ4 compression can be run with one of the following commands: --fsfs-compression=1


* subversion/include/svn_delta.h

(svn_txdelta_to_svndiff3): Update docstring.

* subversion/include/svn_error_codes.h



* subversion/include/private/svn_subr_private.h

(svn__compress, svn__decompress): Rename to ...

(svn__compress_zlib, svn__decompress_zlib): ..this.

(svn__compress_lz4, svn__decompress_lz4): Declare new functions.

* subversion/libsvn_subr/compress.c

(): Include LZ4 library header.

(svn__compress, svn__decompress): Rename to ...

(svn__compress_zlib, svn__decompress_zlib): ..this.

(svn__compress_lz4, svn__decompress_lz4): Implement new functions.

* subversion/libsvn_subr/packed_data.c

(write_stream_data, read_stream_data): Update usages of svn__compress()

and svn__decompress().

* subversion/libsvn_delta/svndiff.c

(SVNDIFF_V2): New.

(get_svndiff_header): Update to support svndiff2 headers.

(encode_window, decode_window, write_handler): Support svndiff2 with

LZ4 compression. Tweak the relevant comments.

* subversion/libsvn_fs_fs/fs.h



* subversion/libsvn_fs_fs/fs_fs.c

(write_config): Tweak the compression-level option description.

(svn_fs_fs__create, svn_fs_fs__info_format): Update to handle the

format bump.

* subversion/libsvn_fs_fs/transaction.c

(txdelta_to_svndiff): New helper to call svn_txdelta_to_svndiff3() with

appropriate svndiff version and compression level, depending on the

file system configuration.

(rep_write_get_baton, write_container_delta_rep): Use new helper.

* subversion/libsvn_fs_fs/revprops.c

(parse_packed_revprops, repack_revprops, svn_fs_fs__copy_revprops):

Update usages of svn__compress() and svn__decompress().

* subversion/libsvn_fs_fs/structure

(Filesystem formats): Update to describe usage of svndiff2.

* subversion/tests/libsvn_subr/compress-test.c: New.

* subversion/tests/libsvn_delta/random_test.c

(DEFAULT_ITERATIONS): Increase to 60.

(do_random_test, do_random_combine_test): Test different svndiff versions

and compresssion levels.

* build.conf

(libsvn_subr): Build LZ4 library sources.

(compress-test): Add new section.

* notes/svndiff: Describe svndiff2.

* NOTICE, LICENSE: Include license for LZ4.

  1. … 16 more files in changeset.
Unix build: Rename the cxxhl bindings tests target from "tests" (sic) to


This avoids potential confusing with the normal "make test" target.

Found by: Jens Christian Restemeier

(on users@)

Review by: brane

* build.conf

(cxxhl-tests, libgooglemock): Change the install= directive accordingly.

* build.conf

(__ALL_TESTS__} Add afl-x509.

(afl-x509): Add, and mark skip.

* build.conf (afl-x509): Remove while I work out how to get the test not to run.

Add an American Fuzzy Lop fuzzer test for the x509 parser. This is

not part of the main regression tests and needs to be run manually,

see README for details. One SEGV found so far (to be fixed in an

upcoming commit).

* build.conf (afl-x509): New.

* subversion/tests/afl: New.

* subversion/tests/afl/README: New.

* subversion/tests/afl/afl-x509-testcase: New.

* subversion/tests/afl/afl-x509-testcase/test1: New.

* subversion/tests/afl/afl-x509.c: New.

  1. … 5 more files in changeset.