Checkout Tools
  • last updated 5 hours ago
Constraints: committers
Constraints: files
Constraints: dates
Introduce a warning callback to the authz file parser API.

We need this to warn about the use of empty groups in authz files;

this is not an error and doesn't affect the authz file semantics,

but it's nice to be able to tell the user about it.

See issues #4794, #4802 and #4803.

* subversion/include/svn_repos.h

(svn_repos_authz_warning_func_t): New callback function type.

(svn_repos_authz_read4): New; API revision.

(svn_repos_authz_read3): Deprecated.

(svn_repos_authz_parse2): New; API revision.

(svn_repos_authz_parse): Deprecated.

* subversion/libsvn_repos/authz.h

(svn_authz__parse): Add warning function and baton parameters.

* subversion/libsvn_repos/authz.c

(authz_read): Add warning function and baton parameters.

Update calls to svn_authz__parse.

(svn_repos_authz_read4): Revised from svn_repos_authz_read3.

(svn_repos_authz_parse2): Revised from svn_repos_authz_parse.

* subversion/libsvn_repos/authz_parse.c

(struct ctor_baton_t): Add members warning_func and warning_baton.

(create_ctor_baton): Initialise these new members of the constructor baton.

(emit_parser_warning): New.

(SVN_AUTHZ_PARSE_WARN): New; wrapper macro for the above.

(array_insert_ace): Ignore and warn about the use of empty groups.

(svn_authz__parse): Update implementation to match prototype.

* subversion/libsvn_repos/deprecated.c

(svn_repos_authz_read3, svn_repos_authz_parse): Implement deprecated functions.

* subversion/mod_authz_svn/mod_authz_svn.c

(log_svn_message): New; replaces log_svn_error so that it's useful for

logging warnings as well.

(log_svn_error): Reimplement, calling log_svn_message.

(struct authz_warning_baton_t): New.

(log_authz_warning): New.

(get_access_conf): Set up an authz warning handler and baton, and call

svn_repos_authz_read4 instead of svn_repos_authz_read3.

* subversion/svnserve/logger.h

(logger__log_error): Make the 'err' parameter a pointer-to-const.

Update the docstring to say that the error is not cleared.

(logger__log_warning): New.

* subversion/svnserve/logger.c

(log_message): New; common base for logger__log_error and logger__log_message.

Also *do not* allocate 8k on the stack, use the logger pool, which gets

cleared at the end of the function.

(logger__log_error): Reimplement.

(logger__log_warning): Implement.

* subversion/svnserve/serve.c

(log_error): Make the error parameter const. Fix the docstring.

(log_warning): New.

(load_authz_config): Add warning function and baton parameters and fix pool

handling. Now calls svn_repos_authz_read4 instead of svn_repos_authz_read3.

(find_repos): Add warning function and baton parameters for load_authz_config.

(handle_authz_warning): New.

(construct_server_baton): Pass an authz warning handler and baton to find_repos.

* subversion/tests/cmdline/

(group_member_empty_string): Fix docstring.

(empty_group): New test case.

(test_list): Run it.

* subversion/tests/cmdline/

(svnauthz_empty_group_test): Extend the @Issues decorator.

Add a check for the expected warning on stderr.

  1. … 12 more files in changeset.
Issue SVN-4729: Add '--include' and '--exclude' options to 'svnadmin dump'.

* include/svn_repos.h

(svn_repos_dump_filter_func_t): New.

(svn_repos_dump_fs4): Update function signature and comment.

(svn_repos_dump_fs3): Update comment.

* libsvn_repos/deprecated.c

(svn_repos_dump_fs3): Update caller.

* libsvn_repos/dump.c

(write_revision_record): Call to svn_repos_fs_revision_proplist() (with

AUTHZ_FUNC) instead of svn_fs_revision_proplist2() to filter revision

properties as well as revisions. Update comment.


dump_filter_authz_func): New.

(svn_repos_dump_fs4): Initialize and pass AUTHZ_FUNC and AUTHZ_BATON to

the repos layer API if FILTER_FUNC is specified by caller.

* subversion/svnadmin/svnadmin.c

(svnadmin__cmdline_options_t): Add enum values for new options.

(options_table): Add new options.

(cmd_table): Add new options to 'dump' subcommand.

(svnadmin_opt_state): Add new fields to represent new options.

(ary_prefix_match): New. Copied from svndumpfilter.


dump_filter_func): New.

(subcommand_dump): Initialize FILTER_BATON. Pass DUMP_FILTER_FUNC and a

pointer to FILTER_BATON to svn_repos_dump_fs() if any filtering prefixes


(sub_main): Handle new options.

* subversion/tests/cmdline/








dump_invalid_filtering_option): New.

(test_list): Add new tests to table.

* subversion/tests/libsvn_repos/dump-load-test.c

(test_dump_bad_props): Update caller.

Patch by: sergey.raevskiy{_AT_}

  1. … 5 more files in changeset.
svnadmin: Introduce the `--normalize-props` option for the load and

load-revprops commands.

Currently, the only performed normalization is the automatic translation

of non-LF line endings in the svn: property values. Apparently, this is

a common issue reported by our users, as Subversion versions prior to 1.6

allowed such values for properties like svn:log and so they can be present

in the dump files. The behavior before this changeset is that a user can

either force loading the dump with such invalid properties using the

--bypass-prop-validation (that affects reading them in the future),

manually repair the dump file or use a tool like svnsync that performs

the property normalization. It would be better if the users had an option

to fix this right in the svnadmin load command.

See also the corresponding FAQ entry and related issues that have been

fixed in svnsync and svnrdump:

* subversion/include/svn_repos.h

(svn_repos_load_fs6): New version of svn_repos_load_fs5() accepting the

new `normalize_props` argument.

(svn_repos_load_fs5): Deprecate.

(svn_repos_load_fs_revprops): Accept the new `normalize_props` argument.

(svn_repos_get_fs_build_parser6): New version of

svn_repos_get_fs_build_parser5() accepting the new `normalize_props`


* subversion/include/private/svn_repos_private.h

