Checkout Tools
  • last updated 7 hours ago
Constraints: committers
Constraints: files
Constraints: dates
* subversion/libsvn_ra_serf/serf.c

(ra_serf_dup_session): Duplicate proxy_password to the correct member of the

new session, instead of overwriting proxy_username.

Found by: Coverity <>

(CID: 1332091)

Add the client-side implementation for the 'svn/list' report.

* subversion/libsvn_ra_serf/list.c

(): New file implementing the client-side handling of the new report.

* subversion/libsvn_ra_serf/options.c


options_response_handler): Use the new capability when advertized by

the server

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__list): Declare new vtable function implementaton.

* subversion/libsvn_ra_serf/serf.c

(serf_vtable): Enable the new report on the client-side.

  1. … 3 more files in changeset.
Add 'http-compression=auto' mode on the client, now used by default.

Following up on the recently added support for LZ4 compression, this patch

introduces the new possible 'auto' mode for our client 'http-compression'

configuration option, and starts using it by default.

The previously used default was 'http-compression=yes', and the new 'auto'

mode is a small, but an important tweak to its behavior. In the new mode,

the HTTP compression is still being used, but the negotiating is tweaked

to favor svndiff2 with LZ4 compression when working over local networks.

The reasoning behind this is that for local networks it probably makes sense

to favor compression speed of LZ4 instead of the better compression ratio

from zlib-5, which has been used previously.

To separate local and wide area networks, we use the connection latency of

the initial OPTIONS request obtained with serf_connection_get_latency().

* subversion/libsvn_subr/config_file.c

(svn_config_ensure): Document the new default and possible values of

the http-compression option.

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__session_t.using_compression): Turn into a tristate field.

(svn_ra_serf__session_t.conn_latency): New field.

(svn_ra_serf__is_local_network): Declare new helper function.

(svn_ra_serf__setup_svndiff_accept_encoding): Accept a session instead

of the 'using_compression' boolean argument.

* subversion/libsvn_ra_serf/util.c

(svn_ra_serf__is_local_network): Implement this new function.

(svn_ra_serf__setup_svndiff_accept_encoding): Tweak the Accept-Encoding

to indicate that we'd like to see svndiff2 with http-compression=auto

and when working over a local network. Otherwise, when using compression,

indicate both svndiff2 and svndiff1 support, but tell the server that we

favor svndiff1.

(setup_request): Properly handle the 'using_compression' field, which

is now a tristate.

* subversion/libsvn_ra_serf/serf.c

(load_config): Get the compression setting as a tristate.

(svn_ra_serf__open): Initialize the connection latency to default

value before we make the initial OPTIONS request.

(ra_serf_dup_session): Add placeholder comment for the new field.

* subversion/libsvn_ra_serf/options.c

(options_response_handler): Remember the connection latency in the


* subversion/libsvn_ra_serf/commit.c

(negotiate_put_encoding): Rework to support new http-compression=auto

mode. Update or rewrite the related comments.

* subversion/libsvn_ra_serf/blame.c

(blame_context_t): Store session instead of the 'using_compression' field.

(setup_headers): Update call to svn_ra_serf__setup_svndiff_accept_encoding().

(svn_ra_serf__get_file_revs): Remember the used session in context.

* subversion/libsvn_ra_serf/replay.c

(revision_report_t): Store session instead of the 'using_compression' field.

(setup_headers): Update call to svn_ra_serf__setup_svndiff_accept_encoding().

(svn_ra_serf__replay_range): Remember the used session in context.

* subversion/libsvn_ra_serf/update.c

(fetch_ctx_t): Store session instead of the 'using_compression' field.

(headers_fetch): Update call to svn_ra_serf__setup_svndiff_accept_encoding().

Properly handle the 'using_compression' field, which is now a tristate.

(fetch_for_file): Remember the used session in the fetch context.

(setup_update_report_headers): Update call to


* subversion/mod_dav_svn/repos.c

(get_svndiff_version): New helper function.

(negotiate_encoding_prefs): Tweak the negotiation logic. Only override

the client's preference if it supports svndiff2 and SVNCompressionLevel

is set to 1. In all other cases, select the svndiff format that the

client prefers to see (the one with the largest ;q= value in the Accept-

Encoding header).

  1. … 10 more files in changeset.
* subversion/libsvn_ra_serf/serf.c

(ra_serf_dup_session): Add placeholder comments for the recently added

