Checkout Tools
  • last updated 5 hours ago
Constraints: committers
Constraints: files
Constraints: dates
Revert r1796399.

This was accidentally committed by a faulty script.

  1. … 4 more files in changeset.
[Accidental commit, reverted in 1796402]
  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.
Use the correct error code to signal that a server does not implement


* subversion/include/svn_ra.h

(svn_ra_list): Explicitly document the error code that can be expected.

* subversion/libsvn_ra/ra_loader.c

(svn_ra_list): Return "feature not supported" instead of "entire protocol

scheme not supported".

* subversion/libsvn_client/list.c

(list_internal): We now only need to test for one error condition.

Found by: danielsh

  1. … 2 more files 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_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.
Rename the ill-defined SVN_LIBSVN_CLIENT_LINKS_* defines to an

easier to maintain SVN_LIBSVN_RA_LINKS_*. LIBSVN_CLIENT didn't

link any of this since well before 1.0.

* trunk/build/generator/

* trunk/

* trunk/subversion/libsvn_ra/ra_loader.c

* trunk/subversion/libsvn_ra_local/ra_plugin.c

* trunk/subversion/svn_private_config.hw

Update references.

  1. … 4 more files 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__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.
Support the --enable-runtime-module-search configure option on Mac OS X.

OSX shared libraries have a MAJOR.SOVERSION.dylib suffix instead of the more common on ELF platforms.

* (SVN_DSO_SUFFIX_FMT): New platform-specific variable.

* subversion/libsvn_fs/fs-loader.c (load_module),

* subversion/libsvn_ra/ra_loader.c (load_ra_module):

Use SVN_DSO_SUFFIX_FMT to construct the library name.

  1. … 2 more files in changeset.
In ra-serf and ra-svn: Make svn_ra_replay_range properly handle errors to

make the ra layers behave in the same way, and to allow re-using the ra

session after a failure without seeing spurious errors caused by previous


* subversion/libsvn_ra/ra_loader.c

(svn_ra_replay_range): Add assertions here that already apply to some

ra layers.

* subversion/libsvn_ra_serf/replay.c

(svn_ra_serf__replay_range): Use subpool to allow unregistering requests.

* subversion/libsvn_ra_svn/client.c

(ra_svn_replay_range): Properly handle errors reported during replay,

instead of just noting a protocol error.

  1. … 2 more files in changeset.
Make all ra layers behave the same way on passing invalid revisions to


* subversion/libsvn_ra/ra_loader.c

(svn_ra_replay): Add assertion on requirements as already checked by DAV

and SVN.

* subversion/libsvn_repos/replay.c

(path_driver_cb_func): Let the actual editor decide how it uses its batons.

The standard delta editor always uses NULL batons, which doesn't make it


(svn_repos_replay2): Apply sanity check instead of correcting.

(svn_repos__replay_ev2): Use proper check.

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

(ra_revision_errors): Extend test.

  1. … 2 more files in changeset.
Document the revision argument of svn_ra_get_locations() more

precisely, as both mod_dav and ra_svn forbid SVN_INVALID_REVNUM

in their existing implementations.

* subversion/include/svn_ra.h

(svn_ra_get_locations): Update docs.

* subversion/libsvn_ra/ra_loader.c

(svn_ra_get_locations): Add assertion.

  1. … 1 more file in changeset.
* subversion/libsvn_ra/ra_loader.c

(svn_ra_open4): Destroy temporary pools.

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.
* subversion/libsvn_ra/ra_loader.c

(svn_ra_get_file_revs2): Also perform the capability check if start revision

specifies HEAD. Don't use the log fallback when asking for merged

revisions, as that isn't going to work.

Fill in the repository root in the commit info when creating it, instead of

relying of a fixup that calls back into the ra layer from an ra layer


* subversion/libsvn_ra/ra_loader.c



remap_commit_callback): Move to libsvn_ra_local/ra_plugin.


svn_ra__get_commit_ev2): Remove unneeded call.

* subversion/libsvn_ra_local/ra_plugin.c



remap_commit_callback): Move here.


svn_ra_local__get_commit_ev2): Add call to remap_commit_callback.

* subversion/libsvn_ra_serf/merge.c

(svn_ra_serf__run_merge): Set repository root.

* subversion/libsvn_ra_svn/client.c

(ra_svn_end_commit): Set repository root.

* subversion/libsvn_repos/commit.c

(invoke_commit_cb): Document that we don't set repository root.

  1. … 4 more files in changeset.
Try do the best to improve reliability of old application that does not

call svn_dso_initialize2() right after apr_initialize().

See the related discussion in

Subject: "Re: svn commit: r1659013 -


Approved by: philip