(svn_repos__normalize_prop): New private helper. The `normalized_p`

argument will be currently unused by all calling sites, but it's added

as the groundwork to simplify implementing the notifications about

normalized properties in the future.

* subversion/libsvn_repos/deprecated.c

(svn_repos_load_fs5, svn_repos_get_fs_build_parser5): Implement by

forwarding to the new versions of these functions.

* subversion/libsvn_repos/fs-wrap.c

(): Include svn_subst.h.

(svn_repos__normalize_prop): Implement this new helper function.

The implementation is close to how svn_rdump__normalize_prop() is

written, but this function accepts two pools and handles the new

`normalized_p` output argument.

* subversion/libsvn_repos/load-fs-vtable.c

(struct parse_baton): Add new `normalize_props` field.

(change_rev_prop): Accept new `normalize_props` argument, call the

new helper function if it's set.

(close_revision): Normalize the revision properties if necessary.

(svn_repos_get_fs_build_parser6): New, replacing ...

(svn_repos_get_fs_build_parser5): ...this function.

(svn_repos_load_fs6): New, replacing ...

(svn_repos_load_fs5): ...this function.

(revprops_close_revision): Update call to change_rev_prop().

(build_revprop_parser): Accept new `normalize_props` argument, use it

to initialize the new field in the parse_baton.

(svn_repos_load_fs_revprops): Handle the new `normalize_props` argument

by forwarding it to build_revprop_parser().

* subversion/svnadmin/svnadmin.c

(svnadmin__cmdline_options_t, options_table): Add svnadmin__normalize_props.

(cmd_table): Enable the new option for load and load-revprops commands.

(struct svnadmin_opt_state): Add new `normalize_props` field and ...

(sub_main): ...initialize it here.

(subcommand_load, subcommand_load_revprops): Normalize properties when

running with --normalize-props. Use separate hints when encountering

invalid properties with non-LF line endings and all other kinds of

invalid properties.

* subversion/svnrdump/svnrdump.h

(svn_rdump__normalize_prop): Remove this declaration. This function is

now superseded by the new svn_repos__normalize_prop() helper.

* subversion/svnrdump/util.c

(): Include svn_repos_private.h, drop other includes.

(svn_rdump__normalize_prop): Remove. This function is now superseded

by the new svn_repos__normalize_prop() helper.

(svn_rdump__normalize_props): Use the new svn_repos__normalize_prop()

helper function.

* subversion/svnrdump/load_editor.c

(set_revision_property, set_node_property): Use the new

svn_repos__normalize_prop() helper function.

* subversion/tests/libsvn_repos/dump-load-test.c

(test_load_bad_props): Use the new svn_repos_load_fs6() function, keep

the previous behavior unchanged, i.e., do not normalize the properties.

* subversion/tests/cmdline/svntest/

(run_and_verify_load, load_repo): Accept new `normalize_props` argument.

* subversion/tests/cmdline/

(load_bad_props): Test loading with --normalize-props. Check for the error

codes reported during load with non-LF line endings and without the new

option. In cases when the load is successful, check the resulting

svn:log property value in the repository.

* tools/client-side/bash-completion

(_svnadmin): Extend completion info.

  1. … 12 more files in changeset.
Continue work on stream server-side svn_ra_get_mergeinfo.

Make the repos layer API use callbacks instead of collecting a full catalog.

* subversion/include/svn_repos.h

(svn_repos_mergeinfo_receiver_t): Declare new callback. For now, it is

identical to the FS layer type.


svn_repos_fs_get_mergeinfo): Bump the API.

* subversion/libsvn_repos/deprecated.c


svn_repos_fs_get_mergeinfo): Implement the old API in terms of the new one.

* subversion/libsvn_repos/fs-wrap.c


svn_repos_fs_get_mergeinfo2): Replace old API with API implementation.

Apart from the pool rename, the only change

is the call to the bumped FS API function.

  1. … 2 more files in changeset.
Merging branches/authzperf to /trunk and remove BRANCH-README.
  1. … 35 more files in changeset.
Deprecate svn_repos_get_logs4.

Small twist here: The ra_local log() implementation needs to expose an

repos_log4-esque API. So, we re-use all the shim code that adapts log5

onto log4 by exposing the latter through a new private API.

* subversion/include/svn_repos.h

(svn_repos_get_logs4): Depricate.

* subversion/include/private/svn_repos_private.h

(svn_repos__get_logs_compat): Declare new private API.

* subversion/libsvn_repos/log.c





svn_repos_get_logs4): Move these log5/log4 shims from here ...

* subversion/libsvn_repos/compat.c

(): ... to this new file.

(svn_repos_get_logs4): Rename this ...

(svn_repos__get_logs_compat): ... to that.

* subversion/libsvn_repos/deprecated.c

(svn_repos_get_logs4): Add trivial implementation.

* subversion/libsvn_ra_local/ra_plugin.c

(svn_ra_local__get_log): Call the new private API instead of the

deprecated one.

  1. … 5 more files in changeset.
Implement the new 'svnadmin dump-revprops' sub-command.

The implementation uses a bumped version of svn_repos_dump_fs that can now

be told what kind of information to include in the dump. These new flags

are "positive" and non-restrictive, e.g. INCLUDE_REVPROPS instead of

REVPROPS_ONLY. That way, future revisions may easily extend this scheme.

* subversion/include/svn_repos.h

(svn_repos_dump_fs4): Declared API revision.

(svn_repos_dump_fs3): Deprecate the old one.

* subversion/libsvn_repos/dump.c

(write_revision_record): Make dumping revprops an option.

(svn_repos_dump_fs3): Replaced by ...

(svn_repos_dump_fs4): ... the new API revision. Dump contents depending on

the two new flag parameters.

* subversion/libsvn_repos/deprecated.c

(svn_repos_dump_fs3): Implement here now as forwarding to the latest API.

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

(dump): Call latest API version.

* subversion/tests/libsvn_repos/dump-load-test.c

(test_dump_bad_props): Same.

* subversion/svnadmin/svnadmin.c