svn_ra_serf__session_t fields that are implicitly copied due to


Add a RA-level function for svn_repos_list and use that to implement

svn_client_list, if the server should support the new API.

Right now, no RA layer actually implements the new API; this will be

done in follow-up commits.

* subversion/include/svn_ra.h


svn_ra_list): Declare the new interface.

(SVN_RA_CAPABILITY_LIST): Declare a new server capability.

* subversion/libsvn_ra/ra_loader.h

(svn_ra__vtable_t): Add LIST function.

* subversion/libsvn_ra/ra_loader.c

(svn_ra_list): Implement the new API and check for its availability.

* subversion/libsvn_client/list.c


list_receiver): RA-layer-compatible wrapper around the client callback.

(list_internal): If we don't have to fetch any properties, use the new

RA-layer API, if available. Explicitly checking the

existance of the base path is only needed if we use

the client-side code.

* subversion/libsvn_ra_local/ra_plugin.c

(ra_local_vtable): Update vtable.

* subversion/libsvn_ra_serf/serf.c

(serf_vtable): Same.

* subversion/libsvn_ra_svn/client.c

(ra_svn_vtable): Same.

  1. … 6 more files in changeset.
Don't segfault in ra_serf_dup_session() when duplicating a session

without a discovered repository root.

This fixes a crash in conflicts-tests when running over HTTP v1 protocol.

* subversion/libsvn_ra_serf/serf.c

(ra_serf_dup_session): Check "repos_root_str" against null before

attempting to parse it.

Extend and cleanup the ra api a bit to allow ra session implementations to

open other ra sessions. (This is similar to how the fs layer receives a

pointer to svn_fs_openX())

The ra-git branch will use this to implement ra_git by passing most of the

ra functions to an ra_local session to the local git repository.

* subversion/libsvn_ra/ra_loader.c


svn_ra__dup_session): Call set_svn_ra_open.

* subversion/libsvn_ra/ra_loader.h

(svn_ra__open_func_t): New prototype.

(svn_ra__vtable_t): Introduce set_svn_ra_open. Move experimental functions

to the end of the list.

* subversion/libsvn_ra_local/ra_plugin.c

(ra_local_vtable): Update table. Document missing items.

* subversion/libsvn_ra_serf/serf.c

(serf_vtable): Update table. Document missing items.

* subversion/libsvn_ra_svn/client.c

(ra_svn_vtable): Update table. Document missing items.

  1. … 4 more files in changeset.
Apply some minor tweaks to libsvn_ra_serf to handle some http/2 cases.

This reduces the number of testfailures to 3 or 5 for me when running

the tests over http/2 with a slightly patched serf trunk.

(2 tests that rely on the http reason text.

2 tests that somehow hit an httpd limit

And one segfault/abort in serf triggered by a svnmover test)

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__session_t): Add boolean.

* subversion/libsvn_ra_serf/replay.c

(svn_ra_serf__replay_range): Implement api for http/2.0 by not implementing

it. See comment.

* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__open): Initialize new var.

(ra_serf_dup_session): Document that we dup a variable.

* subversion/libsvn_ra_serf/util.c

(conn_negotiate_protocol): Tweak a few more vars.

(handle_response): Also detect 2.0

  1. … 3 more files in changeset.
Resolve segfault in 'svn diff' when repository is on server root.

Found by: TortoiseSVN crash dump

* subversion/libsvn_ra_serf/serf.c

(ra_serf_dup_session): Use svn_ra_serf__uri_parse() instead of

apr_uri_parse() to convert URI.PATH to "/" if it's NULL.

Follow-up to r1705060: Remove unused local variable.

* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__reparent): Remove unused STATUS local variable.

Refactor common code in ra_serf.

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__uri_parse): New function declaration.

* subversion/libsvn_ra_serf/util.c

(svn_ra_serf__uri_parse): New. Factored out from svn_ra_serf__open().

* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__open, svn_ra_serf__reparent): Use svn_ra_serf__uri_parse().

  1. … 2 more files in changeset.
* subversion/libsvn_ra_serf/serf.c

(ra_serf_version): Report both built- and run-time versions of libserf,

like we do for everything else.

[ Note from the future:

The "HTTPv2 == svndiff1" detection was reverted in r1791290.

And see r1704891 that adds a proper server-side capability for svndiff1. ]

Use compressed svndiff1 format for deltas when committing changes over

