Checkout Tools
  • last updated 2 hours ago
Constraints: committers
Constraints: files
Constraints: dates
* subversion/include/private/svn_sorts_private.h

(*): Use Doxygen's comment leader for comments that incorporate doxygen

syntax — not because Doxygen parses this file, but for $EDITOR's syntax


* subversion/include/svn_ra.h

(SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS): Fix broken link in the docstring.

The broken link was introduced in r1391638.

Fix various typos detected by codespell

* include/private/svn_auth_private.h, include/private/svn_branch_impl.h,

include/private/svn_config_private.h, include/private/svn_diff_tree.h,

include/private/svn_mergeinfo_private.h, include/private/svn_object_pool.h,

include/private/svn_repos_private.h, include/private/svn_subr_private.h,

include/private/svn_temp_serializer.h, include/private/svn_utf_private.h,

include/private/svn_wc_private.h, include/svn_auth.h, include/svn_client.h,

include/svn_cmdline.h, include/svn_compat.h, include/svn_fs.h,

include/svn_ra.h, include/svn_repos.h, include/svn_types.h,

include/svn_types_impl.h, include/svn_version.h, include/svn_wc.h,


(): Spelling fixes

  1. … 8 more files in changeset.
Introduce 'svnadmin build-repcache' command.

Implement the 'svnadmin build-repcache' CLI and add an ioctl API for building

the representation cache.

The implementation iterates over revisions in the specified range and recursively

processes the changed nodes, starting from the corresponding revision roots.

For each changed node, it ensures that its data and property representations

exist in the rep-cache. The nodes are processed in the same order as when

committing a transaction (see write_final_rev() function in libsvn_fs_fs/transaction.c),

so that the rep-cache.db files are fully consistent.

* subversion/svnadmin/svnadmin.c

(cmd_table): Add and document the 'build-repcache' command.



build_rep_cache_progress_func): New.

* subversion/include/svn_error_codes.h



* subversion/include/private/svn_fs_fs_private.h



* subversion/libsvn_fs_fs/fs.c

(fs_ioctl): Handle SVN_FS_FS__IOCTL_BUILD_REP_CACHE.

* subversion/libsvn_fs_fs/fs_fs.h

* subversion/libsvn_fs_fs/fs_fs.c

(): Include 'low_level.h'.



ensure_representation_sha1): New. Iterate over revisions and recursively

process the changed nodes. For each changed node, ensure that its data

and property representations exist in the rep-cache.

* subversion/tests/cmdline/

(build_repcache): New test.

(test_list): Add the new test.

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

(): Include 'libsvn_fs_fs/rep-cache.h' and 'libsvn_fs/fs-loader.h'.

(build_rep_cache): New test.

(test_funcs): Add the new test.

* tools/client-side/bash_completion

(_svnadmin): Add the 'build-repcache' command.

Patch by: Denis Kovalchuk <>

  1. … 7 more files in changeset.
Increment the trunk version number to 1.15, and introduce a new CHANGES

section, following the creation of the 1.14.x release branch.

* subversion/include/svn_version.h,



(SVN_VER_MINOR): Increment to 15.

* CHANGES: New section for 1.15.0.

  1. … 3 more files in changeset.
Add missing SVN_DEPRECATED tags on functions being deprecated for 1.14.

* subversion/include/svn_ra.h

(svn_ra_open4): Mark deprecated.

* everywhere: Run tools/dev/ to remove

trailing whitespace before we branch 1.14.

  1. … 100 more files in changeset.
Merge the 'decouple-shelving-cli' branch to trunk.


Add the shelving v2 implementation from Subversion 1.11, as an alternative

to the shelving v3 implementation from Subversion 1.12.

They have substantially different pros and cons, so it is beneficial for the

user to be able to choose.

Make the shelving CLI version selectable by an environment variable:

env. var. not set => shelving v3 enabled

SVN_EXPERIMENTAL_COMMANDS=shelf3 => shelving v3 enabled

SVN_EXPERIMENTAL_COMMANDS=shelf2 => shelving v2 enabled


  1. … 12 more files in changeset.
Complete the upgrade of array insert/delete functions.