(svn_opt_subcommand_t): Declare new sub-command.

(cmd_table): Define its UI.

(get_dump_range): Factored out from ...

(subcommand_dump): ... this.

(subcommand_dump_revprops): Implement new sub-command. Code taken from


  1. … 5 more files in changeset.
Reimplement svn_repos_verify_fs3() to support an arbitrary callback that

receives the information about an encountered problem and lets the caller

decide on what happens next. This supersedes the keep_going argument for

this API. A callback is optional; the behavior of this API if the callback

is not provided is equivalent to how svn_repos_verify_fs2() deals with

encountered errors. This allows seamless migration to the new API, if the

callback is not necessary. The idea is partly taken from how our existing

svn_fs_lock_many() API works with a svn_fs_lock_callback_t and passes error

information to the caller.

Immediately use the new API to provide an alternative solution for the

encountered problem with 'svnadmin verify --keep-going -q' (see r1684940)

being useless in terms that it was only giving an indication of whether a

particular repository passes the verification or not, without providing a

root cause (details) of what's wrong.

Discussion can be found in

(Subject: "Possible incompatibility of svn_repos_verify_fs2() in 1.9.0-rc1")

* subversion/include/svn_error_codes.h

(SVN_ERR_REPOS_VERIFY_FAILED): Remove this error code, as we no longer

need to send a specific error from within svn_repos_verify_fs3().


* subversion/include/svn_repos.h

(svn_repos_notify_action_t): Remove svn_repos_notify_failure.

(svn_repos_notify_t): Remove 'err' field, as it is no longer needed.

(svn_repos_verify_callback_t): New optional callback type to be used with


(svn_repos_verify_fs3): Drop 'keep_going' argument in favor of accepting a

svn_repos_verify_callback_t. Update the docstring accordingly.

(svn_repos_verify_fs2): Update the docstring for this deprecated function.

* subversion/libsvn_repos/deprecated.c

(svn_repos_verify_fs2): Update the call to svn_repos_verify_fs3() in this

compatibility wrapper. Don't pass the verify callback.

* subversion/libsvn_repos/dump.c

(notify_verification_error): Remove; this function is no longer required.

(report_error): New helper function.

(svn_repos_verify_fs3): In case we've got a svn_repos_verify_callback_t,

call it upon receiving an FS-specific structure failure or a revision

verification failure. Delegate this action to the new report_error()

helper function. Doing so makes the caller responsible for what's going

to happen with the error. The caller can choose to store the error,

ignore it or use it in any other necessary way. If a callback returns an

error, stop the verification process and immediately return that error.

If no callback is provided, mimic the behavior of svn_repos_verify_fs2()

and return the first encountered error. Drop the logic related to error

formatting, as we no longer need it at this layer. We are going to make

a simpler replacement for it is the UI code (svnadmin.c), where it is

supposed to live.

* subversion/svnadmin/svnadmin.c

(struct repos_verify_callback_baton): New. Contains the fields that are

required to track the --keep-going errors taken from ...

(struct repos_notify_handler_baton): ...this baton. After the previous

step, this baton only contains the 'feedback_stream' field, so inline it

into every calling site.

(repos_notify_handler): Baton is now simply an svn_stream_t. Remove the

boolean-based filtering logic from this handler and drop the handling of

svn_repos_notify_failure. The latter is moved, with a bit of tweaking,

into ...

(repos_verify_callback): ...this new function, that implements a callback

for svn_repos_verify_fs3(). Depending on whether we are in --keep-going

mode or not, either dump the failure details to stderr and track them to

produce a summary, or immediately return it through the callback, thus

ending the verification process. Remember all errors in the --keep-going

mode, not only those that are associated with a particular revision.

Prior to handling the error itself, tell that we failed to verify the

revision or metadata by writing corresponding messages to stderr.

(subcommand_dump, subcommand_load, subcommand_recover, subcommand_upgrade,

subcommand_hotcopy, subcommand_pack): Inline repos_notify_handler_baton

here, as it now contains a single svn_stream_t field.

(subcommand_verify): Inline repos_notify_handler_baton here, as it now

contains a single svn_stream_t field. Avoid manipulations with boolean

fields like b->silent_errors and b->silent_running, because we no longer

need them, and the fields themselves are gone. Create a feedback stream

only in non-quiet mode, as we do in other subcommand implementations.

Create a baton for repos_verify_callback() and adjust the calling site of

svn_repos_verify_fs3(), that now needs a callback. Adjust --keep-going

summary printing to the new approach with the verification callback.

Finally, provide a simple error if we encountered at least one failure

in the --keep-going mode.

* subversion/tests/cmdline/

(verify_keep_going, verify_keep_going_quiet, verify_invalid_path_changes):

Adjust the expectations, because now errors go straight to stderr in both

--keep-going and ordinary modes. Where possible, make the expectations a

bit stricter by extending the lines that we check with RegexListOutput().

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

(load_index, load_index_keep_going): Squash two tests into one; basically,

undo the corresponding hunk from r1683311. As we no longer have separate

keep_going mode in svn_repos_verify_fs3(), and the caller decides if the

verification continues or not, we don't have to check two different


(test_funcs): Track the test changes.

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

(fuzzing_1_byte_1_rev): Adjust the call to svn_repos_verify_fs3().

[in subversion/bindings]

* javahl/src/org/apache/subversion/javahl/

(ReposNotifyInformation.Action): Remove value that used to correspond

to svn_repos_notify_failure.

* javahl/src/org/apache/subversion/javahl/

(ISVNRepos.verify): Remove 'keepGoing' argument from the newest overload

of this method and update the docstring. This patch does not expose

the ability to have control over verification failures through a custom

callback in JavaHL bindings, but we're going to address this separately.

* javahl/src/org/apache/subversion/javahl/

(SVNRepos.verify): Adjust two overloads of this method in the ISVNRepos

interface implementation.

* javahl/native/SVNRepos.h

(SVNRepos::verify): Remove 'keepGoing' argument from declaration.

* javahl/native/SVNRepos.cpp

(SVNRepos::verify): Remove 'keepGoing' argument. Do not pass a verify

