Checkout Tools
  • last updated 3 hours ago
Constraints: committers
Constraints: files
Constraints: dates

Changeset 1497359 is being indexed.

Add support for cleaning up externals via 'svn cleanup --include-externals'.

This should address the feature request from issue #2325.

* subversion/include/svn_client.h

(svn_client_cleanup2): Add include_externals parameter.

* subversion/include/svn_wc.h

(svn_wc_notify_t): New action svn_wc_notify_cleanup_external.

* subversion/libsvn_client/cleanup.c

(remove_unversioned_items_baton): Rename to ...

(cleanup_status_walk_baton): ... this, and replace notify/cancel support

members with a client context member which includes them.

(do_cleanup): New helper function, extracted from svn_client_cleanup2().

(remove_unversioned_items): Rename to ...

(cleanup_status_walk): ... this, and extend to optionally clean up externals

found during the status walk. Adjust for baton changes, too.

(svn_client_cleanup2): New parameter include_externals. Call the do_cleanup()

helper function which replaces most of this function's body.

* subversion/libsvn_client/deprecated.c

(svn_client_cleanup): Account for new parameter to svn_client_cleanup2().

* subversion/svn/cleanup-cmd.c

(svn_cl__cleanup): Pass opt_state->include_externals to svn_client_cleanup2().

* subversion/svn/notify.c

(notify): Handle svn_wc_notify_cleanup_external.

* subversion/svn/svn.c

(svn_cl__cmd_table): Add --include-extenals option to 'svn cleanup'.

* subversion/tests/cmdline/

(cleanup_dir_external, test_list): New rather simple test.

  1. … 7 more files in changeset.
Allow 'svn cleanup' to remove unversioned items from the working copy.

This should address the feature request from issue #3549.

Add two new options to 'svn cleanup', --remove-unversioned and --no-ignore.

The former causes unversioned files and directories to be removed after

successful cleanup. The latter causes ignored items to be removed as well.

One remaining question is what to do with externals. Right now, 'svn cleanup'

never recurses into externals. Should it recurse into externals if the

--remove-unversioned option is given? Should we change it to always recurse

into externals by default? I'm not quite sure.

* subversion/include/svn_client.h

(svn_client_cleanup2): Declare.

(svn_client_cleanup): Deprecate.

* subversion/libsvn_client/cleanup.c

(remove_unversioned_items): New helper function.

(svn_client_cleanup2): Implement as an extension of svn_client_cleanup(),

which can optionally remove unversioned items after all other cleanup

actions, via a status walk.

* subversion/libsvn_client/deprecated.c

(svn_client_cleanup): Implement as a wrapper around svn_client_cleanup2().

* subversion/svn/cl.h

(svn_cl__opt_state_t): Add new 'remove_unversioned' option.

* subversion/svn/cleanup-cmd.c

(svn_cl__cleanup): Run svn_client_cleanup2() to support removal of

unversioned items. Reject --no-ignore option without --remove-unversioned.

* subversion/svn/svn.c

(svn_cl__longopt_t): Add opt_remove_unversioned.

(svn_cl__options): Add --remove-unversioned option.

(svn_cl__cmd_table): Extend help text of 'svn cleanup'.

(sub_main): Handle --remove-unversioned option.

* subversion/tests/cmdline/

(cleanup_unversioned_items, test_list): New test.

  1. … 6 more files in changeset.