For issue #4840 "Merge assertion failure in svn_sort__array_insert".

This changes all remaining callers, in other areas of Subversion, to use the

new array insert/delete functions that return standard Subversion errors if

inputs are out of bounds, and removes the old versions of those functions.

These are private functions so the public API is not affected.

* subversion/include/private/svn_sorts_private.h

* subversion/libsvn_subr/sorts.c


svn_sort__array_delete): Remove.


svn_sort__array_delete2): Rewrite as the only version, instead of calling

the old version. No functional change.

Elsewhere: update all callers.

  1. … 18 more files in changeset.
Require at least version 1.5 of APR

Since r1874057, the apr_pescape_shell() API is being used to escape filenames

when invoking $SVN_EDITOR. This was added to APR in 1.5.0, released on



(): Document new minimum APR version

* build/generator/

(_find_apr): Bump minimal_apr_version to 1.5.0


(APR_VER_REGEXES): Bump minor version in 1.x regex to 1.5


(APR_VERSION): Specify 1.5.0 as default version

* subversion/include/private/svn_dep_compat.h

(apr_time_from_msec): Removed, since it's provided by APR 1.4.0 or later

* subversion/include/svn_types.h

(apr_hash_this_key, apr_hash_this_key_len, apr_hash_this_val): Remove

prototypes, since they're provide by APR 1.5.0 or later

* subversion/libsvn_subr/iter.c

(hash_do_baton): Remove condition requiring APR 1.4.0 to define this type

(svn_iter_apr_hash): Remove pre-APR 1.4.0 code

(apr_hash_this_key, apr_hash_this_key_len, apr_hash_this_val): Remove

definitions, since they're provided by APR 1.5.0 or later

* subversion/libsvn_subr/pool.c

(apr_pool_create_unmanaged_ex): Remove conditional alias to

apr_pool_create_core_ex, for APR versions < 1.3.3

  1. … 6 more files in changeset.
Make it possible for RA-layer consumers to detect redirect loops reliably.

Make svn_ra_open() return both canonicalized and non-canonicalized versions

of redirect URLs. The latter can be used to detect redirect loops, while

the former can be used for any other purposes as usual.

See r1866899 and r1873375 for reasons why this is necessary.

* subversion/include/svn_ra.h

(svn_ra_open4): Deprecate.

(svn_ra_open5): Declare.

* subversion/libsvn_client/ra.c

(svn_client__open_ra_session_internal): Detect redirect loops based on the

non-canonicalized representation of the URL used by the RA implementation.

The canonicalized version is insufficient for loop detection.

* subversion/libsvn_ra/deprecated.c

(svn_ra_open4): Implement as a wrapper around svn_ra_open5().

* subversion/libsvn_ra/ra_loader.c

(svn_ra_open5): Implement.

(svn_ra_create_callbacks): Update for new output parameter 'redirect_url_p'.

* subversion/libsvn_ra/ra_loader.h

(open_session): Needs a new output parameter.

* subversion/libsvn_ra/wrapper_template.h

(compat_open): Track addition of new output parameter.

* subversion/libsvn_ra_local/ra_plugin.c

(svn_ra_local__open): Add new output parameter.

* subversion/libsvn_ra_serf/options.c

(svn_ra_serf__exchange_capabilities): Return the URL received in a HTTP

redirect as-is in new 'redirect_url' output parameter.

(svn_ra_serf__has_capability): Track addition of output parameter.

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__exchange_capabilities): Declare new output parameter.

* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__open): Support new 'redirect_url' output parameter.

* subversion/libsvn_ra_svn/client.c

(ra_svn_open): Support new 'redirect_url' output parameter.

  1. … 10 more files in changeset.
Avoid aborting on assertion failure in the area of mergeinfo calculations.

Instead, raise a catchable assertion error.

If an error occurs in svn_rangelist_merge2(), produce a more detailed error

message to aid in debugging.

Introduce and use 'svn_sort__array_insert2()' which checks its inputs. The

old version of this function was aborting on out-of-range inputs. Introduce

and use 'svn_sort__array_delete2()' likewise, as similar issues may show up