callback when calling svn_repos_verify_fs3().

* javahl/native/org_apache_subversion_javahl_SVNRepos.cpp

(Java_org_apache_subversion_javahl_SVNRepos_verify): Remove 'jkeepGoing'

argument from this JNI wrapper.

  1. … 13 more files in changeset.
Expose missing options in the repository dumpfile loader API.

Rev svn_repos_get_fs_build_parser4() to svn_repos_get_fs_build_parser5(),

adding the three flags that have been added to its implementation and used by

its 'convenience' wrappers svn_repos_load_fs2() to svn_repos_load_fs5() but

that were not exposed here. Now all the features that the wrapper provides

are also exposed by the slightly lower level API.

* subversion/include/svn_repos.h

(svn_repos_load_fs4): Correct the '@since' version.

(svn_repos_get_fs_build_parser5): New.

(svn_repos_get_fs_build_parser4): Deprecate.

* subversion/libsvn_repos/deprecated.c

(svn_repos_get_fs_build_parser4): Implement as a wrapper.

* subversion/libsvn_repos/load-fs-vtable.c

(svn_repos_get_fs_build_parser5): Rename from ...4() and add the new


(svn_repos_load_fs5): Simplify by using svn_repos_get_fs_build_parser5().

  1. … 2 more files in changeset.
Following up on r1613339, move a couple of deprecated functions into the

right place.

* subversion/libsvn_repos/repos.c

(svn_repos_hotcopy2, svn_repos_hotcopy): Move these deprecated functions...

* subversion/libsvn_repos/deprecated.c

(svn_repos_hotcopy2, svn_repos_hotcopy):

  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.
Add --metadata-only option to 'svnadmin verify'. This allows for very

fast detection of external corruption with a decent confidence level.

It does not render full verification redundant but aids the sysadmin

in their triage during an emergency.

For repositories with logical addressing, the metadata check already

verifies all rev file contents against the low-level checksums stored

in the index files. If any data gets modified by forces outside SVN

(catastrophic server failure etc), the chance of detection is very high.

OTOH, that check is basically a linear read at full disk speed providing

feedback 100 to 1000 times faster than a full verification.

The implementation is simple as we simply need to skip the per-revision

checks and only run the global checks. For BDB, this is still a complete

verification; for old FSFS repos, only the rep cache gets verified

which gives very little test coverage.

* subversion/include/svn_repos.h

(svn_repos_verify_fs3): Add new option flag. API had already been bumped.

* subversion/libsvn_repos/dump.c

(svn_repos_verify_fs3): Don't call verify_one_revision() when we only

want to verify the metadata.

* subversion/libsvn_repos/deprecated.c

(svn_repos_verify_fs2): Legacy code won't use the new feature.

* subversion/svnadmin/svnadmin.c

(svnadmin__cmdline_options_t): Declare new option.

(options): Add UI description of the new option.

(cmd_table): Add new option to 'svnadmin verify'.

(svnadmin_opt_state): Add an entry for the new option.

(subcommand_verify): Pass new option to repo API.

(sub_main): Pass the new CL option on to the command subroutine.

* subversion/tests/cmdline/

(verify_metadata_only): New test verifying that the new option

does not cause verification failures.

verify_quickly): New test using the new option to detect external

corruption in repos with log. addressing.

(test_list): Register new tests.

  1. … 4 more files in changeset.
Switch svn_repos_open2() and svn_fs_open() to result/scratch pool paradigm.

* subversion/include/svn_fs.h

(svn_fs_open2): Revv svn_fs_open() with SCRATCH_POOL argument.

(svn_fs_open): Deprecate.

* subversion/include/svn_repos.h

(svn_repos_open3): Revv svn_repos_open2() with SCRATCH_POOL argument.

(svn_repos_open2): Implement deprecated function.

* subversion/libsvn_fs/fs-loader.c

(fs_library_vtable): Remove subpool.

(svn_fs_open2): Revv. Use SCRATCH_POOL for temporary allocations.

(svn_fs_open): Implement deprecated function.

* subversion/libsvn_repos/deprecated.c

(svn_repos_open2): Implement deprecated function.

* subversion/libsvn_repos/repos.c

(get_repos): Add SCRATCH_POOL argument. Use it where appropriate.

(svn_repos_open3): Revv svn_repos_open2(). Use SCRATCH_POOL for

temporary allocations.

(svn_repos_upgrade2, svn_repos_recover4, multi_freeze,

svn_repos_db_logfiles, svn_repos_hotcopy2): Adapt callers of get_repos().

* subversion/mod_dav_svn/repos.c

(get_resource): Use svn_repos_open3() with r->pool as SCRATCH_POOL.

* subversion/mod_dav_svn/version.c

(cleanup_deltify): Use svn_repos_open3().

* subversion/svnserve/serve.c

(find_repos): Add SCRATCH_POOL and use svn_repos_open3().

(construct_server_baton): Update caller.

  1. … 7 more files in changeset.
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.
Introduce '--ignore-dates' option for 'svnadmin load', which causes

the load process to ignore the revision datestamps found in the

dumpstream. This allows folks to more easily use dumpfiles as

repository templates which appear (datestamp-wise) as normal commits


* subversion/include/svn_repos.h

(svn_repos_load_fs5): New version of this API which accepts

'ignore_dates' flag.

* subversion/libsvn_repos/deprecated.c

(svn_repos_load_fs4): Moved here from load-fs-vtable.c, and is now

just a wrapper around svn_repos_load_fs5().

* subversion/libsvn_repos/load-fs-vtable.c

(parse_baton): Add 'ignore_dates' member.

(set_revision_property, close_revision): Handle ignore_dates flag.

(svn_repos_load_fs5): New version of this API which accepts

'ignore_dates' flag.

* subversion/svnadmin/svnadmin.c

(svnadmin__ignore_dates): New enum value.

(options_table): Define --ignore-dates option.

(cmd_table): Allow 'load' to accept --ignore-dates.

(svnadmin_opt_state): Add 'ignore_dates' member.