http:// and https://.

Something I learned while working on the ra_serf-stream-commit branch is

that ra_serf doesn't use compression when sending deltas over http(s)://

— as opposed to, for instance, ra_svn, where compression is turned on by

default. Enabling compression has a positive impact on commits that happen

over the WAN, especially, with slow connections, where the network speed is

the bottleneck.

Benchmarks over http:// with the repository located on a remote server,

before and after this patch:

1) Committing a Windows application build (.exe, .dll, resources),

35 files, 55 MiB total size:

51.901 s → 22.404 s

2) Committing a random bunch of compressible and incompressible files,

135 files, 161 MiB total size:

156.072 s → 115.445 s

3) Importing a subtree of TortoiseSVN's trunk, 1742 files, 81 MiB total size:

186.548 s → 167.285 s

4) Importing Windows Installer log files, 23 files, 15 MiB total size:

15.130 s → 6.030 s

So, we begin using compressed svndiff1 format in ra_serf, if that's possible.

This is done for servers that advertise Subversion's HTTP v2 protocol, unless

compression is disabled by the 'http-compression = no' client configuration

option. Existing Apache HTTPd + mod_dav_svn servers know how to deal with

svndiff1, starting from Subversion 1.4, but the reasoning behind enabling

it with HTTP v2 is that if the user is stuck with the old protocol version,

she probably does not really care about the performance. I tested existing

custom implementations of Subversion's HTTP v2 protocol that are not based

on mod_dav_svn, and they as well now how to deal with svndiff1 format.

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__session_t.using_compression): Update comment.

(svn_ra_serf__session_t.supports_svndiff1): New field.

* subversion/libsvn_ra_serf/options.c

(capabilities_headers_iterator_callback): Remember that we can use svndiff1

upon witnessing a Subversion's HTTPv2 protocol header. Document the

reasoning behind this.

* subversion/libsvn_ra_serf/commit.c

(apply_textdelta): Use svndiff1 when calling svn_txdelta_to_svndiff3(), if


* subversion/libsvn_ra_serf/serf.c

(ra_serf_dup_session): Duplicating a session begins with apr_pmemdup(), and

automatically covers all primitive fields, e.g., the new supports_svndiff1

field or already existing supports_rev_rsrc_replay field. So, just update

the comment block.

  1. … 3 more files in changeset.
* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__progress): Resolve a shadowed symbol warning (about the

'read' function) by renaming function parameters: read -> bytes_read,

and written -> bytes_written for consistency.

* subversion/libsvn_ra_serf/serf.c

(load_config): Simplify by using svn_cstring_strtoi64() instead of strtol().

Followup to r1668323: Unbreak trunk with serf trunk.

* subversion/libsvn_ra_serf/serf.c

(load_config): Update an argument to use the new dual pools.

Following up on r1668323, revert regression that the session url is

allocated in the wrong pool.

* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__open): Allocate uri result in session pool.

Use scratch pool for a few allocations during construction of ra session

in ra-serf.

* subversion/libsvn_ra_serf/serf.c

(load_config): Use dual pools.

(svn_ra_serf__open): Pass uri to scratch pool. Update caller.

(ra_serf_dup_session): Update caller.

Whitespace fixes; no functional change.

* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__open): Fix indentation of continued argument list in the

call to svn_ra_serf__exchange_capabilities.

* subversion/libsvn_subr/utf8proc/utf8proc.h:

Fix indentation of file-global typedef and enum declarations.

  1. … 1 more file in changeset.
Following up on r1664078, reinstate a subpool requirement for serf to avoid a

segfault in basic tests caused by a bug in serf 1.3.x... by converting the code

to behave like good dual pool code.

This problem is fixed on serf trunk, but the fix is still needed in the

latest serf 1.3.x version.

* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__open): Remove private session pool that breaks the cleanup

rules (making scratch pool a sibling to result pool). Update documentation.

Add assertion.

Following up on r1609499, which made all ra layers change the auth baton in a

way that affects all ra session using it, make it possible to create a slave

auth baton that shares everything with the parent baton except for the


Each ra session gets its own slave parameters, and thereby allows

applying their own settings from the server group (and other origins),

without affecting other ra sessions.

* subversion/include/private/svn_auth_private.h

(svn_auth__apply_config_for_server): Rename to...

(svn_auth__make_session_auth): ... this and provide a new slave auth