here too. The old version of this function was ignoring calls with

out-of-range inputs. The old versions of both functions are still in use

elsewhere in the Subversion libraries.

For issue #4840, "Merge assertion failure in svn_sort__array_insert".

* subversion/include/private/svn_sorts_private.h,



svn_sort__array_delete2): New.

* subversion/libsvn_client/merge.c


insert_child_to_merge): Allow returning an error.

Everywhere: use svn_sort__array_insert2() and svn_sort__array_delete2().

* subversion/libsvn_subr/mergeinfo.c

(adjust_remaining_ranges): Allow returning an error.

(dual_dump): Replace this old debug helper...

(rangelist_to_string_debug): ... with this new one.

(svn_rangelist_merge2): Extract the body of this function into a local

'rangelist_merge2', leaving the original as an error-checking

wrapper. If an error occurs, report its inputs.

(rangelist_is_sorted): New.

Everywhere: use svn_sort__array_insert2() and svn_sort__array_delete2().

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

(test_rangelist_merge_random_non_validated_inputs): Expect assertion

failures; ignore them.

(test_funcs): Expect that test to pass now.

  1. … 4 more files in changeset.
* subversion/include/svn_config.h: Fix pointer in comment.
Various spelling fixes, no functional change

* contrib/client-side/svn-clean

(--exclude): s/exluded/excluded/

* subversion/include/svn_error_codes.h

(SVN_ERR_X509_CERT_VERIFY_FAILED): s/Certficate/Certificate/

* subversion/po/de.po,





(): s/Certficate/Certificate/; s/abandonded/abandoned/

* subversion/libsvn_repos/repos.c:

(): s/abandonded/abandoned/

* subversion/libsvn_repos/repos.c,



(): s/filesytem/filesystem/

  1. … 9 more files in changeset.
* subversion/include/svn_client.h (svn_client_revert4): Tweak doc string.

Suggested by: danielsh

Fix doc-strings of 'revert' API.

* subversion/include/svn_client.h

(svn_client_revert4): Document 'use commit times' behaviour.

* subversion/libsvn_client/revert.c

(revert): Refer to existing docs.

  1. … 1 more file in changeset.
Adjust lifetime of the result returned from svn_repos__normalize_prop().

Previously, this function would make an unconditional copy of the value into

the result pool. While this may look convenient in some of the cases, there

is a downside of making unnecessary copies even if no normalization happened.

Instead of that, let's give the calling site control over the results' lifetime

by not making the copy if the input did not change. The callers may still dup()

the value if they need to, but with this approach there are no unavoidable

copies in various situations, such as where we would like to only update the

value if it changed or where we don't have an appropriate scratch pool, but

need to normalize the property value anyway.

* subversion/include/private/svn_repos_private.h

(svn_repos__normalize_prop): Adjust documentation.

* subversion/libsvn_repos/fs-wrap.c

(svn_repos__normalize_prop): Do not duplicate the input if no normalization

is required.

* subversion/libsvn_repos/dump_editor.c

(normalize_props): Adjust call to svn_repos__normalize_prop(), explicitly

duplicate the property value into the result pool.

* subversion/svnrdump/load_editor.c

(set_revision_property, set_node_property): Explicitly duplicate the property

values into the long-living pool.

* subversion/svnrdump/util.c

(svn_rdump__normalize_props): Adjust call to svn_repos__normalize_prop(),

explicitly duplicate the property value into the result pool.

  1. … 4 more files in changeset.
Increment the trunk version number to 1.14, and introduce a new CHANGES

section, following the creation of the 1.13.x release branch.

* subversion/include/svn_version.h,



(SVN_VER_MINOR): Increment to 14.

* CHANGES: New section for 1.14.0.

  1. … 3 more files in changeset.
Report a revision's size on disk.

This adds an 'svnadmin rev-size' CLI and a libsvn_fs ioctl API to report

the total size in bytes of the representation on disk of a revision,

including rev-props, excluding FSFS indexes.

$ svnadmin rev-size /path/to/repo -r1

1337 bytes in revision 1

* subversion/svnadmin/svnadmin.c

(cmd_table): Add and document the 'rev-size' command.