(subcommand_load): Now use svn_repos_load_fs5().

(main): Handle --ignore-dates option.

* subversion/tests/cmdline/

(load_ignore_dates): New test for 'svnadmin load --ignore-dates'.

(test_list): Add reference to new test.

  1. … 4 more files in changeset.
Added an option to 'svnadmin verify' to check Unicode normalisation of

repository paths, and collisions of names within the same directory

that differ only in character representation.

* subversion/include/svn_repos.h (svn_repos_notify_warning_t):

New constants 'svn_repos_notify_warning_denormalized_name'

and 'svn_repos_notify_warning_name_collision'.

(svn_repos_verify_fs3): Added 'check_ucs_norm' argument and

updated the docstring.

(svn_repos_verify_fs2): Updated the docstring.

* subversion/libsvn_repos/dump.c (struct edit_baton):

New member 'check_ucs_norm'.

(struct dir_baton): New member 'check_name_collision'.

(make_dir_baton): Initialise 'check_name_collision'.

(check_ucs_normalization): New private function.

(add_directory, add_file): Set 'check_name_collision' and call

check_ucs_normalization if a new entry appeared in the directory.

(get_dump_editor): New argument 'check_ucs_norm'; used to initialise

the associated field in 'struct edit_baton'.

(svn_repos_dump_fs3): Update call to get_dump_editor.

(struct check_name_baton) New.

(check_name_collision) New hash iterator.

(verify_close_directory): Optionally call check_name_collision.

(verify_one_revision): New argument 'check_ucs_norm'.

Pass it to get_dump_editor.

(svn_repos_verify_fs3): Update signature and pass 'check_ucs_norm'

to verify_one_revision.

* subversion/libsvn_repos/deprecated.c (svn_repos_verify_fs2):

Updated the call to svn_repos_verify_fs3.

* subversion/include/private/svn_utf_private.h (svn_utf__normalize):

New function. Normalizes a string to Unicode NFC.

* subversion/libsvn_subr/utf8proc.c (svn_utf__normalize): Implement.

* subversion/svnadmin/svnadmin.c (svnadmin__cmdline_options_t, options_table):

New option 'svnadmin__check_ucs_normalization'.

(cmd_table): Add 'svnadmin__check_ucs_normalization' to "verify".

(struct svnadmin_opt_state): New member 'check_ucs_norm'.

(sub_main): Parse new option to 'check_ucs_norm'.

* subversion/tests/cmdline/ (verify_denormalized_names):

New test case; runs 'svnadmin verify' with normalisation check enabled.

(test_list): Enable verify_denormalized_names.

* subversion/tests/cmdline/svnadmin_tests_data/normalization_check.dump:

New dumpfile; data for svnadmin_tests.verify_denormalized_names.

  1. … 7 more files in changeset.
[Reverted in r1597989]

Working our way up the API stack: bump svn_repos_get_logs to support

the move_behavior option. This also implies that we need to assign

1-letter actions to the new change types:

- "V" for moved

- "E" for move-replaced (i.e. move to a previously deleted path)

* subversion/include/svn_repos.h

(svn_repos_get_logs5): bumped API

(svn_repos_get_logs4): depricate

* subversion/include/svn_types.h

(svn_log_changed_path2_t): list the new action chars

* subversion/libsvn_repos/deprecated.c

(svn_repos_get_logs4): implement in terms of svn_repos_get_logs5

* subversion/libsvn_repos/log.c



fs_mergeinfo_changed): call new FS API; handle new change types






do_logs): pass-through of new move_behavior parameter

(svn_repos_get_logs4): replaced by ...

(svn_repos_get_logs5): ... this one

  1. … 3 more files in changeset.
Fix the #include order such that svn_private_config.h is always

included first before any other svn header - if we also include


* subversion/bindings/javahl/native/org_apache_subversion_javahl_ConfigImpl_Category.cpp,




















































































































































































tools/server-side/fsfs-stats.c): #include svn_private_config.h first

  1. … 180 more files in changeset.
Merge the verify-keep-going branch to trunk.

Implement a new "--keep-going" switch to svnadmin verify. Use this switch to

continue verify even after a repository corruption is seen. Without this

switch the verify process would stop when it sees any repository corruption.

* subversion/include/svn_error_codes.h

Add a new error code to describe the repository is corrupt.

* subversion/include/svn_repos.h

(svn_repos_verify_fs3): New function to handle the keepg-goin switch.

* subversion/libsvn_repos/deprecated.c

(svn_repos_verify_fs2): Deprecated. Call svn_repos_verify_fs3() with keep-going

as False by default.

* subversion/libsvn_repos/dump.c

(notify_verification_error): Notify upon repository verification failure.

(verify_one_revision): Wrapper function to verify a revision.

(svn_repos_verify_fs3): Handle the keep-going switch. If set True, continue

the verify process and notify the corruption.

* subversion/svnadmin/svnadmin.c

Handle keep-going switch.

* subversion/tests/cmdline/

(verify_keep_going): Add a few test cases to test the keept-going switch.

* tools/dist/

Just mergeinfo property change.

For a detailed log description refer the branch.

Approved by: stsp

  1. … 7 more files in changeset.
Revert the "just-for-symmetry" changes made in r1483532 and keep only

those used for log and merge info in tight loops.

* subversion/libsvn_client/add.c

(svn_client__get_all_auto_props): switch back to svn_hash_[g|s]ets

* subversion/libsvn_client/commit_util.c

(svn_client__ensure_revprop_table): same

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_single): same

* subversion/libsvn_client/list.c

(svn_client__ra_stat_compatible): same

* subversion/libsvn_client/log.c

(pre_15_receiver): same

* subversion/libsvn_client/merge.c

(prepare_merge_props_changed, merge_file_added, merge_dir_added,

merge_dir_deleted): same

* subversion/libsvn_client/mergeinfo.c

(svn_client__get_wc_or_repos_mergeinfo_catalogue): same

* subversion/libsvn_fs_base/tree.c


txn_body_get_mergeinfo_for_path): same

* subversion/libsvn_fs_fs/fs_fs.c