* **/**

Run tools/dev/ to remove all trailing whitespace

before we branch 1.8, like we did before creating previous branches.

No functional changes.

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

* subversion/libsvn_client/add.c

* subversion/libsvn_client/cat.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/revert.c

* subversion/libsvn_client/status.c

* subversion/libsvn_client/switch.c

* subversion/libsvn_client/update.c

* subversion/libsvn_client/util.c

  1. … 30 more files in changeset.
Rev the standard libsvn_client api used for opening ra sessions, to allow

access to the libsvn_wc pristine store in many more cases. This allows serf

to obtain texts from the local working copy in many cases where it first


For just this patch makes libsvn_ra_serf avoid more than 550

http requests.

* subversion/include/private/svn_client_private.h

(svn_client__ra_session_from_path2): Update documentation.

* subversion/include/svn_client.h

(svn_client_open_ra_session2): New function.

(svn_client_open_ra_session): Deprecate function.

* subversion/libsvn_client/add.c

(mkdir_urls): Update caller.

* subversion/libsvn_client/client.h

(svn_client__open_ra_session_internal): Change some arguments. Update

documentation. Add scratch_pool.

* subversion/libsvn_client/commit.c

(check_url_kind): Update caller.

* subversion/libsvn_client/copy.c

(repos_to_repos_copy): Update caller.

(wc_to_repos_copy): Use session pool to avoid opening two sessions at the

same time. Remove unneeded wait for timestamps, as we do a repository only

commit here.

(repos_to_wc_copy): Update caller.

* subversion/libsvn_client/delete.c

(delete_urls_multi_repos): Update caller.

* subversion/libsvn_client/deprecated.c

(svn_client_open_ra_session): New function.

(svn_client_uuid_from_url): Wrap svn_client_get_repos_root, but with a

subpool to avoid keeping ra sessions open in functions without dual pools.

(svn_client_root_url_from_path): Use session pool, as there is no result_pool.

* subversion/libsvn_client/diff.c


diff_repos_repos): Obtain wri_abspath and use it when opening ra



diff_summarize_repos_repos): Update caller.

* subversion/libsvn_client/import.c

(svn_client_import5): Update caller.

* subversion/libsvn_client/iprops.c

(get_inheritable_props): Update caller.

* subversion/libsvn_client/list.c

(svn_client__ra_stat_compatible): Update caller.

* subversion/libsvn_client/locking_commands.c


svn_client_unlock): Update caller.

* subversion/libsvn_client/merge.c

(ensure_ra_session_url): Pass wri_abspath to speed up merging.



do_automatic_merge_locked): Update caller.

* subversion/libsvn_client/mergeinfo.c

(svn_client__get_wc_or_repos_mergeinfo_catalog): Update caller.

* subversion/libsvn_client/prop_commands.c


svn_client_revprop_set2): Update caller.


svn_client_revprop_list): Update caller. Introduce subpool for function

without result_pool argument.

* subversion/libsvn_client/ra.c

(callback_baton_t): Add wcroot_abspath argument to make looking this up

from the ra call a hashtable lookup.

(get_wc_contents): Use wcroot_abspath.

(svn_client__open_ra_session_internal): Separate wri_abspath and base

abspath handling. Use scratch_pool where possible.

(svn_client_open_ra_session): Rename to ...

(svn_client_open_ra_session2): ... this and update caller.

(svn_client__ra_session_from_path2): Update caller.

(svn_client__repos_locations): Update caller.

(svn_client__get_youngest_common_ancestor): Update caller.

* subversion/libsvn_client/status.c


svn_client_status5): Update caller.

* subversion/libsvn_client/update.c

(update_internal): Update caller.

* subversion/libsvn_client/util.c

(svn_client_get_repos_root): Update caller.

  1. … 19 more files in changeset.
Remove a result_pool argument from a new in 1.8 function that doesn't have

output arguments. Values passed to a callback shouldn't be allocated in a

global result pool, but in some iterpool. Storing everything in a result

hash breaks the streamy api pattern.

* subversion/include/svn_client.h

(svn_client_proplist4): Remove result_pool.

* subversion/libsvn_client/deprecated.c

(svn_client_proplist3): Update caller.

* subversion/libsvn_client/prop_commands.c

(pristine_or_working_props): Remove function. Fold in only caller.

(remote_proplist): Add cancel_func. Remove result pool. Don't duplicate the

entire hash to remove 3 or 4 entry props. Handle cancelation.

Rename subpool to iterpool.

(get_remote_props): Remove result pool. Update caller.

(get_local_props): Fold in pristine_or_working_props.

(svn_client_proplist4): Remove argument. Fix typo.

* subversion/svn/proplist-cmd.c

(svn_cl__proplist): Update caller.

  1. … 3 more files in changeset.
In Subversion 1.7 we added an --ignore-ancestry flag to switch, but even

without that flag we don't use the ancestry to properly identify tree

conflicts caused by switching. To do that we must ask the repos layer

(via the ra layer) to notice ancestry.

This patch updates all ra layers to allow noticing ancestry during switching.

For ra_local and ra_serf this works for all existing server versions, but for

ra_svn this requires a new svnserve. (Our dav protocol already supported

ignore_ancestry and send copyfrom args as separate flags)

If necessary we could rev the client switch api to use separate ignore and

notice ancestry flags, but I don't think this is necessary in this case.

This patch also resolves an Subversion 1.5 'sussman TODO', by also adding a

send_copyfrom_args option.

* subversion/include/svn_ra.h

(svn_ra_do_switch3): New function, adding two booleans and using dual pools.

(svn_ra_do_switch2): Deprecate function.

* subversion/libsvn_client/deprecated.c

(svn_client_switch2): Add comment.

* subversion/libsvn_client/switch.c

(switch_internal): Pass ignore_ancestry flag to svn_ra_do_switch3().

* subversion/libsvn_ra/deprecated.c

(svn_ra_do_switch2): New function around svn_ra_do_switch3.

(svn_ra_do_switch): Update caller.

* subversion/libsvn_ra/ra_loader.c

(svn_ra_do_switch2): Rename to...

(svn_ra_do_switch3): ... this. Forward 2 more booleans and dual pools.

* subversion/libsvn_ra/ra_loader.h

(svn_ra__vtable_t): Extend do_switch function.

* subversion/libsvn_ra/wrapper_template.h

(compat_do_switch): Update caller.

* subversion/libsvn_ra_local/ra_plugin.c

(svn_ra_local__do_switch): Update arguments. Forward arguments to


* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__do_switch): Update arguments.

* subversion/libsvn_ra_serf/update.c

(svn_ra_serf__do_switch): Update arguments. Forward arguments to


* subversion/libsvn_ra_svn/client.c

(ra_svn_switch): Update arguments. Pass booleans.

* subversion/libsvn_ra_svn/marshal.c

(vwrite_cmd_switch): Send two more arguments.

* subversion/svnserve/serve.c

(switch_cmd): Accept two optional booleans and pass these to accept_report.

* subversion/tests/cmdline/

(switch_across_replacement): Remove XFail, move and update comment.

Found by: julianfoad

  1. … 13 more files in changeset.
* subversion/libsvn_client/deprecated.c

(svn_client_uuid_from_path2): Use new public api instead of internal api.

Separate the two meanings of 'ignore_ancestry' in the libsvn_client merge

APIs. The two new flags are 'ignore_mergeinfo' and 'diff_ignore_ancestry'.

* subversion/include/svn_client.h

(svn_client_merge5, svn_client_merge_peg5): New, with separate flags.

(svn_client_merge4, svn_client_merge_peg4): Deprecated.

* subversion/libsvn_client/merge.c

(svn_client_merge5, svn_client_merge_peg5): New, with separate flags.

* subversion/libsvn_client/deprecated.c

(svn_client_merge4, svn_client_merge_peg4): Re-implement as wrappers.

* subversion/svn/merge-cmd.c

(merge_reintegrate, svn_cl__merge): Update callers.

  1. … 3 more files in changeset.
To finally close issue #3009, and for similarity with 'svnlook diff', add a

--no-diff-added output filtering argument to 'svn diff'.

* subversion/include/svn_client.h


svn_client_diff_peg6): Update arguments.

* subversion/libsvn_client/deprecated.c


svn_client_diff_peg5): Update caller.

* subversion/libsvn_client/diff.c

(diff_cmd_baton): Add variable.

(diff_file_added): Filter diff if requested.


svn_client_diff_peg6): Set value in baton.

* subversion/svn/cl.h

(svn_cl__opt_state_t.diff): Add variable.

* subversion/svn/diff-cmd.c

(svn_cl__diff): Update caller.

* subversion/svn/log-cmd.c

(svn_cl__log): Update caller.

* subversion/svn/svn.c

(svn_cl__longopt_t): Add value.

(svn_cl__options): Add argument.

(svn_cl__cmd_table): Declare --no-diff-added for diff.

(sub_main): Parse argument.

  1. … 6 more files in changeset.
Following up on the deprecation of svn_wc_move(), make the metadata_only

feature available via the new in 1.8 svn_client_move7().

* subversion/include/svn_client.h

(svn_client_move7): Add argument.

(svn_client_move6): Update documentation.

* subversion/libsvn_client/copy.c



do_wc_to_wc_moves): Forward metadata_only by adding arguments.

(try_copy): Add metadata_only support.

(svn_client_copy6): Update caller.

(svn_client_move7): Add argument.

* subversion/libsvn_client/deprecated.c

(svn_client_move6): Update caller.

* subversion/svn/move-cmd.c

(svn_cl__move): Update caller.

  1. … 3 more files in changeset.
* subversion/libsvn_client/deprecated.c

(svn_client_commit5): Revert 1.7 api behavior of skipping file externals

on commit, unless they are an explicit target of the commit. Passing

TRUE will make them an explicit target.

* subversion/libsvn_client/commit.c

(svn_client_commit5): Move this function...

* subversion/libsvn_client/deprecated.c

(svn_client_commit5): ... to this file.

  1. … 1 more file in changeset.
Fix issue #4225, "Add '--include-externals' option to svn list".

* subversion/include/svn_client.h

(svn_client_list_func2_t): New type used to notify externals information.

(svn_client_list_func_t): Deprecate type.

(svn_client_list3): New function, which has a new argument


(svn_client_list2): Deprecate it.

* subversion/libsvn_client/client.h

(svn_client__list_internal): New function.

(svn_client__list_externals): New function.

* subversion/libsvn_client/deprecated.c

(list_func_wrapper_baton): New struct to deprecate svn_client_list2().

(list_func_wrapper, wrap_list_func): Helper functions to deprecate


(svn_client_list2): Call svn_client_list3 with include_externals set to

FALSE, and use svn_client_list_func2_t as callback implemented by


* subversion/libsvn_client/externals.c

(list_external_items): New static function that walks through all the

externals under list target recursively and list them using


(svn_client__list_externals): New function to parse externals description

and list it using list_external_items().

* subversion/libsvn_client/list.c

(get_dir_contents): Populate the hash table 'externals'. Use

svn_client_list_func2_t instead of svn_client_list_func_t to report file

and directory entries. Use external_parent_url and external_target when

external items are being listed.

(svn_client__list_internal): New function. Same as svn_client_list3(), it

accepts few additional parameters that carries external information.

If include_externals is set, process all the externals which are populated

by get_dir_contents() using svn_client__list_externals().

(svn_client_list3): New function, thin wrapper around


* subversion/svn/list-cmd.c

(print_baton): Add few structure members to keep track of last seen external


(print_dirent): Implement svn_client_list_func2_t to control the output when

used with externals.

(print_dirent_xml): Implement svn_client_list_func2_t. Enclose the external

items in the element <external parent_url=.. target= ..><..></external>

(svn_cl__list): Call svn_client_list3(). Handle if there are any errors

during externals processing.

* subversion/svn/main.c

(svn_cl__cmd_table): Enable include_externals for 'list' and give a short

description about the option.

* subversion/tests/cmdline/

(include_externals): Rename it to 'commit_include_externals'.

(list_include_externals): New test.

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


Patch by: Vijayaguru G <vijay{_AT_}>

Review by: stsp


  1. … 7 more files in changeset.
Make the --no-ignore and --no-auto-props options disregard the

svn:global-ignores and svn:auto-props properties respectively.

As per the discussion here

* subversion/include/svn_client.h

(svn_client_add5): New.

(svn_client_add4): Deprecated.

(svn_client_import5): Add an argument tracking the --no-auto-props option.

* subversion/libsvn_client/add.c

*** Note from the future: Not all The functionality promised

by this commit was made in this change. Specifically,

'svn add --no-ignore' does not disregard svn:global-ignores.

This we rectified in r1418017. ***

(svn_client__get_paths_auto_props): Allow for null AUTOPROPS argument.

(add_file): Add a new argument NO_AUTOPORPS signaling if we want to

consider autoprops or not and set applicable autoprops if we do.

(add_dir_recursive): Add a new argument NO_AUTOPORPS signaling if we

want to consider autoprops or not. Pass it along to recursive calls

and to add_file().

(add): Add a new argument NO_AUTOPORPS signaling if we want to consider

autoprops or not. Pass this arg to add_dir_recursive() and add_file().

(svn_client_add4): Revved to...

(svn_client_add5): ...this. Most of the change here is just the name

change of the POOL arg to SCRATCH_POOL. Functional bit is accepting

the new NO_AUTOPROPS arg and passing it down add().

(svn_client__make_local_parents): Replace call to svn_client_add4 with


* subversion/libsvn_client/client.h

(svn_client__get_paths_auto_props): Better explain what this function does.

* subversion/libsvn_client/commit.c

(import_ctx_t): Note that the autoprops member may be null.

(get_filtered_children): Rename the 'mandatory_ignores' argument to

'global_ignores' since it isn't mandatory anymore. Also handle a null

value for this argument, which which claimed to do already but didn't.

(import_dir): Rename the 'mandatory_ignores' argument to 'global_ignores'.

Add a new argument tracking the --no-auto-props option. Don't grab

the runtime ignores every time we import a dir, rather let the caller

do it once and pass it in as part of the global_ignores.

(import_children): Rename the 'mandatory_ignores' argument to

'global_ignores'. Add a new argument tracking the --no-auto-props


(import): Same as import_dir. Also account for the change to


(svn_client_import5): Add the aforementioned new argument. Either get all

ignores/autoprops or none, as per the --no-ignore and --no-auto-props


* subversion/libsvn_client/deprecated.c

(svn_client_add4): New wrapper around svn_client_add5.

* subversion/svn/add-cmd.c

(svn_cl__add): Use svn_client_add5 instead of svn_client_add4, passing

along the new arg tracking the --no-auto-props option.

* subversion/svn/import-cmd.c

(svn_cl__import): Pass along the new arg tracking the --no-auto-props


* subversion/svn/main.c

(svn_cl__options): Tweak help text for --no-ignore option.

* subversion/tests/cmdline/


inheritable_autoprops_test): Adjust to reflect new behavior; we might

have all types of autoprops, just svn:auto-props, or no autoprops at all.

(svn_prop_inheritable_autoprops_add_versioned_target): Expand test to

cover some new scenarios.

* subversion/tests/cmdline/

(import_inherited_ignores): Fix a mistake where a path name pointed to a

non-existent file in the import_tests_data import tree -- this wasn't a

problem with the old behavior because this path was never referenced.

Adjust the test expectations to agree with the new behavior.

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

(test_16k_add): Use latest version of svn_client_add*

  1. … 10 more files in changeset.
Silence signedness mismatch in overflow checks.

* subversion/libsvn_client/deprecated.c

(info_from_info2): fix signedness mismatch in overflow check

* subversion/libsvn_delta/svndiff.c


read_window_header): ditto

  1. … 1 more file in changeset.
Merge the inheritable-props branch back to trunk.


  1. … 68 more files in changeset.
Forbid WC->WC moves of mixed-revision subtrees by default.

The reasoning behind this is that conflicts involving mixed-revision moves

are harder to resolve than conflicts involving single-revision moves.

Subversion does not yet support interactive resolution of tree conflicts,

and it is not yet clear whether this feature will be available in 1.8.

We will need to handle mixed-revision moves as part of interactive tree

conflict resolution eventually, but until that is the case refusing to

create mixed-revision moves will help users avoid unnecessary conflicts

that need to be resolved manually.

The API is fully backwards compatible and will allow mixed-revision moves

by default unless a new-in-1.8 interface is used.

The --allow-mixed-revision option has been added to 'svn move' to allow

scripts written for Subversion <= 1.7 to run with minor modifications.

The same was done for 'svn merge' in 1.7 and nobody complained, so this

approach seems viable.

* subversion/include/private/svn_wc_private.h

(svn_wc__move2): Declare. Successor of svn_wc_move(), made private since

we've been slowly moving libsvn_wc APIs into the private API space since

the inception of wc-ng (the equivalent API functions at the libsvn_client

interface remain public).

* subversion/include/svn_client.h

(svn_client_move7): Declare.

(svn_client_move6): Deprecate.

* subversion/include/svn_error_codes.h


* subversion/include/svn_wc.h

(svn_wc_move): Deprecate.

* subversion/libsvn_client/copy.c


do_wc_to_wc_moves_with_locks2): Add allow_mixed_revisions parameter and

call svn_wc__move2().

(do_wc_to_wc_moves, try_copy): Add allow_mixed_revisions parameter.

(svn_client_copy6): Allow try_copy() to use mixed-revisions (this is

actually a no-op since is_move is FALSE).

(svn_client_move7): Bumped version of svn_client_move6(), with a new

allow_mixed_revisions parameter.

* subversion/libsvn_client/deprecated.c

(svn_client_move6): Implement as wrapper around svn_client_move7().

* subversion/libsvn_wc/copy.c

(copy_versioned_dir): Add allow_mixed_revisions parameter. If this parameter

is FALSE, reject attempts to move mixed-revision subtrees.

(copy_or_move): Add allow_mixed_revisions parameter.

(svn_wc_copy3): Allow copy_or_move() to use mixed revisions.

(svn_wc__move2): Bumped version of svn_wc_move(), and moved into the

private API namespace. Add allow_mixed_revisions parameter.

* subversion/libsvn_wc/deprecated.c

(svn_wc_move): Reimplement as wrapper around svn_wc__move2().

* subversion/svn/main.c

(svn_cl__cmd_table): Document new behaviour in 'svn help move' and add the

--allow-mixed-revisions option to 'svn move'.

* subversion/svn/move-cmd.c

(svn_cl__move): Call svn_client_move7().

  1. … 9 more files in changeset.
Finish issue #4199 ("Add real support for the --revision (-r) option

to the 'svn mergeinfo' command"). Prior to this change, 'svn

mergeinfo' accepted the --revision (-r) option, but did nothing with

it. Oops!

* subversion/include/svn_client.h

(svn_client_mergeinfo_log2): New iteration (adding an operative

revision range) of ...

(svn_client_mergeinfo_log): ... this now-deprecated function.

* subversion/libsvn_client/deprecated.c

(svn_client_mergeinfo_log): Move this here, and make it a mere

wrapper around svn_client_mergeinfo_log2().

* subversion/libsvn_client/mergeinfo.c

(svn_client_mergeinfo_log2): Replaces svn_client_mergeinfo_log(),

adding 'source_start_revision' and 'source_end_revision'

parameters and handling. The core of this change was really

straightforward -- we just needed to provide the resolved

start/end revisions to the existing invocation of


* subversion/svn/main.c

(main): Add svn_cl__mergeinfo to the set of functions which may

accept a revision range.

* subversion/svn/mergeinfo-cmd.c

(svn_cl__mergeinfo): Upgrade to svn_client_mergeinfo_log2(), passing

the revision range provided by the user.

  1. … 4 more files in changeset.
Add a blank line between declarations and statements where r1352068 didn't.

* subversion/libsvn_client/deprecated.c,











Add blank lines.

  1. … 10 more files in changeset.
Do not use non-constant initializers in struct variables, since this

violates C'89 and C'90. Although most compilers used for Subversion support

non-constant initializers, some do not, such as Solaris SunPRO.

Patch by: Daniel Richard G. <skunk{_AT_}iSKUNK.ORG>

(tweaked by me: added a similar change in auth.c)

* subversion/libsvn_client/deprecated.c

(svn_client_propset3, svn_client_status4): Initialize struct variable

fields separately when they are non-constant.

* subversion/libsvn_client/info.c

(svn_client_info3): Same.

* subversion/libsvn_client/merge.c

(merge_locked, do_symmetric_merge_locked): Same.

* subversion/libsvn_diff/diff_file.c

(svn_diff_file_options_parse): Same.

* subversion/libsvn_fs_fs/fs_fs.c

(set_cached_window, svn_fs_fs__set_entry): Same.

* subversion/libsvn_fs_fs/lock.c

(walk_locks): Same.

* subversion/libsvn_subr/auth.c

(svn_auth_get_platform_specific_provider): Same.

* subversion/libsvn_subr/sqlite.c

(wrapped_func): Same.

* subversion/libsvn_wc/adm_ops.c

(svn_wc_get_changelists): Same.

* subversion/libsvn_wc/props.c

(svn_wc__prop_list_recursive, svn_wc_prop_set4): Same.

* subversion/libsvn_wc/upgrade.c

(svn_wc__upgrade_sdb): Same.

* subversion/libsvn_wc/wc_db.c

(svn_wc__db_op_set_changelist, svn_wc__db_revert_list_read, read_url,

svn_wc__db_revision_status): Same.

* subversion/libsvn_wc/wc_db_util.c

(svn_wc__db_with_txn): Same.

* subversion/svn/merge-cmd.c

(merge_reintegrate): Same.

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

(proc_found, run_procs): Same.

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

(wc_update, check_db_rows, copy_subtest_t, wc_wc_copies, repo_wc_copies):


  1. … 15 more files in changeset.
Add a new --properties-only option to 'svn diff' to show only property changes.

This is the inverse of --ignore-properties. The two options are mutually


* subversion/svn/diff-cmd.c

(svn_cl__diff): Pass the properties_only option to the client layer.

* subversion/svn/main.c

(svn_cl__longopt_t, svn_cl__options, svn_cl__cmd_table): Add a new

--properties-only option. The internal flag is called opt_properties_only".

* subversion/svn/log-cmd.c

(log_entry_receiver): When showing diffs, set properties_only to FALSE.

* subversion/svn/cl.h

(svn_cl__opt_state_t): New properties_only option.

* subversion/libsvn_client/diff.c

(diff_cmd_baton): Add properties_only flag.

(diff_content_changed): Do nothing if properties_only is set.

(svn_client_diff6, svn_client_diff_peg6): New properties_only parameter.

Raise an error if both ignore_properties and properties_only are set.

* subversion/libsvn_client/deprecated.c

(svn_client_diff5, svn_client_diff_peg5): Pass FALSE for properties_only.

* subversion/include/svn_client.h

(svn_client_diff6, svn_client_diff_peg6): Update declarations and docstring.

  1. … 6 more files in changeset.
Deprecate svn_client_import4() and introduce svn_client_import5() to allow

clients that directly interact with our client api to pass a filter function.

* subversion/include/svn_client.h

(svn_client_import_filter_func_t): New typedef.

(svn_client_import5): New function.

(svn_client_import4): Deprecate function.

* subversion/libsvn_client/commit.c

(send_file_contents): Rename argument to local_abspath to match usage.

(import_file): Rename argument to local_abspath and existing dirent to avoid

more filestats.

(import_dir): Rename argument to local_abspath. Add filter support. Use newer

struct type for dirent to allow passing it.

(svn_client_import4): Renamed to ...

(svn_client_import5): ... this and add filter argument. Pass abspath to

helper functions instead of making them generate abspaths everywhere.

Remove unneeded comment.

* subversion/libsvn_client/deprecated.c

(svn_client_import4): New function. Simple wrapper around svn_client_import5.

  1. … 2 more files in changeset.
Add --no-diff-properties and --patch options to 'svn diff'.

The --patch option implies --no-diff-properties and --show-copies-as-adds.

These options are useful when creating patches for consumers that

do not understand or do not care about Subversion properties.

Patch by: Alexey Neyman <>

* subversion/svn/cl.h

* subversion/svn/main.c

New options, --no-diff-properties and --patch for svn diff.

* subversion/include/svn_client.h

(svn_client_diff6,svn_client_diff_peg6): New argument, ignore_prop_diff.

(svn_client_diff5,svn_client_diff_peg5): Update comments.

* subversion/libsvn_client/deprecated.c

(svn_client_diff5,svn_client_diff_peg5): Pass FALSE as ignore_prop_diff.

* subversion/libsvn_client/diff.c

(diff_cmd_baton): New field, ignore_prop_diff.

(diff_props_changed): Do nothing if diff_cmd_baton->ignore_prop_diff is set.

(svn_client_diff6,svn_client_diff_peg6): Pass ignore_prop_diff downstream

via diff_cmd_baton.

* subversion/svn/diff-cmd.c

(svn_cl__diff): Handle --patch and --no-diff-properties.

* subversion/svn/log-cmd.c

(log_entry_receiver): Request property changes from svn_client_diff6.

  1. … 6 more files in changeset.
Provide constructor functions for svn_opt_revision_range_t to simplify


* subversion/include/private/svn_opt_private.h


(svn_opt__revision_range_create, svn_opt__revision_range_from_revnums):

New functions.

* subversion/libsvn_client/deprecated.c

(svn_client_log4, svn_client_merge_peg2): Use them.

* subversion/libsvn_client/merge.c

(merge_cousins_and_supplement_mergeinfo, merge_locked): Use them.

* subversion/libsvn_client/mergeinfo.c

(logs_for_mergeinfo_rangelist): Use them.

* subversion/svn/main.c

(main): Use them.

  1. … 5 more files in changeset.
Update calls to three deprecated APIs to use svn_client_get_repos_root()

instead, mark the deprecated APIs as such and move their implementations to

'deprecated.c'. A follow-up to r1186244.

* subversion/include/svn_client.h

(svn_client_get_repos_root): Mention that it may open a temporary RA


(svn_client_root_url_from_path, svn_client_uuid_from_url,

svn_client_uuid_from_path2): Mark as deprecated.

* subversion/libsvn_client/ra.c

(svn_client_uuid_from_url, svn_client_uuid_from_path2): Move these ...

* subversion/libsvn_client/url.c

(svn_client_root_url_from_path): ... and this ...

* subversion/libsvn_client/deprecated.c

(svn_client_uuid_from_url, svn_client_uuid_from_path2,

svn_client_root_url_from_path): ... to here.

* subversion/libsvn_client/cmdline.c

(svn_client_args_to_target_array2): Update calls.

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_locked): Update calls.

* subversion/libsvn_client/merge.c

(merge_cousins_and_supplement_mergeinfo): Update calls.

* subversion/libsvn_client/relocate.c

(relocate_externals, svn_client_relocate2): Update calls.

  1. … 7 more files in changeset.
Make the client diff output streamy, rather than requiring an APR file.

(Our own consumer of this API just uses stdout, so this doesn't have much

effect there.)

* subversion/include/svn_client.h

(svn_client_diff6): New.

(svn_client_diff5): Deprecate.

(svn_client_diff_peg6): New.

(svn_client_diff_peg5): Deprecate.

* subversion/svn/diff-cmd.c

(svn_cl__diff): Update callers.

* subversion/libsvn_client/deprecated.c

(svn_client_diff5, svn_client_diff_peg5): New deprecation wrappers.

* subversion/libsvn_client/diff.c

(file_printf_from_utf8): Remove.

(display_mergeinfo_diff, display_prop_diffs): Accept and use a stream

instead of a file.

(diff_cmd_baton): Change file handles to streams.

(diff_content_changed): Use streams, and create a temp file for interfacing

with an external diff tool.

(diff_file_deleted): Update params.

(svn_client_diff6): Renamed and updated from svn_client_diff5().

(svn_client_diff_peg6): Renamed and updated from svn_client_diff_peg5().

  1. … 3 more files in changeset.
Fix a warning about a loss of const-qualifiers, due to change in r1146492.

Found by: danielsh

* subversion/libsvn_client/deprecated.c:

(info_from_info2): add a cast and a comment

Fix a doc string and move some related deprecated functions.

* subversion/include/svn_client.h

(svn_proplist_receiver_t): Correct and improve the doc string.

* subversion/libsvn_client/util.c

(string_hash_dup, svn_client_proplist_item_dup): Move these deprecated

functions from here ...

* subversion/libsvn_client/deprecated.c

(string_hash_dup, svn_client_proplist_item_dup): ... to here.

  1. … 2 more files in changeset.
Make the 'info' apis capable of returning excluded paths. Do this by

adding two boolean arguments for api users to make the retrieval of

actual only (tree conflicts) and excluded nodes optional.

* subversion/include/private/svn_wc_private.h

(svn_wc__get_info): Add two arguments and order arguments following the

wc standard argument ordering.

* subversion/include/svn_client.h

(svn_client_info3): Add two arguments. Order arguments following the new


* subversion/libsvn_client/deprecated.c

(svn_client_info2): Filter excluded nodes.

* subversion/libsvn_client/info.c

(svn_client_info3): Update caller.

* subversion/libsvn_wc/info.c

(build_info_for_entry): Rename to ...

(build_info_for_node): ... this. Return a NULL info for server excluded and

not-present nodes, to avoid breaking out of the loop.

Remove two unneeded db calls for calling info on a deleted node.

(found_entry_baton): Add two booleans and a result pool for the hash table.

(info_found_node_callback): Make actual only check optional and fix

pool usage. (Paths were stored in an iterpool). Skip

(svn_wc__get_info): Update caller. Pass the right kind to depth_includes.

* subversion/svn/info-cmd.c

(svn_cl__info): Update caller.

Partially based on a few patches from Noorul Islam.

(I'll commit his new testcase in a separate commit)

  1. … 5 more files in changeset.