subcommand_rev_size): New.

* subversion/include/private/svn_fs_fs_private.h




* subversion/libsvn_fs_fs/fs.c

(fs_ioctl): Handle SVN_FS_FS__IOCTL_REVISION_SIZE.

* subversion/libsvn_fs_fs/fs_fs.h

* subversion/libsvn_fs_fs/stats.c



rev_size_baton_t): New.

* subversion/libsvn_fs_fs/revprops.h

* subversion/libsvn_fs_fs/revprops.c

(svn_fs_fs__get_revision_props_size): New.

* tools/client-side/bash_completion

(_svnadmin): Add 'rev-size'.

  1. … 7 more files in changeset.
Fix Doxygen mark-up, following r1857435.
Reimplement fsfs private operations required by `svnfsfs` (stats, dump index,

load index) as "ioctls".

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

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

This change serves two purposes:

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

operations everywhere without necessarily promoting them into a proper

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

depending on the requirements).

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

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

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

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

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

* subversion/include/svn_fs.h

(svn_fs_ioctl, SVN_FS_DECLARE_IOCTL_CODE, svn_fs_ioctl_code_t): New.

* subversion/include/svn_error_codes.h


* subversion/include/private/svn_fs_fs_private.h

(svn_fs_fs__get_stats, svn_fs_fs__dump_index, svn_fs_fs__load_index):

These functions are now implemented as...


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

(svn_fs_fs__ioctl_get_stats_input_t, svn_fs_fs__ioctl_get_stats_output_t,

svn_fs_fs__ioctl_dump_index_input_t, svn_fs_fs__ioctl_load_index_input_t):

...use these new structures.

* subversion/libsvn_fs/fs-loader.h

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

* subversion/libsvn_fs/fs-loader.c

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

vtable member.

* subversion/libsvn_fs_fs/fs_fs.h

(svn_fs_fs__get_stats, svn_fs_fs__dump_index, svn_fs_fs__load_index):

These functions are now declared here.

* subversion/libsvn_fs_fs/fs.c

(): Include `svn_fs_fs_private.h`.

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


(fs_vtable): Initialize the `ioctl` field.

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

* subversion/libsvn_fs_fs/dump-index.c,



(): Tweak includes.

* subversion/libsvn_fs_base/fs.c

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

* subversion/libsvn_fs_x/fs.c

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

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

(dump_index): Invoke an appropriate svn_fs_ioctl().

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

(load_index): Invoke an appropriate svn_fs_ioctl().

* subversion/svnfsfs/stats-cmd.c

(subcommand__stats): Invoke an appropriate svn_fs_ioctl().

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

(test_unrecognized_ioctl): New test.

(test_funcs): Run the new test.

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

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

* build.conf

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

  1. … 15 more files in changeset.
Increment the trunk version number to 1.13, and introduce a new CHANGES

section, following the creation of the 1.12.x release branch.

* subversion/include/svn_version.h,



(SVN_VER_MINOR): Increment to 13.

* CHANGES: New section for 1.13.0.

  1. … 3 more files in changeset.
Tweak API documentation, reviewing API changes since 1.11.

Fix missing 'deprecated' tags, Doxygen mark-up, etc.

Reintegrate the 'shelving-v3' branch.
  1. … 4 more files in changeset.
Change the shelf storage directory name from 'v2' to 'v3'.

Also remove the knowledge of the existence of a shelves directory from the

WC API, and instead just have knowledge of the 'experimental' features dir

at this level.

* subversion/include/private/svn_wc_private.h,


(svn_wc__get_experimental_dir): Replacement for 'svn_wc__get_shelves_dir'.

* subversion/libsvn_client/shelf.c

(get_shelves_dir): New.


svn_client__shelf_list): Use it.

  1. … 2 more files in changeset.
* subversion/include/private/svn_client_mtcc.h

(svn_client__mtcc_commit): Improve documentation.

Add resolver support for moved-file vs moved-file upon update.

The resolver now supports move vs move tree conflicts for files after

an update operation.

Two new resolution operations are available:

(m) - override incoming move and merge incoming changes from 'alpha-moved'