* subversion/libsvn_fs/fs-loader.c

* subversion/libsvn_ra/ra_loader.c

(svn_fs_initialize, svn_ra_initialize): Ensure that DSO subsystem is

initialized early as possible if we're going to use it.

  1. … 1 more file in changeset.
Move some code that should be applied to the auth baton once and only partially

updated per ra-session from the ra_loader's per session init to a private helper

function in the auth layer.

Except for the pool lifetime fix for the server group no functional changes.

* subversion/include/private/svn_auth_private.h

(svn_auth__apply_config_for_server): New function.

* subversion/libsvn_ra/ra_loader.c

(includes): Add svn_auth_private.h.

(svn_ra_open4): Extract auth specific code to


* subversion/libsvn_subr/auth.c

(svn_auth__apply_config_for_server): New function, extracted from

svn_ra_open4. Duplicate server_group in the right pool.

  1. … 2 more files in changeset.
Rename svn_ra_dup_session() (public api) to svn_ra__dup_session (private api).

No functional changes.

* subversion/include/private/svn_ra_private.h

(svn_ra__dup_session): New function.

* subversion/include/svn_ra.h

(svn_ra_dup_session): Remove function

* subversion/libsvn_client/diff.c

(includes): Add svn_ra_private.h.

(diff_repos_repos): Update caller.

* subversion/libsvn_ra/ra_loader.c

(svn_ra_dup_session): Rename to...

(svn_ra__dup_session): ... this.

(svn_ra_stat): Update caller (in svnserve fallback code).

  1. … 3 more files in changeset.
Make svn_ra_open_session4() behave as documented during 1.7 development

(but as it was never implemented before), by returning the documented

error when a repository should be opened in a different location.

* subversion/libsvn_ra/ra_loader.c

(svn_ra_open4): Don't wrap SVN_ERR_RA_SESSION_URL_MISMATCH errors.

* subversion/libsvn_ra_serf/options.c

(svn_ra_serf__exchange_capabilities): Always handle HTTP 3XX status values


* subversion/libsvn_ra_serf/util.c

(svn_ra_serf__error_on_status): Remove bad advice.

* subversion/tests/cmdline/

(redirected_copy): Update expected result.

  1. … 3 more files in changeset.
* subversion/libsvn_ra/ra_loader.c

(svn_ra_open4): Put CORRECTED_URL return value in the correct pool.

In the implementation of svn_ra_open4(), properly pass corrected_url as NULL

to the ra implementations, to allow them to error out early when users don't

want to support redirects.

Before this patch we sometimes returned an RA session pointing to a location

that would only respond with redirect errors on individual ra operations.

(We would also assume that the repository was using our http 1.0 protocol)

* subversion/libsvn_ra/ra_loader.c

(svn_ra_open4): Directly pass corrected_url_p to the implementations and

move the code to fixup bad urls into serf. (Which should follow the

Subversion API rules of always passing good urls anyway)

* subversion/libsvn_ra_serf/options.c

(includes): Add svn_path.h.

(svn_ra_serf__exchange_capabilities): Guarantee a proper redirect url.

  1. … 1 more file in changeset.
Following the availability of apr_hash_this_key() etc. in APR v1.5, use

these in Subversion code instead of svn__apr_hash_index_key() etc. Provide

substitutes only when APR is too old to provide them.

* subversion/include/svn_types.h,





Rename to apr_hash_this_key, apr_hash_this_key_len, apr_hash_this_val.

Declare and define them only if APR is older than 1.5.

Everywhere else: track the renames.

  1. … 102 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.
Reverting experimental move-related APIs.

For details see

This effectively reverts revisions 1595600,1572044,1547039,1535341,



1525459,1525453,1525448,1525442,1525432,1525429 and 1525419.

Remove respective entries from CHANGES.

  1. … 43 more files in changeset.
* subversion/libsvn_ra/ra_loader.c

(svn_ra_stat): Use the proper size for an allocation of svn_dirent_t.

Revert r1508225, which moved the include of svn_private_config.h before all

includes of our public headers. Public headers shouldn't depend on private

headers and all changes that required this are long reverted on trunk.

This patch excludes all conflicting cases.

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

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

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

* subversion/libsvn_auth_gnome_keyring/gnome_keyring.c

* subversion/libsvn_client/add.c

* subversion/libsvn_client/cat.c

* subversion/libsvn_client/changelist.c

* subversion/libsvn_client/cleanup.c

* subversion/libsvn_client/commit.c

* subversion/libsvn_client/commit_util.c

* subversion/libsvn_client/copy.c

* subversion/libsvn_client/copy_foreign.c

* subversion/libsvn_client/ctx.c

