Checkout Tools
  • last updated 4 hours ago
Constraints
Constraints: committers
 
Constraints: files
Constraints: dates
Provide a way for svnserve's 'get-deleted-rev' API to return 'not deleted'.

Previously the answer 'not deleted' was indistinguishable from an error when

using the svnserve protocol.

The standard 'svn' client software does not appear to invoke this case, but

it is meant to be a valid answer and is supported by the other repository

access protocols.

To work around the problem without changing the protocol, we re-purpose the

obsolete error code 'SVN_ERR_ENTRY_MISSING_REVISION' to communicate this

'not deleted' reply to the client.

(Re-purposing an old error code was not essential. An alternative would be

to create a new error code which would become part of the public API in the

next minor release, but would be deemed non-public when backported to older

release lines.)

Behaviour changes:

- With a new client against a new server, such queries are now handled

correctly.

- With an old client against a new server, the client will report a more

informative error message.

- With a new client against an old server, there is no improvement.

* subversion/svnserve/serve.c

(get_deleted_rev): If the answer is SVN_INVALID_REVNUM, return a

SVN_ERR_ENTRY_MISSING_REVISION error to the client.

* subversion/libsvn_ra_svn/client.c

(ra_svn_get_deleted_rev): Convert the error SVN_ERR_ENTRY_MISSING_REVISION

back to a response of SVN_INVALID_REVNUM.

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

(commit_two_changes): New.

(test_get_deleted_rev_no_delete,

test_get_deleted_rev_errors): New tests.

(test_funcs): Run them.

  1. … 2 more files in changeset.
Fix CVE-2017-9800.

See: https://subversion.apache.org/security/CVE-2017-0800-advisory.txt

* subversion/libsvn_ra_svn/client.c

(svn_ctype.h): Include.

(find_tunnel_agent): Pass a "--" end-of-options guard to ssh.

Expect the 'hostinfo' parameter to be URI-decoded.

(is_valid_hostinfo): New.

(ra_svn_open): Validate the hostname before using it.

* subversion/libsvn_subr/config_file.c

(svn_config_ensure): Update the example configuration likewise.

Patch by: philip

Review by: danielsh

stsp

astieger (earlier version)

  1. … 1 more file in changeset.
ra_svn: Advertise acceptance of svndiff2 deltas.

Add an "accepts-svndiff2" wire capability, and have both the client and

the server advertise it. While currently neither the client nor the

server sends svndiff2 over the wire, this capability will allow

1.11 endpoints to send svndiff2 to 1.10 endpoints.

No change was needed beyond the capability addition; the incumbent code

would already accept svndiff2 if a (non-compliant) remote endpoint used it.

* subversion/libsvn_ra_svn/protocol

(accepts-svndiff2): New wire capability.

* subversion/include/svn_ra_svn.h

(SVN_RA_SVN_CAP_SVNDIFF2_ACCEPTED): New.

* subversion/svnserve/serve.c

(file_rev_handler): Note that this is where we could act on the

new capability.

(construct_server_baton): Advertise the new capability.

* subversion/libsvn_ra_svn/editorp.c

(ra_svn_apply_textdelta): Note that this is where we could act on the

new capability.

* subversion/libsvn_ra_svn/client.c

(open_session): Advertise the new capability.

  1. … 4 more files in changeset.
Fix design bug in svn_client_list4()/svn_ra_list()/svn_repos_list() APIs.

* subversion/include/svn_client.h (svn_client_list4):

Make the patterns array const. All dependencies and references updated.

* subversion/include/svn_ra.h (svn_ra_list): Likewise.

* subversion/include/svn_repos.h (svn_repos_list): Likewise.

* subversion/libsvn_client/list.c

(list_externals, list_internal, match_patterns,

get_dir_contents, list_external_items, svn_client_list4):

Make patterns array const.

* subversion/libsvn_ra/ra_loader.h (svn_ra__vtable_t::list): Likewise.

* subversion/libsvn_ra/ra_loader.c (svn_ra_list): Likewise.