baton as output argument.

* subversion/libsvn_ra/ra_loader.c

(svn_ra_open4): Create scratch pool. Create slave auth instance.

Update caller.

* subversion/libsvn_ra/ra_loader.h

(svn_ra__vtable_t.open_session): Add auth_baton argument and split pools.

* subversion/libsvn_ra/wrapper_template.h

(compat_open): Update caller.

* subversion/libsvn_ra_local/ra_local.h

(svn_ra_local__session_baton_t): Store auth baton directly.

* subversion/libsvn_ra_local/ra_plugin.c

(get_username): Update auth usage.

(svn_ra_local__open): Update arguments. Store auth baton.

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__session_t): Store auth baton reference.

* subversion/libsvn_ra_serf/serf.c

(load_config): Use slave auth baton.

(svn_ra_serf__open): Update arguments. Store auth baton.

Remove local subpool usage with scratch pool.

* subversion/libsvn_ra_serf/util.c




svn_ra_serf__credentials_callback): Use auth from session instead

of from callbacks.

* subversion/libsvn_ra_svn/client.c

(open_session): Update arguments. Store auth baton.

(ra_svn_open): Add argument.

(ra_svn_open_pool): Remove function that just doubled the pool.

(ra_svn_vtable): Update reference.

* subversion/libsvn_ra_svn/cyrus_auth.c

(svn_ra_svn__do_cyrus_auth): Use auth from session instead of from callbacks.

* subversion/libsvn_ra_svn/internal_auth.c

(svn_ra_svn__do_internal_auth): Use auth from session instead of from callbacks.

* subversion/libsvn_ra_svn/ra_svn.h

(svn_ra_svn__session_baton_t): Add auth baton.

* subversion/libsvn_subr/auth.c

(svn_auth_baton_t): Add variable.

(svn_auth_open): Document initial value.

(auth_NULL): New constant.

(svn_auth_set_parameter): Store value in slave parameters if that


(svn_auth_get_parameter): Check slave parameters before primary


(svn_auth__apply_config_for_server): Rename to...

(svn_auth__make_session_auth): ... this and create a slave auth baton

with the new values instead of changing the passed baton.

  1. … 13 more files in changeset.
Apply the standard pre-branch whitespace cleanup via


There should be no functional changes.


* build/generator/

* build/generator/

* subversion/bindings/javahl/native/EditorProxy.h

* subversion/bindings/javahl/native/StateReporter.cpp

* subversion/bindings/javahl/native/org_apache_subversion_javahl_util_ConfigImpl_Category.cpp

* subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c

* subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c

* subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c

* subversion/bindings/swig/ruby/test/test_fs.rb

* subversion/bindings/swig/ruby/test/util.rb

* subversion/bindings/swig/ruby/test/windows_util.rb

* subversion/include/private/svn_fs_fs_private.h

* subversion/include/private/svn_packed_data.h

* subversion/include/private/svn_repos_private.h

* subversion/include/private/svn_sorts_private.h

* subversion/include/private/svn_subr_private.h

* subversion/include/private/svn_wc_private.h

* subversion/include/svn_auth.h

* subversion/include/svn_cache_config.h

* subversion/include/svn_client.h

* subversion/include/svn_cmdline.h

* subversion/include/svn_diff.h

* subversion/include/svn_fs.h

* subversion/include/svn_io.h

* subversion/include/svn_ra.h

* subversion/include/svn_repos.h

* subversion/include/svn_string.h

* subversion/libsvn_client/blame.c

* subversion/libsvn_client/commit.c

* subversion/libsvn_client/commit_util.c

* subversion/libsvn_client/copy.c

* subversion/libsvn_client/diff.c

* subversion/libsvn_client/externals.c

* subversion/libsvn_client/log.c

* subversion/libsvn_client/patch.c

* subversion/libsvn_client/ra.c

* subversion/libsvn_client/update.c

* subversion/libsvn_delta/svndiff.c

* subversion/libsvn_diff/parse-diff.c

* subversion/libsvn_fs/fs-loader.c

* subversion/libsvn_fs_base/lock.c

* subversion/libsvn_fs_fs/cached_data.c

* subversion/libsvn_fs_fs/fs_fs.c

* subversion/libsvn_fs_fs/hotcopy.c

* subversion/libsvn_fs_fs/id.c

* subversion/libsvn_fs_fs/index.c