* subversion/libsvn_client/delete.c

* subversion/libsvn_client/deprecated.c

* subversion/libsvn_client/diff.c

* subversion/libsvn_client/diff_local.c

* subversion/libsvn_client/diff_summarize.c

* subversion/libsvn_client/export.c

* subversion/libsvn_client/externals.c

* subversion/libsvn_client/import.c

* subversion/libsvn_client/info.c

* subversion/libsvn_client/iprops.c

* subversion/libsvn_client/list.c

* subversion/libsvn_client/locking_commands.c

* subversion/libsvn_client/log.c

* subversion/libsvn_client/merge.c

* subversion/libsvn_client/mergeinfo.c

* subversion/libsvn_client/patch.c

* subversion/libsvn_client/prop_commands.c

* subversion/libsvn_client/ra.c

* subversion/libsvn_client/repos_diff.c

* subversion/libsvn_client/resolved.c

* subversion/libsvn_client/revert.c

* subversion/libsvn_client/switch.c

* subversion/libsvn_client/update.c

* subversion/libsvn_client/util.c

* subversion/libsvn_delta/compat.c

* subversion/libsvn_delta/xdelta.c

* subversion/libsvn_diff/parse-diff.c

* subversion/libsvn_diff/util.c

* subversion/libsvn_fs/access.c

* subversion/libsvn_fs_base/bdb/changes-table.c

* subversion/libsvn_fs_base/bdb/env.c

* subversion/libsvn_fs_base/dag.c

* subversion/libsvn_fs_base/fs.c

* subversion/libsvn_fs_base/lock.c

* subversion/libsvn_fs_base/revs-txns.c

* subversion/libsvn_fs_base/tree.c

* subversion/libsvn_fs_fs/caching.c

* subversion/libsvn_fs_fs/lock.c

* subversion/libsvn_fs_fs/temp_serializer.c

* subversion/libsvn_fs_fs/tree.c

* subversion/libsvn_ra/compat.c

* subversion/libsvn_ra/deprecated.c

* subversion/libsvn_ra/ra_loader.c

* subversion/libsvn_ra_local/ra_plugin.c

* subversion/libsvn_ra_serf/blame.c

* subversion/libsvn_ra_serf/blncache.c

* subversion/libsvn_ra_serf/commit.c

* subversion/libsvn_ra_serf/getlocations.c

* subversion/libsvn_ra_serf/getlocationsegments.c

* subversion/libsvn_ra_serf/getlocks.c

* subversion/libsvn_ra_serf/inherited_props.c

* subversion/libsvn_ra_serf/log.c

* subversion/libsvn_ra_serf/merge.c

* subversion/libsvn_ra_serf/mergeinfo.c

* subversion/libsvn_ra_serf/options.c

* subversion/libsvn_ra_serf/property.c

* subversion/libsvn_ra_serf/replay.c

* subversion/libsvn_ra_serf/serf.c

* subversion/libsvn_ra_serf/update.c

* subversion/libsvn_ra_serf/util.c

* subversion/libsvn_ra_serf/xml.c

* subversion/libsvn_ra_svn/client.c

* subversion/libsvn_ra_svn/editorp.c

* subversion/libsvn_ra_svn/marshal.c

* subversion/libsvn_repos/authz.c

* subversion/libsvn_repos/commit.c

* subversion/libsvn_repos/delta.c

* subversion/libsvn_repos/deprecated.c

* subversion/libsvn_repos/fs-wrap.c

* subversion/libsvn_repos/hooks.c

* subversion/libsvn_repos/log.c

* subversion/libsvn_repos/replay.c

* subversion/libsvn_repos/reporter.c

* subversion/libsvn_repos/repos.c

* subversion/libsvn_repos/rev_hunt.c

* subversion/libsvn_subr/auth.c

* subversion/libsvn_subr/cmdline.c

* subversion/libsvn_subr/compat.c

* subversion/libsvn_subr/config.c

* subversion/libsvn_subr/config_auth.c

* subversion/libsvn_subr/deprecated.c

* subversion/libsvn_subr/dso.c

* subversion/libsvn_subr/hash.c

* subversion/libsvn_subr/io.c

* subversion/libsvn_subr/mergeinfo.c

* subversion/libsvn_subr/opt.c

* subversion/libsvn_subr/properties.c

* subversion/libsvn_subr/simple_providers.c

* subversion/libsvn_subr/sorts.c

* subversion/libsvn_subr/ssl_client_cert_providers.c

* subversion/libsvn_subr/ssl_client_cert_pw_providers.c

* subversion/libsvn_subr/ssl_server_trust_providers.c

* subversion/libsvn_subr/subst.c

* subversion/libsvn_subr/types.c