to 'alpha-also-moved'

(M) - accept incoming move and merge local changes from 'alpha-also-moved'

to 'alpha-moved'

Where the file was originally called 'alpha', was renamed to 'alpha-moved'

in the repository, and renamed to 'alpha-also-moved' in the working copy.

Because the local move is broken during the update operation when the

delete-half of the move is updated, the resolver only has the copied half

move available in the working copy. To find the local move destination the

resolver queries the working copy database for nodes which are copies of

the conflict victim's repository path. This can of course lead to ambiguous

results in case a node is first copied and then moved, in which case the

resolver offers the user a choice of local move targets in the usual way.

* subversion/include/private/svn_wc_private.h

(svn_wc__find_copies_of_repos_path): Declare.

* subversion/libsvn_client/conflicts.c

(conflict_tree_update_local_moved_away_details): New conflict details struct.


resolve_both_moved_file_update_keep_incoming_move): New resolution handlers.

(conflict_tree_get_details_update_local_moved_away): New details fetcher

which locates copied nodes corresponding to the local move.

(get_both_moved_file_paths): New helper function.


conflict_tree_get_description_update_both_moved_file_move_merge): New

functions which describe incoming move vs local move conflicts flagged

during updates of files.

(configure_option_both_moved_file_merge): Hook up the new options.



conflict_type_specific_setup): Support the newly added conflict options.

* subversion/libsvn_wc/node.c

(svn_wc__find_copies_of_repos_path): New.

* subversion/libsvn_wc/wc-queries.sql

(STMT_SELECT_COPIES_OF_REPOS_RELPATH): New query which locates copies of a

particular repository relpath with a particular node kind in working copy.

* subversion/libsvn_wc/wc_db.c

(svn_wc__db_find_copies_of_repos_path): New wc_db API to execute above query.

* subversion/libsvn_wc/wc_db.h

(svn_wc__db_find_copies_of_repos_path): Declare.

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

(create_file_move_vs_file_move_update_conflict): New helper function.


test_update_file_move_vs_file_move_accept_move, test_funcs): New tests

which exercise both of the newly added conflict resolution options.

  1. … 6 more files in changeset.
Let the WC mods editor and WC replay editor APIs take explicit notification


* subversion/include/private/svn_client_private.h


svn_client__wc_copy_mods): Take a notification callback.

* subversion/libsvn_client/commit.c

(svn_client__wc_replay): Take a notification callback.

* subversion/libsvn_client/wc_editor.c

(svn_client__wc_copy_mods): Take a notification callback.

* subversion/svn/shelf-cmd.c

(svn_cl__wc_copy_mods): Adjust caller.

  1. … 3 more files in changeset.
Improve backward compatibility for svn_delta_path_driver2().

This ensures the input array is not modified, and changes the behaviour to

be less surprising.

* subversion/include/svn_delta.h,


(svn_delta_path_driver2): Add back slash prefixes if any, rather than the

first, of the inputs had one. Duplicate the array if modifying it.

  1. … 1 more file in changeset.
Teach the WC editor to acquire and release a WC write lock.

* subversion/include/private/svn_client_private.h

(svn_client__wc_editor): Document that it manages the write lock.

(svn_client__wc_editor_internal): Add an option flag to manage the write lock.

* subversion/libsvn_client/copy.c


svn_client__repos_to_wc_copy_by_editor): Ask the WC editor not to manage

the write lock for us here, as the caller does it.

* subversion/libsvn_client/shelf.c

(svn_client__shelf_apply): Don't aquire and release the write lock here:

let the WC editor do it.

* subversion/libsvn_client/wc_editor.c

(edit_baton_t): Add fields to manage the write lock.


pool_cleanup_handler): New.

(edit_open): If requested, acquire the write lock and arrange for it to be

released on pool clean-up.

(edit_close): If acquired, release the write lock.

(svn_client__wc_editor_internal): Add the option flag to manage the write

lock. Initialize the 'abort_edit' method so that it will release the

write lock, the same as 'close_edit'.

(svn_client__wc_editor): Ask for the write lock to be managed.

  1. … 3 more files in changeset.