* subversion/libsvn_fs_fs/index.h

* subversion/libsvn_fs_fs/lock.c

* subversion/libsvn_fs_fs/low_level.c

* subversion/libsvn_fs_fs/low_level.h

* subversion/libsvn_fs_fs/pack.c

* subversion/libsvn_fs_fs/recovery.c

* subversion/libsvn_fs_fs/rev_file.c

* subversion/libsvn_fs_fs/revprops.c

* subversion/libsvn_fs_fs/revprops.h

* subversion/libsvn_fs_fs/stats.c

* subversion/libsvn_fs_fs/transaction.c

* subversion/libsvn_fs_fs/tree.c

* subversion/libsvn_fs_fs/verify.c

* subversion/libsvn_fs_x/cached_data.c

* subversion/libsvn_fs_x/changes.c

* subversion/libsvn_fs_x/dag.h

* subversion/libsvn_fs_x/fs.h

* subversion/libsvn_fs_x/fs_id.c

* subversion/libsvn_fs_x/fs_x.c

* subversion/libsvn_fs_x/hotcopy.c

* subversion/libsvn_fs_x/hotcopy.h

* subversion/libsvn_fs_x/index.c

* subversion/libsvn_fs_x/index.h

* subversion/libsvn_fs_x/lock.c

* subversion/libsvn_fs_x/lock.h

* subversion/libsvn_fs_x/low_level.c

* subversion/libsvn_fs_x/low_level.h

* subversion/libsvn_fs_x/noderevs.c

* subversion/libsvn_fs_x/pack.c

* subversion/libsvn_fs_x/reps.c

* subversion/libsvn_fs_x/rev_file.c

* subversion/libsvn_fs_x/revprops.c

* subversion/libsvn_fs_x/revprops.h

* subversion/libsvn_fs_x/string_table.c

* subversion/libsvn_fs_x/string_table.h

* subversion/libsvn_fs_x/transaction.c

* subversion/libsvn_fs_x/tree.c

* subversion/libsvn_fs_x/util.c

* subversion/libsvn_fs_x/verify.c

* subversion/libsvn_ra_local/ra_plugin.c

* subversion/libsvn_ra_serf/ra_serf.h

* subversion/libsvn_ra_serf/serf.c

* subversion/libsvn_ra_serf/update.c

* subversion/libsvn_ra_serf/util.c

* subversion/libsvn_ra_svn/client.c

* subversion/libsvn_ra_svn/marshal.c

* subversion/libsvn_repos/authz_pool.c

* subversion/libsvn_repos/config_pool.c

* subversion/libsvn_repos/dump.c

* subversion/libsvn_repos/fs-wrap.c

* subversion/libsvn_repos/log.c

* subversion/libsvn_subr/bit_array.c

* subversion/libsvn_subr/cache-membuffer.c

* subversion/libsvn_subr/config.c

* subversion/libsvn_subr/dirent_uri.c

* subversion/libsvn_subr/fnv1a.c

* subversion/libsvn_subr/gpg_agent.c

* subversion/libsvn_subr/hash.c

* subversion/libsvn_subr/io.c

* subversion/libsvn_subr/object_pool.c

* subversion/libsvn_subr/packed_data.c

* subversion/libsvn_subr/prefix_string.c

* subversion/libsvn_subr/sorts.c

* subversion/libsvn_subr/sqlite.c

* subversion/libsvn_subr/subst.c

* subversion/libsvn_subr/sysinfo.c

* subversion/libsvn_subr/types.c

* subversion/libsvn_subr/utf.c

* subversion/libsvn_subr/utf8proc/utf8proc_data.c

* subversion/libsvn_subr/x509info.c

* subversion/libsvn_wc/diff.h

* subversion/libsvn_wc/props.c

* subversion/libsvn_wc/update_editor.c

* subversion/libsvn_wc/wc.h

* subversion/libsvn_wc/wc_db.c

* subversion/libsvn_wc/wc_db.h

* subversion/mod_dav_svn/lock.c

* subversion/mod_dav_svn/mod_dav_svn.c

* subversion/mod_dav_svn/status.c

* subversion/svn/auth-cmd.c

* subversion/svn/info-cmd.c

* subversion/svn/mergeinfo-cmd.c

* subversion/svn/notify.c

* subversion/svn/propget-cmd.c

* subversion/svn/svn.c

* subversion/svnadmin/svnadmin.c