(write_revision_zero): same

* subversion/libsvn_fs_fs/tree.c

(get_mergeinfo_for_path_internal): same

* subversion/libsvn_ra/deprecated.c

(svn_ra_get_commit_editor2): same

* subversion/libsvn_ra_local/ra_plugin.c

(svn_ra_local__get_commit_editor, svn_ra_local__get_commit_ev2): same

* subversion/libsvn_ra_svn/client.c

(ra_svn_commit): same

* subversion/libsvn_repos/commit.c

(svn_repos__get_commit_ev2): same

* subversion/libsvn_repos/delta.c

(delta_proplists): same

* subversion/libsvn_repos/deprecated.c

(svn_repos_get_commit_editor4): same

* subversion/libsvn_repos/dump.c

(dump_node, write_revision_record): same

* subversion/libsvn_repos/fs-wrap.c

(svn_repos_fs_begin_txn_for_commit2, svn_repos_fs_begin_txn_for_commit,

svn_repos_fs_revision_proplist): same

* subversion/libsvn_repos/reporter.c

(get_revision_info): same

* subversion/libsvn_wc/status.c

(collect_ignore_patterns): same

* subversion/mod_dav_svn/activity.c

(dav_svn__create_txn): same

* subversion/mod_dav_svn/lock.c

(append_locks): same

* subversion/svndumpfilter/svndumpfilter.c

(output_revision): same

* subversion/svnmucc/svnmucc.c

(execute, sanitize_log_sources): same

* subversion/svnrdump/load_editor.c

(new_node_record): same

* subversion/svnserve/serve.c

(commit): same

* subversion/svnsync/svnsync.c

(replay_rev_started): same

  1. … 26 more files in changeset.
We frequently use property name constants in conjunction with hash containers.

Provide new wrappers around apr_hash_get and apr_hash_set that accept such

string constants and statically determine their size. That minimizes the

hash access costs.

Mass change hash get and set calls for SVN_PROP_* constants.

* subversion/include/svn_hash.h


svn_hash_sets): Doxygen-ize the docstring


svn_hash_sets_fixed_key): define new apr_hash_* wrapper

* subversion/libsvn_client/add.c

(svn_client__get_all_auto_props): use faster hash wrappers with SVN_PROP_*

* subversion/libsvn_client/commit_util.c

(svn_client__ensure_revprop_table): ditto

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_single): ditto

* subversion/libsvn_client/list.c

(svn_client__ra_stat_compatible): ditto

* subversion/libsvn_client/log.c

(pre_15_receiver): ditto

* subversion/libsvn_client/merge.c

(prepare_merge_props_changed, merge_file_added, merge_dir_added,

merge_dir_deleted): ditto

* subversion/libsvn_client/mergeinfo.c

(svn_client__get_wc_or_repos_mergeinfo_catalog): ditto

* subversion/libsvn_fs_base/tree.c


txn_body_get_mergeinfo_for_path): same

* subversion/libsvn_fs_fs/fs_fs.c

(write_revision_zero): same

* subversion/libsvn_fs_fs/tree.c

(crawl_directory_dag_for_mergeinfo, get_mergeinfo_for_path_internal): same

* subversion/libsvn_ra/deprecated.c

(svn_ra_get_commit_editor2): same

* subversion/libsvn_ra_local/ra_plugin.c

(svn_ra_local__get_commit_editor, svn_ra_local__get_commit_ev2): same

* subversion/libsvn_ra_svn/client.c

(ra_svn_commit, ra_svn_log): same

* subversion/libsvn_repos/commit.c

(svn_repos__get_commit_ev2): same

* subversion/libsvn_repos/delta.c

(delta_proplists): same

* subversion/libsvn_repos/deprecated.c

(svn_repos_get_commit_editor4): same

* subversion/libsvn_repos/dump.c

(dump_node, write_revision_record):

* subversion/libsvn_repos/fs-wrap.c

(svn_repos_fs_begin_txn_for_commit2, svn_repos_fs_begin_txn_for_commit,

svn_repos_fs_revision_proplist): same

* subversion/libsvn_repos/log.c

(fill_log_entry): same

* subversion/libsvn_repos/reporter.c

(get_revision_info): same

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_get_committed_info): same

* subversion/libsvn_subr/compat.c

(svn_compat_log_revprops_clear, svn_compat_log_revprops_out): same

* subversion/libsvn_wc/status.c

(collect_ignore_patterns): same

* subversion/mod_dav_svn/activity.c

(dav_svn__create_txn): same

* subversion/mod_dav_svn/lock.c

(append_locks): same

* subversion/svndumpfilter/svndumpfilter.c

(output_revision): same

* subversion/svnmucc/svnmucc.c

(execute, sanitize_log_sources): same

* subversion/svnrdump/load_editor.c

(new_node_record): same

* subversion/svnserve/serve.c

(commit): same

* subversion/svnsync/svnsync.c

(replay_rev_started): same

[Most of this got reverted in r1483610]

[Remainder reverted in r1484181]

  1. … 30 more files in changeset.
Remove the ability of svn_repos_authz_read2() to handle repos-relative URLs.

This cleans up a case where it was impossible to canonicalize the paths

being passed into it and also ends up removing the need to pass repos_root

into it. If callers want to support repos-relative URLs then they should

resolve them into absolute file URLs and canonicalize them prior to calling


* subversion/include/svn_repos.h

(svn_repos_authz_read2): Remove repos_root argument and adjust documentation

to account for no longer accepting repos-root URLs. Also change "a file"

in the documented formats for path to a dirent to be more precise.

* subversion/libsvn_repos/authz.c

(authz_retrieve_config_repo, svn_repos__authz_read, svn_repos_authz_read2):

Remove repos_root parameter and support for repos-relative URLs in path.

* subversion/libsvn_repos/deprecated.c

(svn_repos_authz_read): Adjust call of svn_repos__authz_read().

* subversion/libsvn_repos/repos.h

(svn_repos_authz_read): Adjust declaration and documentation to match the

removal of repos_root and support for repos-relative URLs.