* subversion/libsvn_ra_local/ra_plugin.c (svn_ra_local__list): Likewise.

* subversion/libsvn_ra_svn/client.c (ra_svn_list): And again.

* subversion/libsvn_repos/list.c (matches_any, do_list, svn_repos_list):

And some more of the same.

  1. … 8 more files in changeset.
Code cleanup in ra_svn. No functional change intended.

* subversion/libsvn_ra_svn/ra_svn.h

(svn_ra_svn__parent_t): Use "symmetric" names for client and server

parent URLs. Update the docstrings.

* subversion/libsvn_ra_svn/client.c

(open_session,

reparent_server,

ensure_exact_server_parent,

reparent_path,

ra_svn_reparent,

ra_svn_get_locks): Update struct users.

  1. … 1 more file in changeset.
Follow-up to r1779620: Fix path handling assertions by calling the

appropriate URI / relpath API instead of dirent APIs.

Found by: rhuijben

* subversion/libsvn_ra_svn/client.c

(reparent_path): Input and output are both relpaths.

(ra_svn_reparent): Use the URI API since we operate on URLs.

Note that the result has already been unescaped.

(ra_svn_get_mergeinfo): Paths in mergeinfo are relpaths.

Second and final step in the eliminatation of reparent calls over ra_svn.

Actually eliminate reparent calls that are below to the current parent.

Adapt all path parameter accordingly before passing them to the server.

In case of complex operations that invoke editors and similar callbacks,

we make sure that the server is parented to the same URL as the client.

As it turns out, that those are often already are in sync because the

complex operations are being run on the same URL that was used to open

the session in the first place.

* subversion/libsvn_ra_svn/client.c

(ensure_exact_server_parent): New utility function.

(reparent_path,

reparent_path_array,

reparent_path_hash): New path parameter adaption utilities.

(ra_svn_reparent): Whenever feasible, reparent on the client-side only.

(ra_svn_commit): Allows callbacks -> needs "sync'ed" parents.

(ra_svn_get_file,

ra_svn_get_dir): Simple commands just adapt the path parameters.

(ra_svn_get_mergeinfo): This one has input and *output* paths.

(ra_svn_update,

ra_svn_switch,

ra_svn_status,

ra_svn_diff): Allow callbacks -> needs "sync'ed" parents.

(ra_svn_log): Here, the callback data is independent from the parent path.

A simple parameter adaption will do.

(ra_svn_check_path,

ra_svn_stat,

ra_svn_get_locations

ra_svn_get_location_segments,

ra_svn_get_file_revs,

ra_svn_lock,

ra_svn_unlock,

ra_svn_get_lock): Simple commands just adapt the path parameters.

(ra_svn_replay,

ra_svn_replay_range): Allow callbacks -> needs "sync'ed" parents.

(ra_svn_get_deleted_rev,

ra_svn_get_inherited_props,

ra_svn_list): Simple commands just adapt the path parameters.

First step in the eliminatation of reparent calls over ra_svn.

The idea is make the client session track the client as well as the

server-side "parent" URL and to change the server's info only if

necessary. In most situations, we will be able to simply attach

the relative path between those two URLs to whatever path parameter

we pass along.

This commit introduces the PARENT struct used to track that info.

It also eliminates a few common cases of no-op reparent requests.

However, client and server-side URLs are still being kept in sync.

As a bonus, using stringbuf removes the slow growth of the session's

pool.

* subversion/libsvn_ra_svn/ra_svn.h

(svn_ra_svn__parent_t): Define new data type.

(svn_ra_svn__session_baton_t): Replace the simple session URL by

the new comprehensive PARENT info.

* subversion/libsvn_ra_svn/client.c

(open_session): Initialize the new session elements.

(reparent_server): Factor out from ...

(ra_svn_reparent): ... this and adapt to the new data struct.

(ra_svn_get_session_url,

ra_svn_get_locks): Update access to the sessions's URL.

  1. … 1 more file in changeset.