* subversion/svnserve/logger.c

* subversion/svnserve/serve.c

* subversion/svnserve/server.h

* subversion/svnserve/svnserve.c

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/cmdline/

* subversion/tests/libsvn_client/client-test.c

* subversion/tests/libsvn_client/mtcc-test.c

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

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

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

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

* subversion/tests/libsvn_fs_x/fs-x-pack-test.c

* subversion/tests/libsvn_fs_x/string-table-test.c

* subversion/tests/libsvn_ra/ra-test.c

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

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

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

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

* subversion/tests/libsvn_subr/packed-data-test.c

* subversion/tests/libsvn_subr/priority-queue-test.c

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

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

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

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

* subversion/tests/libsvn_wc/op-depth-test.c

* subversion/tests/svn_test_main.c

* tools/dev/benchmarks/RepoPerf/

* tools/dev/benchmarks/RepoPerf/

* tools/dev/

* tools/dev/fsfs-access-map.c

* tools/dev/

* tools/dev/x509-parser.c

* tools/diff/diff.c

* tools/dist/

* tools/dist/

* tools/hook-scripts/mailer/

* tools/server-side/svnpubsub/


Remove unneeded whitespace via script.

  1. … 184 more files in changeset.
When duplicating an ra_session in ra_serf, properly reset the current

connection to 0 (as initially there is only a single connection)

* subversion/libsvn_ra_serf/get_file.c

(svn_ra_serf__get_file): Use the same connection for the PROPFIND

and GET requests, even when there are multiple connections.

* subversion/libsvn_ra_serf/serf.c

(ra_serf_dup_session): Set cur_connection to 0, to avoid problems when

the original session used multiple connections.

Found by: brane

(via the reuse-ra-session branch)

  1. … 1 more file in changeset.
The ra_serf's standard propfind handler verifies that the response has http

status 207, so it is not necessary to check for that again after processing

the response (unlike 1.8, where this was necessary).

* subversion/libsvn_ra_serf/get_file.c

(svn_ra_serf__get_file): Remove unneeded check.

* subversion/libsvn_ra_serf/property.c

(svn_ra_serf__fetch_node_props): Remove unneeded check.

* subversion/libsvn_ra_serf/serf.c

(serf__rev_proplist): Remove unneeded check.

* subversion/libsvn_ra_serf/stat.c


svn_ra_serf__get_dir): Remove unneeded checks.

  1. … 3 more files in changeset.
In ra_serf: Stop passing around explicit session, session->conn[0] pairs in the

propfind/options handling where using anything other than the primary connection

doesn't really make sense.

This simplifies a lot of code, and allows further refactoring later on.

* subversion/libsvn_ra_serf/blame.c

(svn_ra_serf__get_file_revs): Update caller.

* subversion/libsvn_ra_serf/commit.c

(get_version_url): Update caller.

(open_root): Update caller. Move a bit of code to the property handling.



svn_ra_serf__get_commit_editor): Update caller.

* subversion/libsvn_ra_serf/getdate.c

(svn_ra_serf__get_dated_revision): Update caller.

* subversion/libsvn_ra_serf/getlocations.c

(svn_ra_serf__get_locations): Update caller.

* subversion/libsvn_ra_serf/getlocationsegments.c

(svn_ra_serf__get_location_segments): Update caller.

* subversion/libsvn_ra_serf/getlocks.c

(svn_ra_serf__get_locks): Update caller.

* subversion/libsvn_ra_serf/get_deleted_rev.c

(svn_ra_serf__get_deleted_rev): Update caller.

* subversion/libsvn_ra_serf/get_file.c

(svn_ra_serf__get_file): Update caller.

* subversion/libsvn_ra_serf/inherited_props.c


svn_ra_serf__get_inherited_props): Update caller.

* subversion/libsvn_ra_serf/log.c

(svn_ra_serf__get_log): Update caller.

* subversion/libsvn_ra_serf/mergeinfo.c

(svn_ra_serf__get_mergeinfo): Update caller.

* subversion/libsvn_ra_serf/options.c

(create_options_req): Update caller.

* subversion/libsvn_ra_serf/property.c

(svn_ra_serf__deliver_props2): Rename to...

(svn_ra_serf__create_propfind_handler): ... this and remove conn argument.

Update caller.

(svn_ra_serf__wait_for_props): Remove function. Fold into two callers.

(svn_ra_serf__fetch_node_props): Update caller.