* subversion/mod_authz_svn/mod_authz_svn.c

(canonicalize_access_file): Adjust comment about why we are not canonicalizing


(get_access_conf): When access_file is a repos-relative URL resolve and

canonicalize it before calling svn_repos_authz_read2().

* subversion/svnserve/serve.c

(canonicalize_access_file): Change access_file to an arginout and return

an svn_error_t so that we can resolve and canonicalize repos-relative


(load_authz_config): Adjust calls to canonicalize_access_file() due to

above changes.

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

(in_repo_authz, in_repo_groups_authz): Remove repos-relative URL tests

and convert still needed tests that were using repos-relative URls to

absolute URLs.

* tools/server-side/svnauthz.c

(get_authz): Fix call to svn_repos_authz_read2() to match above changes.

  1. … 7 more files in changeset.
Use svn_hash_gets and svn_hash_sets.

* subversion/libsvn_repos/authz.c

* subversion/libsvn_repos/commit.c

* subversion/libsvn_repos/delta.c

* subversion/libsvn_repos/deprecated.c

* subversion/libsvn_repos/dump.c

* subversion/libsvn_repos/fs-wrap.c

* subversion/libsvn_repos/hooks.c

* subversion/libsvn_repos/load-fs-vtable.c

* subversion/libsvn_repos/load.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

  1. … 13 more files in changeset.
Introduce AuthzSVNGroupsFile option to allow Subversion configurations with

groups stored in a separate file.

* subversion/include/svn_config.h


* subversion/include/svn_repos.h


(svn_repos_authz_read2): New optional 'groups_path' parameter.

(svn_repos_authz_parse): New optional 'groups_stream' parameter.

* subversion/libsvn_repos/authz.c

(authz_copy_group): Introduce a callback for groups copying.

(authz_copy_groups): Introduce a helper routine to copy groups from a

specified config to the authz structure. Report error if the

destination authz already contains group definitions.

(svn_repos__authz_read): Support the 'groups_path' parameter. If it is set,

parse the corresponding groups config and copy the groups to the

resulting authz structure using authz_copy_groups.

(svn_repos_authz_read2): New optional 'groups_path' parameter.

(svn_repos_authz_read): Support the 'groups_stream' parameter. If it is

set, parse the corresponding groups config stream and copy the groups

to the resulting authz structure.

* subversion/libsvn_repos/deprecated.c

(svn_repos_authz_read): Pass NULL as the 'groups_path' parameter when

calling svn_repos__authz_read.

* subversion/libsvn_repos/repos.h

(svn_repos__authz_read): New optional 'groups_path' parameter.

* subversion/libsvn_repos/repos.с

(create_conf): Explain the purpose of the new groups-db option.

* subversion/mod_authz_svn/mod_authz_svn.c

(authz_svn_config_rec): Add the 'groups_file' config member.

(AuthzSVNGroupsFile_cmd): Introduce a function to canonicalize the groups

file config value.

(authz_svn_cmds): Add the AuthzSVNGroupsFile option.

(get_access_conf): Log the path to the groups file if it is set. Pass the

groups file path to svn_repos_authz_read2.

* subversion/svnserve/serve.c

(canonicalize_access_file): New function. Factored out from

load_authz_config to be reused for the groups file.

(load_authz_config): Retrieve the SVN_CONFIG_OPTION_GROUPS_DB from the

svnserve config. Canonicalize this value if it is present and pass

it to svn_repos_authz_read2 when loading the authz configuration.

* tools/server-side/svnauthz.c

(svnauthz_opt_state): Add the 'groups_file' member.

(svnauthz__cmdline_options_t): Add the svnauthz__groups_file enum member.

(options_table): Add the --groups-file option and short description for it.

(cmd_table): Update the documentation to reflect the added

svnauthz__groups_file option.

(read_file_contents): New function. Factored out from get_authz_from_txn to

be reused for the groups file contents.

(get_authz_from_txn): Use read_file_contents for both authz and groups

files. Pass the resulting contents to svn_repos_authz_parse.

(get_authz): Pass the groups file from options to get_authz_from_txn

or svn_repos_authz_read2 depending on whether transaction option is set.

(canonicalize_access_file): New function. Factored out from

sub_main to be reused for the groups file.

(sub_main): Grab the groups file option from the command line, canonicalize

it if it present and pass it further as a part of the opt_state.

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

(authz-get-handle, in_repo_authz): Pass NULL as the 'groups_path' parameter

when calling svn_repos_authz_read2. Pass NULL as the 'groups_stream'

parameter when calling svn_repos_authz_parse.

(authz_groups_get_handle): Introduce the helper routine for tests similiar

to authz_get_handle but supporting a separate groups file.

(groups_authz, in_repo_groups_authz): Add.

* subversion/tests/cmdline/

(authz_svnserve_groups): Add the access test for svnserve configured with

a separate groups file.

(test_list): Add a reference to the new test.

* subversion/tests/cmdline/svntest/

(write_restrictive_svnserve_conf_with_groups): New method. Creates a

default restrictive svnserve configuration with a separate groups file.

(write_groups_file): Introduce a helper method to write the groups file

in tests.

* subversion/tests/cmdline/svntest/

(_set_name): Store the default path to the groups file in the

'Sandbox.groups_file' variable.

* subversion/mod_authz_svn/INSTALL

(II.1): Describe usage of AuthzSVNGroupsFile directive.

Patch by: Evgeny Kotkov <evgeny.kotkov{_AT_}>

  1. … 13 more files in changeset.
Merge the in-repo-authz branch back to trunk.


  1. … 23 more files in changeset.
Rename some variable names so that the commit callback/baton tuple naming is

consistent across our libraries.

This makes SWIG bindings easier to write since a single typemap can support

the usage of callback/baton tuple in the ra/repos and the client libraries.

I went ahead and did svn_ra__use_commit_shim just to help make the code easier

to read by maintaining variable names between public and helper functions.

* subversion/libsvn_ra/deprecated.c

(svn_ra_get_commit_editor2): s/callback/commit_callback/ and


* subversion/libsvn_ra/editor.c