Change the svn_*_list APIs to use NULL as the "don't filter by pattern"

parameter instead of an empty pattern list.

Suggested by: Patrick Steinhardt (patrick.steinhardt at elegosoft.com)

* subversion/include/svn_repos.h

(svn_repos_list): Document the new PATTERN options behavior.

* subversion/libsvn_repos/list.c

(matches_any): Implement the new behavior.

(svn_repos_list): Empty lists will almost always be created by dumb

scripts. It's probably a good idea to explicitly

not waste any resources in the degenerate case.

* subversion/include/svn_ra.h

(svn_ra_list): Document the new PATTERN options behavior.

* subversion/libsvn_ra_svn/protocol

(3.1.1. Main Command Set): The patterns list in the list command is

now optional.

* subversion/libsvn_subr/log.c

(svn_log__list): Make the logging cope with NULL pattern lists.

* subversion/svnserve/serve.c

(list): Receive NULL for PATTERNS, if no list was received.

* subversion/libsvn_ra_svn/client.c

(ra_svn_list): Omit the pattern list entirely, if patterns is NULL.

* subversion/include/svn_client.h

(svn_client_list4): Document the new PATTERN options behavior.

(svn_client_list3): Update docstring.

* subversion/libsvn_client/deprecated.c

(svn_client_list3): Update implementation.

* subversion/libsvn_client/list.c

(match_patterns): Implement the new behavior.

(list_internal): Update docstring.

* subversion/svn/list-cmd.c

(svn_cl__list): If no patterns were specified, pass NULL to the API.

* subversion/svnbench/null-list-cmd.c

(svn_cl__null_list): Same.

  1. … 11 more files in changeset.
Change the ra_svn protocol for the list command response.

Make all dirent fields optional and have the dirent-fields flags control

which ones to transmit.

* subversion/libsvn_ra_svn/protocol

(3.1.1. Main Command Set): Replace the sub-struct with a list of

optional fields for the 'list' command.

Also document the optional nature of the

'kind' field and that the dirent-field is

extensible.

* subversion/include/private/svn_ra_svn_private.h

(svn_ra_svn__write_dirent): Declare new serialization utility.

* subversion/libsvn_ra_svn/marshal.c

(svn_ra_svn__write_dirent): Implement.

* subversion/svnserve/serve.c

(list_receiver_baton_t): Pass on the dirent-fields instead of a simple

flag such that we can send exactly what the

client asked for.

(list_receiver): Call the new serialization utility.

(list): Update caller to baton change.

* subversion/libsvn_ra_svn/client.c

(ra_svn_list): Update the format string to reflect the protocol change.

Suggested by: danielsh

  1. … 4 more files in changeset.
Implement svn_ra_list in ra_svn. The wire protocol for this command

has been insprired by the get-log and get-dir commands alike.

* subversion/libsvn_ra_svn/protocol

(2.1 Capabilities): Add the 'list' capability.

(3.1.1. Main Command Set): Add the protocol of the 'list' command.

* subversion/include/svn_ra_svn.h

(SVN_RA_CAPABILITY_LIST): Declare this new capability in code.

* subversion/svnserve/serve.c

(list_receiver_baton_t,

list_receiver,

list): Implement the new command.

(main_commands): Register the new command handler.

(construct_server_baton): Advertise the new capability.

* subversion/libsvn_ra_svn/client.c

(ra_svn_has_capability): Check for the new capability as well.

(ra_svn_list): Client-side implementation of the protocol.

(ra_svn_vtable): Register the new list function.

* subversion/include/private/svn_log.h

(svn_log__list): Add a new internal API to allow for logging the

new list command.

* subversion/libsvn_subr/log.c

(svn_log__list): Implement.

  1. … 5 more files in changeset.
Refactoring:

Split a couple of functions to reduce the size of upcomming commits.

* subversion/libsvn_ra_svn/client.c

(send_dirent_fields): Extract this function from ...

(ra_svn_get_dir): ... this one.