* subversion/libsvn_subr/username_providers.c

* subversion/libsvn_subr/utf.c

* subversion/libsvn_subr/win32_crypto.c

* subversion/libsvn_wc/adm_crawler.c

* subversion/libsvn_wc/adm_files.c

* subversion/libsvn_wc/conflicts.c

* subversion/libsvn_wc/copy.c

* subversion/libsvn_wc/deprecated.c

* subversion/libsvn_wc/diff_editor.c

* subversion/libsvn_wc/diff_local.c

* subversion/libsvn_wc/entries.c

* subversion/libsvn_wc/externals.c

* subversion/libsvn_wc/info.c

* subversion/libsvn_wc/lock.c

* subversion/libsvn_wc/node.c

* subversion/libsvn_wc/old-and-busted.c

* subversion/libsvn_wc/props.c

* subversion/libsvn_wc/revert.c

* subversion/libsvn_wc/status.c

* subversion/libsvn_wc/update_editor.c

* subversion/libsvn_wc/upgrade.c

* subversion/libsvn_wc/wc_db_update_move.c

* subversion/libsvn_wc/wc_db_wcroot.c

* subversion/mod_dav_svn/repos.c

* subversion/mod_dav_svn/version.c

* subversion/svn/cl-conflicts.c

* subversion/svn/commit-cmd.c

* subversion/svn/conflict-callbacks.c

* subversion/svn/diff-cmd.c

* subversion/svn/help-cmd.c

* subversion/svn/notify.c

* subversion/svn/propedit-cmd.c

* subversion/svn/propget-cmd.c

* subversion/svn/props.c

* subversion/svn/status-cmd.c

* subversion/svn/status.c

* subversion/svn/svn.c

* subversion/svn/util.c

* subversion/svnadmin/svnadmin.c

* subversion/svnlook/svnlook.c

* subversion/svnrdump/dump_editor.c

* subversion/svnrdump/svnrdump.c

* subversion/svnrdump/util.c

* subversion/svnserve/serve.c

* subversion/svnsync/svnsync.c

* subversion/svnsync/sync.c

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

* subversion/tests/libsvn_repos/repos-test.c

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

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

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

* subversion/tests/libsvn_wc/conflict-data-test.c

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

* subversion/tests/libsvn_wc/wc-test.c

* subversion/tests/svn_test_fs.c

* tools/server-side/fsfs-stats.c

Move the svn_string_private.h include back to the original location.

  1. … 162 more files in changeset.
Tweak ra session open failure error generation to produce a localizable message

and use an easy to check code.

* subversion/include/svn_error_codes.h


* subversion/libsvn_ra/ra_loader.c

(svn_ra_open4): Wrap provider specific error codes with generic error.

Make message localizable.

* subversion/libsvn_ra_local/ra_plugin.c

(svn_ra_local__open): Remove wrapping that has been in ra_loader.c for some

versions to avoid duplicated error messages.

  1. … 2 more files in changeset.
Delegate the iprop ra command to the ra layers even when they don't report

that they support iprops to allow them to use a more efficient implementation

than calling the normal property obtain code in a loop.

This in preparation of adding an optimized implementation in ra_serf.

(I can't really think of a way to optimize this in ra_svn)

* subversion/libsvn_ra/ra_loader.c

(svn_ra_get_inherited_props): Always call the function in the vtable and

only fallback to default implementation when it returns the magic error.

* subversion/libsvn_ra_serf/inherited_props.c

(svn_ra_serf__get_inherited_props): Check how to obtain iprops.

* subversion/libsvn_ra_svn/client.c

(ra_svn_get_inherited_props): Check how to obtain iprops.

  1. … 2 more files in changeset.
* subversion/libsvn_ra/ra_loader.c

(svn_ra_stat): Following up on r1552441, properly handle the case wher a non

empty path is passed on svnserve 1.0, 1.1 repositories. Wrap some lines.

Move a backwards compatibility wrapper for svnserve versions 1.0-1.1 to the

ra layer. This will make the ra layer easier to use and maintain.

(Callers can stop worrying about this limitation in old svnserve versions)

We can't really move this in ra_svn as within ra_svn we can't use the normal

ra apis.

* subversion/libsvn_client/client.h

(svn_client__ra_stat_compatible): Remove function.

* subversion/libsvn_client/info.c

(svn_client_info4): Use the normal ra function.

* subversion/libsvn_client/list.c

(svn_client__ra_stat_compatible): Remove function. Move code to ra layer.

* subversion/libsvn_ra/ra_loader.c

(includes): Add svn_time.h.

(svn_ra_stat): Move svnserve fallback code here.

  1. … 3 more files in changeset.