(svn_ra__use_commit_shim): s/callback/commit_callback/ and


* subversion/libsvn_ra/ra_loader.c

(svn_ra_get_commit_editor3): s/callback/commit_callback/ and


* subversion/bindings/swig/include/svn_types.swg

(svn_commit_callback2_t): Remove the duplicated typemap for Perl.

s/callback/commit_callback/ and s/callback_baton/commit_baton/

* subversion/include/svn_repos.h


s/callback/commit_callback/ and s/callback_baton/commit_baton/

* subversion/include/svn_ra.h


s/callback/commit_callback/ and s/callback_baton/commit_baton/ and fix the

documentation that mentions the arguments to the callback to match what

actually goes to the callback.

* subversion/libsvn_repos/deprecated.c

(svn_repos_get_commit_editor4): s/callback/commit_callback/ and


* subversion/libsvn_repos/commit.c

(svn_repos_get_commit_editor5): s/callback/commit_callback/ and


  1. … 7 more files in changeset.
Merge the remainder of the 10Gb branch into /trunk.

This patch revs APIs and touches the UI. For a detailed

description of each merged revision see the respective

log entry.

* Implement zero-copy code path

r1388102: extend the FS vtable. Add a function that allows for

processing file content in-situ.

r1388195: Rev reporter API and attempt zero-copy reporting for

files contents below a given threshold

r1388202: Add --zero-copy-limit parameter to svnserve and pass it

down to the reporter

r1388205: update remaining callers to use svn_repos_begin_report3.

r1388211: rename *_try_process_file_content *_try_process_file_contents.

r1388362: Bugfix: try_process_file_contents code plus a handful of bugs

masked by the first.

r1388640: Bugfix: off-by-one in contents size.

* Implement delayed checking for client-side abortion

r1388375: Extend aready rev'ed APIs and add --error-check-internal

option to svnserve.

* Tune ra_svn TX buffer handling

r1388643: tune ra_svn TX buffer usage by reducing the number of copy

operations etc.

r1388807: page-aligned I/O buffers.

* Finalize APIs and UI

r1390409: replace --zero-copy-limit and --error-check-internal with a

single option (--client-speed) at UI level but keep internal

APIs as they are

r1390414: replace help string for the --client-speed parameter.

r1390419: UI typo

r1390955: Schedule API changes for 1.8 instead of 1.9.

  1. … 25 more files in changeset.
Accept dump format v3, except for property deltas, in svndumpfilter.

Replace the hardcoded version number ("2") with a parser callback for

the dump file format version number. Used by svndumpfilter only (so


Add an API option to treat text-deltas as text instead of applying

them. TRUE for svndumpfilter only.

* subversion/tests/cmdline/

(with_deltas): New test.

(test_list): Add the test.

* subversion/tests/cmdline/svndumpfilter_tests_data/simple_v3.dump

New file.

* subversion/include/svn_repos.h

(magic_header_record): New callback declaration.

(svn_repos_parse_fns3_t): Add the new callback declaration.

(svn_repos_parse_dumpstream3): Add the text-delta option.

* subversion/libsvn_repos/load.c

(parse_format_version): While we're here, put the "output" argument


(svn_repos_parse_dumpstream3): Implement the text-delta-as-text option.

Pass the format version to the new callback. Don't reject v3 dumpfiles


* subversion/svndumpfilter/main.c

(magic_header_record): New callback.

(svn_repos_parse_fns3_t): Add the new callback.

(parse_baton_initialize): Remove the hard-coded format-version output.

(do_filter): Treat text-deltas as text.

* subversion/svnrdump/load_editor.c

(magic_header_record): New callback.

(svn_rdump__load_dumpstream): Use the new callback.

* subversion/libsvn_repos/deprecated.c

(fns3_from_fns2): Set the new callback.

(svn_repos_get_fs_build_parser3): Add the text-delta option.

* subversion/libsvn_repos/load-fs-vtable.c

(magic_header_record): New callback.

(svn_repos_get_fs_build_parser4): Use the new callback.

(svn_repos_load_fs4): Add the text-delta option.

  1. … 7 more files in changeset.
Prepare to handle dump format v3 in svndumpfilter.

This revision sets up the boilerplate for backward compatibility.

Later revisions will add a new parser callback for the version number,

and a new option to allow treating text-deltas as text (instead of

applying them immediately).

* subversion/include/svn_repos.h

(svn_repos_parse_fns3_t): New struct. Tweak the callback declarations

to reflect the usual ordering in dump files.

(svn_repos_parse_dumpstream3): New API using the new struct. No

real changes yet.

(svn_repos_get_fs_build_parser4): Modify this new-in-1.8 function to

use the new struct.



svn_repos_get_fs_build_parser3): Deprecate.

(svn_repos_get_fs_build_parser2): Move below below the newly-

deprecated svn_repos_parse_fns2_t declaration.

* subversion/svndumpfilter/main.c


do_filter): Use the new API.

* subversion/svnrdump/load_editor.c

(svn_rdump__load_dumpstream): Use the new API.

* subversion/libsvn_repos/deprecated.c


fns3_from_fns2): New functions.

(svn_repos_get_fs_build_parser3): Use the new API.

* subversion/libsvn_repos/load.c



svn_repos_parse_dumpstream3): Use the new API.

* subversion/libsvn_repos/load-fs-vtable.c


svn_repos_load_fs4): Use the new API.

  1. … 5 more files in changeset.
A little but more svn_stream_puts() sugar.

* subversion/libsvn_client/diff.c

* subversion/libsvn_diff/diff_file.c

* subversion/libsvn_diff/diff_memory.c

* subversion/libsvn_repos/deprecated.c

* subversion/libsvn_subr/stream.c

* subversion/libsvn_wc/props.c

* subversion/svn/props.c

* subversion/svnlook/main.c

(display_prop_diffs, output_marker_eol, output_conflict,

repos_notify_handler, svn_stream_printf_from_utf8, append_prop_conflict,

svn_cl__print_prop_hash): Use svn_stream_puts().

  1. … 7 more files in changeset.