* subversion/svnserve/serve.c

(parse_dirent_fields): Extract this function from ...

(get_dir): ... this one.

  1. … 1 more file in changeset.
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_dirent_receiver_t,

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

(receiver_baton_t,

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.
* subversion/libsvn_ra_svn/client.c

(parse_iproplist): Following up on r1717875, remove some unneeded coded and

reinstate copying path to the result_pool.

Following up on r1717874, make all ra layers consistently report inherited

properties in the documented way.

This makes ra_svn and ra_serf against new servers report the properties in

the documented way and the way ra_local already reported these.

Which form ra_serf reported before this patch depended on the server

capabilities... If it could use the optimized request it reported like

ra_svn, if not like ra_local.

* subversion/libsvn_ra_serf/inherited_props.c

(iprops_closed): Stop adding the repository url in output arguments in

unexpected ways.

* subversion/libsvn_ra_svn/client.c

(parse_iproplist): Stop adding the repository url in output arguments

when it is documented that we shouldn't do this.

  1. … 1 more file in changeset.
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_open4,

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.
Following up on r1714330 and r1714333, fix deprecation warnings.

* subversion/libsvn_ra_svn/client.c

(handle_child_process_error,

make_tunnel,

open_session): Call the latest API version but don't set any limits

because the client already has cancellation support

if needed.

Improve pool usage in svnserve and ra_svn.

All callers to the protocol parser now (indirectly) use a short-lived

scratch pool to hold the request data.

* subversion/libsvn_ra_svn/client.c

(ra_svn_get_locations): Use an ITERPOOL as scratch within the loop.

* subversion/svnserve/serve.c

(internal_auth_request): Same.

  1. … 1 more file in changeset.
Make "word" protocol items in ra-svn more efficient to process by storing

them as proper svn_string_t instead of plain C strings.

* subversion/include/private/svn_ra_svn_private.h

(svn_ra_svn__item_t): WORD is now a svn_string_t.

* subversion/libsvn_ra_svn/marshal.c

(str_true,

str_false): New string constants for efficient boolean decoding.

(svn_ra_svn__to_public_item,

svn_ra_svn__to_private_item): Convert "word" string types.

(svn_ra_svn__set_capabilities): Leverage the full string information.

(read_item): Store the full string info for words now.

(vparse_tuple): Adapt C string access for words and word-to-bool conversion.

(svn_ra_svn__read_word): Adapt C string access.

(svn_ra_svn__read_boolean): Update word-to-bool conversion.

* subversion/libsvn_ra_svn/client.c

(is_done_response): Update string comparison.

* subversion/svnserve/serve.c

(get_dir,

construct_server_baton): Ditto.

* subversion/libsvn_ra_svn/cyrus_auth.c

(svn_ra_svn__do_cyrus_auth): Adapt access to the word's C string.

* subversion/libsvn_ra_svn/internal_auth.c

(svn_ra_svn__find_mech): Same.

  1. … 5 more files in changeset.
Minor refactoring in ra_svn.

* subversion/libsvn_ra_svn/client.c

(is_done_response): New utility function.

(ra_svn_diff,

perform_ra_svn_log,

perform_get_location_segments,

ra_svn_lock,

ra_svn_unlock): Call the new function instead of checking the

response locally.

Remove the unused POOL parameter from svn_ra_svn__handle_failure_status

and update all callers.

* subversion/libsvn_ra_svn/ra_svn.h

(svn_ra_svn__handle_failure_status): Remove POOL parameter from

decalaration.

* subversion/libsvn_ra_svn/marshal.c

(svn_ra_svn__handle_failure_status): Remove POOL parameter from

implementation and get rid of the

now unused SUBPOOL.

(svn_ra_svn__read_cmd_response): Update caller.

* subversion/libsvn_ra_svn/client.c

* subversion/libsvn_ra_svn/editorp.c

(*): Update callers.

  1. … 3 more files in changeset.
Remove the unused POOL parameter from svn_ra_svn__parse_tuple and update

all callers.

* subversion/include/private/svn_ra_svn_private.h

(svn_ra_svn__parse_tuple): Remove POOL parameter from decalaration.

* subversion/libsvn_ra_svn/marshal.c

(vparse_tuple): Remove POOL pass-through parameter.

svn_ra_svn__parse_tuple): Remove POOL parameter from implementation.