svn_ra_serf__get_stable_url): Use session instead of connection.

(svn_ra_serf__fetch_dav_prop): Update caller.

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__deliver_props2): Rename to...

(svn_ra_serf__create_propfind_handler): ... this. Update arguments and docs.








svn_ra_serf__get_stable_url): Use just a session as argument.

* subversion/libsvn_ra_serf/replay.c


svn_ra_serf__replay_range): Update caller.

* subversion/libsvn_ra_serf/serf.c



svn_ra_serf__get_repos_root): Update caller.

* subversion/libsvn_ra_serf/stat.c


svn_ra_serf__get_dir): Update caller.

* subversion/libsvn_ra_serf/update.c

(fetch_for_file): Update caller.

* subversion/libsvn_ra_serf/util.c



svn_ra_serf__report_resource): Update argument handling.

  1. … 18 more files in changeset.
In ra serf: Use the streamy results of the propfind result parser where

possible, instead of using walkers over the three way nested hash. Introduce

two standard collectors.

* subversion/libsvn_ra_serf/inherited_props.c

(keep_only_regular_props): Move to property.c.

(get_iprops_via_more_requests): Use direct hash delivery, to avoid hacky

lookup. Provide server error when available.

(svn_ra_serf__get_inherited_props): Remove obsolete comment.

* subversion/libsvn_ra_serf/property.c

(deliver_prop_baton_t): Remove baton.


deliver_prop): Remove functions.


svn_ra_serf__deliver_node_props): New functions.

(svn_ra_serf__retrieve_props): Remove function.

(svn_ra_serf__fetch_node_props): Fetch node props without intermediate step.


New function (copied from inherited_props.c).

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__keep_only_regular_props): New function.

(svn_ra_serf__deliver_props): Remove function.


svn_ra_serf__deliver_node_props): New function.

* subversion/libsvn_ra_serf/replay.c

(revision_report_t): Use single hash revs_props for revision props.

(replay_opened): Filter revision props.

(replay_closed): Update caller.

(svn_ra_serf__replay): Update init.

(svn_ra_serf__replay_range): Properly name per revision context to document

lifetime. Update init.

* subversion/libsvn_ra_serf/serf.c

(serf__rev_proplist): Resolve old todo.

  1. … 4 more files in changeset.
Revert the changes in [1] that added the new "http-pipelining" option.

The issue that triggered addition of this option - serf issue 135: ssl

renegotiation breaks when there are pipelined requests - has been solved

in serf directly.

More specifically: serf 1.4 will automatically disable http pipelining for

connections to a server that initiates a SSL renegotiation.

[1] r1619072, r1619074, r1619079.

  1. … 5 more files in changeset.
Add an option "http-pipelining" to the servers configuration, so that a user

can disable HTTP pipelining in case that causes problems, e.g. during SSL

renegotiation triggered by the server to request a client certificate.

* subversion/include/svn_config.h

(SVN_CONFIG_OPTION_HTTP_PIPELINING): New boolean config option.

* subversion/libsvn_ra_serf/ra_serf.h

(struct svn_ra_serf__session_t): New member variable http_pipelining.

* subversion/libsvn_ra_serf/serf.c

(load_config): Load the value of the new option from the servers file. If not

set, use 'HTTP pipelining is enabled' by default.


ra_serf_dup_session): Set the max. nr. of outstanding requests to 1

if HTTP pipelining is disabled.

* subversion/libsvn_ra_serf/update.c

(open_connection_if_needed): Set the max. nr. of outstanding requests to 1

if HTTP pipelining is disabled.

* subversion/libsvn_subr/config_file.c

(svn_config_ensure): Add the 'http-pipelining' option in the comment section

of the initial servers file.

  1. … 4 more files in changeset.
Move the setting of SVN_AUTH_PARAM_SERVER_GROUP from libsvn_ra_serf

to libsvn_ra so that it applies to all RA layers. This fixes issue

4512: config server groups should work with the svn:// protocol.

* subversion/libsvn_ra/ra_loader.c

(svn_ra_open4): Set SVN_AUTH_PARAM_SERVER_GROUP.

* subversion/libsvn_ra_serf/serf.c

(load_config): No need to find group or set SVN_AUTH_PARAM_SERVER_GROUP.

  1. … 1 more file in changeset.
* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__open): Following up on r1575319, add comment.

Suggested by: ivan