(svn_ra_svn__read_tuple,

svn_ra_svn__parse_proplist,

svn_ra_svn__handle_failure_status,

svn_ra_svn__read_cmd_response): Update callers.

* subversion/libsvn_ra_svn/client.c

* subversion/libsvn_ra_svn/deprecated.c

* subversion/libsvn_ra_svn/editorp.c

* subversion/svnserve/serve.c

(*): Update callers.

  1. … 5 more files in changeset.
Fine-tune ra_svn's item type definition: Remove a level of indirection

from the STRING union element.

This saves an extra allocation and the space for one pointer per string.

In total, this compensates the prior increase in RAM usage caused by

directly instantiating the list element.

* subversion/include/private/svn_ra_svn_private.h

(svn_ra_svn__item_t): Instantiate the string directly instead of using

a pointer.

* subversion/libsvn_ra_svn/client.c

(ra_svn_get_file): Update all references to the string union element.

* subversion/libsvn_ra_svn/cram.c

(svn_ra_svn_cram_server): Same.

* subversion/svnserve/cyrus_auth.c

(try_auth): Same.

* subversion/svnserve/serve.c

(add_lock_tokens,

unlock_paths,

get_mergeinfo,

log_cmd): Same.

* subversion/libsvn_ra_svn/marshal.c

(svn_ra_svn__to_public_item,

svn_ra_svn__to_private_item): Same.

(read_string): Don't allocate the string struct itself but only the

string data.

(vparse_tuple,

svn_ra_svn__read_string,

svn_ra_svn__read_cstring): Update all references to the string element.

  1. … 5 more files in changeset.
Fine-tune ra_svn's item type definition: Remove a level of indirection

from the LIST union element.

This saves an extra allocation per list and the space for one pointer

per list at the expense of adding space of 8 bytes per item. In total,

a 10..20% increase in RAM usage for typical protocol data.

* subversion/include/private/svn_ra_svn_private.h

(SVN_RA_SVN__LIST_ITEM): Allow for "&" at the start of the list argument.

(svn_ra_svn__item_t): Instantiate the list directly instead of using

a pointer.

* subversion/libsvn_ra_svn/client.c

(parse_prop_diffs,

parse_iproplist,

ra_svn_get_dir,

perform_ra_svn_log,

perform_get_location_segments,

ra_svn_lock,

ra_svn_unlock,

ra_svn_get_locks): Update all references to the list union element.

* subversion/libsvn_ra_svn/marshal.c

(svn_ra_svn__to_public_item,

svn_ra_svn__to_private_item): Same.

(read_item): No longer allocate the list struct but simply initialize it.

(vparse_tuple,

svn_ra_svn__read_tuple,

svn_ra_svn__parse_proplist,

svn_ra_svn__handle_failure_status,

svn_ra_svn__read_list): Update all references to the list union element.

* subversion/svnserve/serve.c

(add_lock_tokens,

unlock_paths,

lock_many,

unlock_many): Same.

  1. … 3 more files in changeset.
Continue work towards using a specialized list type for ra_svn items.

This introduces a typesafe access macro replacing APR_ARRAY_IDX for

svn_ra_svn__list_t. The generated code is still the same but specifics

of the list data type are now hidden in that new macro.

* subversion/include/private/svn_ra_svn_private.h

(SVN_RA_SVN__LIST_ITEM): Declare new macro.

* subversion/libsvn_ra_svn/client.c

(parse_prop_diffs,

parse_iproplist,

ra_svn_get_dir,

perform_ra_svn_log,

ra_svn_get_locks): Use the new macro to access for svn_ra_svn__list_t

throughout the code.

* subversion/libsvn_ra_svn/cyrus_auth.c

(svn_ra_svn__do_cyrus_auth): Same.

* subversion/libsvn_ra_svn/internal_auth.c

(svn_ra_svn__find_mech): Same.

* subversion/libsvn_ra_svn/marshal.c

(svn_ra_svn__to_public_array,

svn_ra_svn__set_capabilities,

vparse_tuple,

svn_ra_svn__parse_proplist,

svn_ra_svn__handle_failure_status,

svn_ra_svn__read_string,

svn_ra_svn__read_cstring,

svn_ra_svn__read_word,

svn_ra_svn__read_revision,

svn_ra_svn__read_boolean,

svn_ra_svn__read_list): Same.

* subversion/svnserve/serve.c

(add_lock_tokens,

unlock_paths,

construct_server_baton): Same.

  1. … 5 more files in changeset.
First step towards using a specialized list type for ra_svn items.

This introduces svn_ra_svn__list_t as a mere alias to apr_array_header_t

and replaces all uses of the latter where they contain svn_ra_svn__item_t.

Exception: the command function definition because that one will require

a specific conversion routine. So, lots of code churn here but no

intended functional change.

After a few more of these formal mirgration steps, we will make the new

list type type-safe and more light-weight than the generic APR array.

* subversion/include/private/svn_ra_svn_private.h

(svn_ra_svn__list_t): Define our new list type.

(svn_ra_svn__item_t,

svn_ra_svn__to_public_array,

svn_ra_svn__to_private_array,

svn_ra_svn__set_capabilities,

svn_ra_svn__parse_tuple,

svn_ra_svn__parse_proplist,

svn_ra_svn__read_data_log_changed_entry)

svn_ra_svn__to_public_item): Switch to the new list type for

protocol items.

* subversion/libsvn_ra_svn/ra_svn.h

(svn_ra_svn__handle_failure_status,

svn_ra_svn__do_cyrus_auth,

svn_ra_svn__do_internal_auth,

svn_ra_svn__find_mech): Same.

* subversion/libsvn_ra_svn/client.c

(make_connection,

parse_prop_diffs,

handle_auth_request,

open_session,

ra_svn_rev_proplist,

parse_iproplist,

ra_svn_get_file,

ra_svn_get_dir,

perform_ra_svn_log,

ra_svn_stat,

ra_svn_lock_compat,

ra_svn_lock,

ra_svn_unlock,

ra_svn_get_lock,

ra_svn_get_locks,

ra_svn_replay_range,

ra_svn_get_inherited_props): Same.

* subversion/libsvn_ra_svn/cyrus_auth.c

(svn_ra_svn__do_cyrus_auth): Same.

* subversion/libsvn_ra_svn/editorp.c

(ra_svn_handle_target_rev,

ra_svn_handle_open_root,

ra_svn_handle_delete_entry,

ra_svn_handle_add_dir,

ra_svn_handle_open_dir,

ra_svn_handle_change_dir_prop,

ra_svn_handle_close_dir,

ra_svn_handle_absent_dir,

ra_svn_handle_add_file,

ra_svn_handle_open_file,

ra_svn_handle_apply_textdelta,

ra_svn_handle_textdelta_chunk,

ra_svn_handle_textdelta_end,

ra_svn_handle_change_file_prop,

ra_svn_handle_close_file,

ra_svn_handle_absent_file,

ra_svn_handle_close_edit,

ra_svn_handle_abort_edit,

ra_svn_handle_finish_replay,

blocked_write,

svn_ra_svn_drive_editor2): Same.

* subversion/libsvn_ra_svn/internal_auth.c

(svn_ra_svn__find_mech,

svn_ra_svn__do_internal_auth): Same.

* subversion/libsvn_ra_svn/marshal.c

(svn_ra_svn__to_public_array,

svn_ra_svn__to_private_array,

svn_ra_svn_set_capabilities,

svn_ra_svn__set_capabilities,

vparse_tuple,

svn_ra_svn__parse_tuple,

svn_ra_svn__parse_proplist,

svn_ra_svn__handle_failure_status,

svn_ra_svn__read_cmd_response,

svn_ra_svn__handle_command,

svn_ra_svn__read_string,

svn_ra_svn__read_cstring,

svn_ra_svn__read_word,

svn_ra_svn__read_revision,

svn_ra_svn__read_boolean,

svn_ra_svn__read_list,

svn_ra_svn__read_check_array_size,

svn_ra_svn__read_data_log_changed_entry): Same.

* subversion/svnserve/serve.c

(set_path,

delete_path,

link_path,

finish_report,

abort_report,

reparent,

get_latest_rev,

do_change_rev_prop,

change_rev_prop2,

change_rev_prop,

rev_proplist,

rev_prop,

add_lock_tokens,

unlock_paths,

commit,

get_file,

get_dir,

update,

switch_cmd,

status,

diff,

get_mergeinfo,

log_cmd,

check_path,

stat_cmd,

get_locations,

get_location_segments,

get_file_revs,

lock,

lock_many,

unlock,

unlock_many,

get_lock,

get_locks,

replay,

replay_range,

get_deleted_rev,

get_inherited_props,

construct_server_baton): Same.

* subversion/libsvn_ra_svn/deprecated.c

(svn_ra_svn_parse_tuple,

svn_ra_svn_parse_proplist): Same. A temporary variable is used to

prevent future type conflicts.

  1. … 8 more files in changeset.
Continue migrating the ra_svn code to using a private item data type.

This patch completes the migration of the private API callers.

* subversion/libsvn_ra_svn/client.c

(parse_prop_diffs,

parse_iproplist,

ra_svn_get_file,

ra_svn_get_dir,

ra_svn_get_mergeinfo,

perform_ra_svn_log,

ra_svn_get_locations,

perform_get_location_segments,

ra_svn_get_file_revs,

ra_svn_lock,

ra_svn_unlock,

ra_svn_get_locks): Replace all item usages with the new type.

* subversion/libsvn_ra_svn/cram.c

(svn_ra_svn_cram_server): Same.

* subversion/libsvn_ra_svn/cyrus_auth.c

(svn_ra_svn__do_cyrus_auth): Same.

* subversion/libsvn_ra_svn/internal_auth.c

(svn_ra_svn__find_mech): Same.

  1. … 3 more files in changeset.
Introduce svn_ra_svn__set_capabilities to further decouple our ra_svn

implementation from its public API.

The purpose is that all our internal usage of svn_ra_svn avoids public

API functions that use svn_ra_svn_item_t so we can switch to a different

item type internally.

* subversion/include/private/svn_ra_svn_private.h

(svn_ra_svn__set_capabilities): Declare new private API, currently

an exact copy of the public one.

* subversion/libsvn_ra_svn/client.c

(open_session): Call the new private API instead the public one.

* subversion/libsvn_ra_svn/marshal.c

(svn_ra_svn_set_capabilities): New a simple wrapper around ...

(svn_ra_svn__set_capabilities): ... this new function - which uses

all the code of the former.

  1. … 2 more files in changeset.
Merge the ra-svn-tuning development branch to trunk and remove the

BRANCH-README file. There were no conflicts.

Changes brought by this branch:

- More efficient protocol command dispatch.

- Efficient string handling (svn_string_t instead of const char *).

- Throughput improvements by providing optimized code paths

- Widen the internal 32 bit item ID to 64 bit to eliminate any chance of

overflow in the future.

  1. … 4 more files in changeset.
Minor improvements to ra-svn stability around interrupting log-like

requests from the callback.

* subversion/libsvn_ra_svn/client.c

(perform_ra_svn_log): Look further than first svn_error_t.

(ra_svn_get_location_segments): Rename to...

(perform_get_location_segments): ... this to improve error handler.

Specialize a cease invocation error, like from the log callback

(ra_svn_get_location_segments): New function around

perform_get_location_segments.