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

Changeset 1805623 is being indexed.

Add a new --accept recommended option to 'svn'.

--accept recommended works like --accept postpone, except that tree

conflicts for which a recommended resolution option exists are

automatically resolved.

* subversion/svn/cl.h

(SVN_CL__ACCEPT_RECOMMENDED): Declare (as string: "recommended").

* subversion/svn/conflict-callbacks.c

(svn_cl__accept_from_word): Handle SVN_CL__ACCEPT_RECOMMENDED and provide

the shorthand form 'r'.

* subversion/svn/svn.c

(svn_cl__options): Update --accept option help text.

* subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout:

Update expected help output.

  1. … 3 more files in changeset.
Make svn --non-interactive use recommended tree conflict resolution

options by default. Previously, it would postpone such conflicts.

This mode is not yet exposed as a separate --accept option argument.

Perhaps we will do that later.

* subversion/svn/cl.h

(svn_cl__accept_recommended): Declare.

* subversion/svn/conflict-callbacks.c

(svn_cl__resolve_conflict): Add support for svn_cl__accept_recommended.

* subversion/svn/merge-cmd.c

(conflict_func_merge_cmd): Add svn_cl__accept_recommended to the switch

statement (as an invalid option to use in this context).

* subversion/svn/svn.c

(sub_main): Default to svn_cl__accept_recommended if --non-interactive.

  1. … 3 more files in changeset.
Add a new --vacuum-pristines option to 'svn cleanup'.

This option toggles the 'vacuum_pristines' API flag of svn_client_vacuum()

and allows cleaning up the pristine store with a working copy lock held.

It avoids a risk of working copy corruption due to concurrent access by

multiple clients. Because 'svn cleanup' ignores and removes any locks in

its default mode, using that mode to clean up pristines is subtly unsafe.

Adding this feature is cheap since the libsvn_client API already provides it.

The command line client just didn't expose it yet.

* subversion/svn/cl.h

(svn_cl__opt_state_t): Declare vacuum_pristines flag.

* subversion/svn/cleanup-cmd.c

(svn_cl__cleanup): Pass the vacuum_pristines flag to svn_client_vacuum().

* subversion/svn/svn.c

(svn_cl__longopt_t): Add opt_vacuum_pristines.

(svn_cl__opt_state_t): Document --vacuum-pristines.

  1. … 2 more files in changeset.
Reintroduce the svn_client_conflict_walk() API.

This new implementation is based on the conflict walk we implemented in

the 'svn' command line client. The command line client now relies on the

client library to walk conflicts in the working copy.

This avoids forcing other clients to reimplement the status walk logic which

is rather complex since it needs to handle new tree conflicts which may appear

when another tree conflict gets resolved. It should make the transtion to the

new conflict API easier for third party clients since the new resolver can now

be invoked in a similar way to the old libsvn_wc conflict handler.

Suggested by: ivan

(during the October 2016 hackathon in Berlin)

* subversion/include/svn_client.h

(svn_client_conflict_walk_func_t, svn_client_conflict_walk): Declare.

* subversion/libsvn_client/conflicts.c

(conflict_status_walker_baton, tree_conflict_collector,

handle_tree_conflict_resolution_failure, conflict_status_walker,

svn_client_conflict_walk): New implementation of a conflict status walker.

Based on, and very similar to, code from svn/resolve-cmd.c.

* subversion/svn/cl.h,


(svn_cl__resolve_conflict): Remove now unused output paramer 'resolved',

and redundant parameter config (ctx->config can be used instead).

* subversion/svn/resolve-cmd.c

(conflict_status_walker_baton): Replace with...

(conflict_walker_baton): ... this, which contains only a subset of the fields.

(tree_conflict_collector, handle_tree_conflict_resolution_failure,

conflict_status_walker, walk_conflicts): Remove.

(conflict_walker): A callback for the new conflict walker.

(svn_cl__walk_conflicts): Use the new conflict walker provided by the

libsvn_client library instead of the previous inline implementation.

  1. … 4 more files in changeset.
Remove two hacks from the conflict resolver API that were added to

allow handling --accept=mine-conflict | working for tree conflicts

and --accept=working for binary text conflicts.

This patch makes the command-line client fully responsible for choosing

the appropriate conflict option id, and keeps the various new APIs

such as svn_client_conflict_text_resolve_by_id() simple and doing

just what they were told to do.

Discussed in

* subversion/libsvn_client/conflicts.c


svn_client_conflict_tree_resolve_by_id): Remove hacks from these


* subversion/svn/conflict-callbacks.c

(resolve_conflict_by_accept_option): Inline parts of this function that

handle svn_cl__accept_edit and svn_cl__accept_launch ...

(svn_cl__resolve_conflict): Accept svn_cl__accept_t by value,

drop the option id argument. Pick the appropriate option id based on

the passed-in svn_cl__accept_t argument. Prompt the user if there is

no option or if the option did not apply.

* subversion/svn/resolve-cmd.c

(svn_cl__resolve): Handle unsupported --accept [--non-interactive] cases

in this function.

(svn_cl__walk_conflicts): Remove the is_resolve_cmd argument. Don't

map the --accept option to option id here, as we will do it in the

svn_cl__resolve_conflict() function. Adjust calls to walk_conflicts()

and svn_cl__resolve_conflict().

(walk_conflicts): Remove option_id argument, accept svn_cl__accept_t

by value.

(conflict_status_walker): Adjust call to svn_cl__resolve_conflict().

(conflict_status_walker_baton): Remove option_id field, store

accept_which field by value.

* subversion/svn/merge-cmd.c

(svn_cl__merge): Adjust call to svn_cl__walk_conflicts().

* subversion/svn/switch-cmd.c

(svn_cl__switch): Adjust call to svn_cl__walk_conflicts().

* subversion/svn/update-cmd.c

(svn_cl__update): Adjust call to svn_cl__walk_conflicts().

* subversion/svn/cl.h

(svn_cl__resolve_conflict, svn_cl__walk_conflicts): Update declarations.

  1. … 6 more files in changeset.
Make 'svn update' treat incoming add vs. local add as a tree conflict again.

Back in r862331 the update editor was taught to automatically merge local

additions with incoming additions. This was the default behaviour until now.

I expect the conflict resolver to offer better support for this eventually.

To prepare for that, disable this automatic merge during updates by default.

This is easy to do since svn_client_update() provides a flag for it.

Add a new command line option to enable the old behaviour, mainly to keep

testing the old behaviour in our test suite. The old behaviour must not be

broken, according to our API compatibility guarantees.

'svn switch' was changed similarly in r862331, but has already been changed

to flag a tree conflict by default long ago.

* subversion/svn/cl.h

(adds_as_modification): Add new option flag.

(svn_cl__longopt_t): Add opt_adds_as_modification.

(svn_cl__options): Define '--adds-as-modification'.

(svn_cl__cmd_table): Add '--adds-as-modification' to 'svn update'.

(sub_main): Handle '--adds-as-modification' option.

* subversion/svn/update-cmd.c

(svn_cl__update): Pass new 'adds_as_modification' flag to svn_client_update().

* subversion/tests/cmdline/

(update_with_obstructing_additions, update_conflict_details): Pass

'--adds-as-modification' to 'svn update' to keep testing the old behaviour.

* subversion/tests/cmdline/

(upgrade_not_present_replaced): Adjust expected output and status for an

update which now raises an 'add vs add' tree conflict.

  1. … 4 more files in changeset.
Move signal handling and cancellation code to libsvn_subr to avoid

duplication in multiple programs.

* subversion/include/private/svn_cmdline_private.h



svn_cmdline__get_cancellation_signal): New.

* subversion/libsvn_subr/cmdline.c

(signal_handler, check_cancel,



svn_cmdline__get_cancellation_signal): New, code from svn.c and svnadmin.c.

* subversion/svn/cl.h

(svn_cl__check_cancel): Change type to pointer.

* subversion/svn/svn.c

(svn_cl__check_cancel): Change type to pointer.

(signal_handler): Remove.

(sub_main, main): Call new functions.

* subversion/svnadmin/svnadmin.c

(check_cancel): Change type to pointer.

(signal_handler, setup_cancellation_signalsl): Remove.

(repos_notify_handler, subcommand_recover, subcommand_upgrade,

sub_main, main): Call new functions.

* subversion/svnbench/cl.h

(svn_cl__check_cancel): Change type to pointer.

* subversion/svnbench/svnbench.c

(svn_cl__check_cancel): Change type to pointer.

(signal_handler): Remove.

(sub_main, main): Call new functions.

* subversion/svnfsfs/svnfsfs.h

(check_cancel): Change type to pointer.

* subversion/svnfsfs/svnfsfs.c

(check_cancel): Change type to pointer.

(signal_handler, setup_cancellation_signals): Remove.

(sub_main, main): Call new functions.

* subversion/svnlook/svnlook.c

(check_cancel): Change type to pointer.

(signal_handler): Remove.

(sub_main, main): Call new functions.

* subversion/svnrdump/svnrdump.c

(check_cancel): Change type to pointer.

(signal_handler): Remove.

(sub_main, main): Call new functions.

* subversion/svnsync/svnsync.c

(check_cancel): Change type to pointer.

(signal_handler): Remove.

(sub_main, main): Call new functions.

  1. … 11 more files in changeset.
Remove the svn_cl__conflict_func_interactive() callback.

The command line client will now start the conflict resolver by itself if

an update, merge, or switch operation flags conflicts in the working copy.

Before this commit it was relying on the libraries to do so. This finally

gives full control over conflict resolution to the client and paves the

way for future enhancements of the conflict resolver.

Only one use case of the libsvn_wc conflict callback remains. This is

required for supporting 'svn merge --accept' during merges which perform

multiple editor drives. A better solution would be changing the

svn_client_merge API to allow the client to get away without the conflict

callback. I've left this for future work.

* subversion/svn/cl.h

(svn_cl__conflict_stats_get_paths): Declare this new function which is

involved in keeping existing conflict resolution behaviour intact.

The client already records newly conflicted paths as part of conflict

accounting. We use this list of paths to run the conflict resolver on

the newly conflicted paths only, rather than running it over the entire

working copy as 'svn resolve' would do.


svn_cl__conflict_func_interactive): Remove declaration. Now unused.

(svn_cl__walk_conflicts): Declare this new function which makes the

working copy walker logic of 'svn resolve' available to subcommands

which now need it as well.

* subversion/svn/conflict-callbacks.c


svn_cl__conflict_func_interactive): Remove.

* subversion/svn/merge-cmd.c

(conflict_func_merge_cmd_baton, conflict_func_merge_cmd): Add this

temporary implementation of svn_wc_conflict_resolver_func2_t to

avoid breaking 'svn merge --accept'. Note that we cannot support the

'edit' and 'launch' accept options anymore, so these now map to 'postpone'.

This is a small CLI interface change relative to 1.9.

(svn_cl__merge): Install the above conflict callback if necessary.

Invoke the interactive conflict resolver if necessary.

* subversion/svn/notify.c

(svn_cl__conflict_stats_get_paths): Implement.

* subversion/svn/resolve-cmd.c

(svn_cl__walk_conflicts): Implement. Partly split out of svn_cl__resolve().

* subversion/svn/svn.c

(sub_main): Do not install a libsvn_wc conflict callback by default.

* subversion/svn/switch-cmd.c

(svn_cl__switch): Invoke the interactive conflict resolver if necessary.

* subversion/svn/update-cmd.c

(svn_cl__update): Invoke the interactive conflict resolver if necessary.

  1. … 7 more files in changeset.
Continue removing svn_cl__interactive_conflict_baton_t from 'svn' conflict code.

Make svn_cl__resolve_conflict() accept new parameters instead of grabbing the

same data from the client context's conflict callback baton.

* subversion/svn/cl.h

(svn_cl__conflict_stats_t): Move typedef upwards so svn_cl__cmd_baton_t

can use it.

(svn_cl__cmd_baton_t): Add 'conflict_stats' here so we can pass it to

subcommands without relying on the conflict callback baton.

(svn_cl__resolve_conflict): Update declaration.

* subversion/svn/conflict-callbacks.c

(svn_cl__resolve_conflict): Add output arguments 'accept_which', 'quit',

'external_failed', and 'printed_summary'. Add parameters 'editor_cmd',

'config', 'path_prefix', 'pb', and 'conflict_stats'. Use these parameters

instead of accessing the conflict callback baton in the client context.

* subversion/svn/resolve-cmd.c

(conflict_status_walker_baton): Add new fields 'accept_which', 'quit',

'external_failed', 'printed_summary', 'editor_cmd', 'config',

'path_prefix', 'pb', and 'conflict_stats'.

(conflict_status_walker): Update this caller of svn_cl__resolve_conflict().

(walk_conflicts): Add new parameters 'accept_which', 'quit',

'external_failed', 'printed_summary', 'editor_cmd', 'config',

'path_prefix', 'pb', and 'conflict_stats'.

Initialize the conflict walker baton with this data.

(svn_cl__resolve): Get conflict stats from subcommand baton.

Allocate and provide new arguments for svn_cl__resolve_conflict()

and walk_conflicts().

* subversion/svn/svn.c

(sub_main): Store a pointer to conflicts stats in command_baton.

  1. … 3 more files in changeset.
Convert more of the 'svn' client to new svn_client_conflict APIs.

Replace use of svn_wc_conflict_choice_t with svn_client_conflict_option_id_t.

* subversion/svn/cl.h

(svn_cl__resolve_conflict): Use conflict option ID. Swap parameters so

that client context comes after other parameters.

* subversion/svn/conflict-callbacks.c

(svn_cl__resolve_conflict): Use conflict option ID. Convert to the old

libsvn_wc type where calling a libsvn_wc function.

* subversion/svn/resolve-cmd.c

(conflict_status_walker_baton, conflict_status_walker, walk_conflicts,

svn_cl__resolve): Use conflict option IDs.

  1. … 2 more files in changeset.
Implement a conflict walker directly in the 'svn' client.

This is needed to keep moving the client over to the new svn_client_conflict

API, and as a result keep improving this API.

Before this change, the 'svn' client was forced to resolve conflicts by

passing a legacy conflict result back to libsvn_wc, since the resolution

process was driven from within libsvn_wc.

Now, the client drives the resolution process without using the conflict

callback. It relies on 'status' and some private libsvn_wc APIs for this

purpose. Use of private APIs will go away once more use of the public

svn_client_conflict API is implemented.

There may be some fallout in interactive conflict resolution mode since it

cannot be automatically tested. However, the regression test suite passes.

If you're using a trunk client and run into problems during interactive

conflict resolution, please let me know.

* subversion/svn/cl.h

(svn_cl__resolve_conflict): Declare. No docstring yet since I'm not sure

whether this is going to stay around very long.

* subversion/svn/conflict-callbacks.c

(svn_cl__resolve_conflict): Implement.

* subversion/svn/resolve-cmd.c

(conflict_status_walker_baton, tree_conflict_collector,

conflict_status_walker, walk_conflicts): Implement a conflict walker based

on similar code in libsvn_wc.

(svn_cl__resolve): Use the new conflict APIs instead of svn_client_resolve().

  1. … 2 more files in changeset.
Replace macros svn_client_conflict_get_src_left_version() and

svn_client_conflict_get_src_right_version() with a new set of

functions returning the same information. Replace some use of

the svn_wc_conflict_version_t structure with a few individual

parameters and variables.

* subversion/include/svn_client.h



svn_client_conflict_get_incoming_new_repos_location): Declare.


svn_client_conflict_get_src_right_version): Delete.

* subversion/libsvn_client/resolved.c



svn_client_conflict_get_incoming_new_repos_location): Implement.

* subversion/svn/cl-conflicts.c


add_conflict_version_xml, append_tree_conflict_info_xml): Update callers.

* subversion/svn/cl.h

(svn_cl__node_description): Expect several input parameters instead of

a single svn_wc_conflict_version_t struct. Otherwise, callers would now

have to create a temporary struct containing the same information.

* subversion/svn/conflict-callbacks.c

(handle_tree_conflict): Update caller.

* subversion/svn/info-cmd.c

(print_info): Update caller.

* subversion/svn/util.c

(svn_cl__node_description): Use several input parameters instead of struct.

  1. … 6 more files in changeset.
Merged the svn-info-detail branch to trunk.

This implements the --show-detail option for the 'svn info' command.

* subversion/svn/cl.h

(svn_cl__opt_state_t): New option show_item.

(svn_cl__simcheck_context_t): New forward-declared struct.

(svn_cl__simcheck_t): New structure.

(svn_cl__similarity_check): New client-local function.

* subversion/svn/info-cmd.c

(relative_url): New; constructs a relative URL.

(info_item_t): New enumeration.

(info_item_map_t): New struct.

(info_item_map): Static array of known keywords for --show-item.

(info_item_map_len): New.

(print_info_baton_t): New; baton for the various print_info functions.

Replaces the former use of just the path_prefix string as the baton.

(find_print_what): New; converts the --show-item argument to its

equivalent info_item_t enumeration value.

(print_info_xml, print_info): Call relative_url instead of

maintaining the same logic in two places.

Adjust to match the new baton type.

(print_info_item): New handler for 'svn info --show-item'.

(svn_cl__info): Initialize the receiver baton and handle the

--show-item and --no-newline options, including checking valid

option combinatinos. Change the texts of the parsing-error messages

to show the complete offending option names.

* subversion/include/private/svn_string_private.h

(SVN_STRING__SIM_RANGE_MAX): New; parametrized the similarity range.

(svn_cstring__similarity): Update docstring and adjust return type.

(svn_string__similarity): Adjust return type.

* subversion/libsvn_subr/string.c

(svn_cstring__similarity): Adjust return type.

(svn_string__similarity): Adjust return type. Change the result range.

* subversion/svn/props.c

(simprop_context_t, simprop_t): Removed in favour of the new

svn_cl__simcheck_context_t and svn_cl__simcheck_t.

(simprop_key_diff, simprop_compare): Moved to similarity.c.

(svn_cl__check_svn_prop_name): Use the new similarity check API.

* subversion/svn/similarity.c: New file.

(svn_cl__simcheck_context_t): Defined here.

(simcheck_key_diff): Replaces simprop_key_diff from props.c.

(simcheck_compare): Replaces simprop_compare from props.c.

(svn_cl__similarity_check): Implement.

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

(test_string_similarity): Adjust test case to account for the

changed range of the result of svn_string__similarity.

* subversion/tests/cmdline/





info_item_failures): New test cases.

(test_list): Updated.

  1. … 9 more files in changeset.
Deprecate the --strict command-line option. It was only used in one

place to actually mean --no-newline, so use the latter instead and

make --strict an alias for backwards compatibility.

* subversion/svn/cl.h

(svn_cl__opt_state_t): Removed member 'strict'.

* subversion/svn/svn.c

(svn_cl__longopt_t): Note that opt_strict is deprecated.

(svn_cl__options): Change help text for --strict to DEPRECATED.

(svn_cl__cmd_table): Make propget accept --no-newline and change

the docs for --strict to tell users that it's deprecated.

(sub_main): Interpret --strict exactly as --no-newline.

* subversion/svn/propget-cmd.c

(svn_cl__propget): Replace --strict with --no-newline.

* subversion/tests/cmdline/ (checkout_peg_rev_date),

subversion/tests/cmdline/ (peg_rev_base_working,


subversion/tests/cmdline/ (propvalue_normalized),

subversion/tests/cmdline/ (propset_root_internal),

subversion/tests/cmdline/ (cat_keyword_expansion):

Replace --strict with --no-newline.

  1. … 7 more files in changeset.
Merge the removal of 'svn youngest' from the svn-info-detail branch.

* subversion/svn/cl.h

(svn_cl__youngest): Remove declaration.

* subversion/svn/youngest-cmd.c: Removed file.

(svn_cl__youngest): Gone.

* subversion/svn/svn.c

(svn_cl__cmd_table): Remove the definition of the 'svn youngest' subcommand.

* subversion/tests/cmdline/

(basic_youngest): Removed.

(test_list): Removed entry for basic_youngest.

* subversion/tests/cmdline/getopt_tests_data/svn--help_stdout,


Adjust expected output for

* tools/client-side/bash_completion

(_svn): Remove youngest.

  1. … 7 more files in changeset.
Merge the pin-externals branch to trunk.

The discussion thread start in this post:

has come to a consensus that the branch can be merged and additional

development of this feature can happen on trunk.

This merge adds a '--pin-externals' option to 'svn copy'.

This option enables automated pinning of URLs in svn:externals properties

during copy operations (issue #1258).

--pin-externals : pin externals with no explicit revision to their

last-changed revision (recommended when tagging)

This feature makes the contrib script unnecessary.

Externals are "pinned" by adding a peg revision to the external's source URL.

For example, the external definition:

^/foo/bar ext_bar

might become:

^/foo/bar@400 ext_bar

This table shows which revision is used for pinning:

copy source: working copy (WC) REPOS


copy WC | external's WC BASE rev | external's repos HEAD rev |

dest: |------------------------+---------------------------+

REPOS | external's WC BASE rev | external's repos HEAD rev |


An external that is already pinned is left as-is.

Please see the branch log for details about these changes.

  1. … 22 more files in changeset.
For non-interactive mode, allow fine-grained control over which SSL

certificate failures are considered fatal and which may be ignored.

The --trust-server-cert option only accepts certificates signed by an

unknown CA, and rejects certificates which fail for other reasons.

However, in practice, people run into broken SSL configurations that

trigger other failure conditions such as hostname/CN mismatch, expired

certs, etc. Sometimes they are not in a position to fix the problem themselves

and can't get work done (writing scripts) since SVN refuses to operate.

This topic is one of the most discussed issues in the #svn IRC channel.

Somewhat less so on the users@ mailing lists, though it also occurs there.

There is no real reason to prefer one kind of failure condition over

any other. An invalid cert is an invalid cert, regardless of why it fails

validation. Ultimately, it is up to users to waive trust in SSL when it

gets in the way in a particular situation. We should not be making this

decision for them.

Deprecate the --trust-server-cert option and add the following new options

to 'svn', exposing all possible failure modes the underlying API can handle:

--trust-unknown-ca : with --non-interactive, accept SSL server

certificates from unknown certificate authorities

--trust-cn-mismatch : with --non-interactive, accept SSL server

certificates even if the server hostname does not

match the certificate's common name attribute

--trust-expired : with --non-interactive, accept expired SSL server


--trust-not-yet-valid : with --non-interactive, accept SSL server

certificates from the future

--trust-other-failure : with --non-interactive, accept SSL server

certificates with failures other than the above

* subversion/include/svn_cmdline.h

(svn_cmdline_create_auth_baton2): Declare and document new parameters.

(svn_cmdline_create_auth_baton): Deprecate.

* subversion/libsvn_subr/cmdline.c

(trust_server_cert_non_interactive_baton): New baton.

(ssl_trust_unknown_server_cert): Rename to ...

(trust_server_cert_non_interactive): .. this and implement generic

validation failure checks according to flags passed in baton.

(svn_cmdline_create_auth_baton): Move to libsvn_subr/deprecated.c.

(svn_cmdline_create_auth_baton2): Implement new revision of this API with

new options trust_server_cert_unknown_ca, trust_server_cert_cn_mismatch,

trust_server_cert_expired, trust_server_cert_not_yet_valid, and


* subversion/libsvn_subr/deprecated.c

(svn_cmdline_create_auth_baton): Implement as wrapper around


* subversion/svn/cl.h

(svn_cl__opt_state_t): Add new options trust_server_cert_unknown_ca,

trust_server_cert_cn_mismatch, trust_server_cert_expired,

trust_server_cert_not_yet_valid, and trust_server_cert_other_failure.


* subversion/svn/svn.c

(svn_cl__longopt_t): Add new options opt_trust_server_cert_unknown_ca,

opt_trust_server_cert_cn_mismatch, opt_trust_server_cert_expired,

opt_trust_server_cert_not_yet_valid, opt_trust_server_cert_other_failure.

(svn_cl__options): Add options and help text for --trust-unknown-ca,

--trust-cn-mismatch, --trust-expired, --trust-not-yet-valid, and


(svn_cl__global_options): Add the new options here.

(sub_main): Process new options and use svn_cmdline_create_auth_baton2().

* subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout:

Adjust expected output.

  1. … 5 more files in changeset.
Undo the introduction of svn_wc_conflict_description3_t.

Instead of revving svn_wc_conflict_description2_t ("desc2"), we can extend the

struct with new fields or a pointer to private data to be accessed via functions,

and keep the existing fields as they are now.

This approach avoids an unwieldy cascade of changes to callbacks and other API

elements which already use desc2. This commit does not add new fields or private

data for desc2 -- that is future work.

Discussed with philip, julianfoad, rhuijben, and breser.

* subversion/include/private/svn_wc_private.h

(svn_wc__get_tree_conflict, svn_wc__add_tree_conflict): Switch back to desc2.

(svn_wc__cd3_to_cd2, svn_wc__cd3_array_to_cd2_array ): Remove declaration.

* subversion/include/svn_wc.h

(svn_wc_conflict_description_private_t): New typedef.

(svn_wc_conflict_description3_t): Remove.

(svn_wc_conflict_description2_t): Enhance documentation based on improvements

made for desc3. Extend this structure with a pointer to private data.





svn_wc_conflict_resolver_func3_t): Un-declare.




svn_wc_conflict_resolver_func2_t): Un-deprecate.

(svn_wc_info_t): Remove 'conflicts2' field.

* subversion/libsvn_client/merge.c

(merge_dir_baton_t): Document that 'new_tree_conflicts' array now has

desc2 elements again.

(record_tree_conflict, merge_file_opened, merge_dir_opened): Use desc2.

* subversion/libsvn_wc/conflicts.c

(local_change_map): Rename back to reason_map for consistency.

(incoming_change_map): Rename back to action_map for consistency.



svn_wc__conflict_read_tree_conflict): Rename local_change and

incoming_change parameters back to reason and action for consistency.

(generate_propconflict, resolve_text_conflict, read_text_conflict_desc,

svn_wc__conflict_invoke_resolver, read_prop_conflict_descs,

svn_wc__read_conflicts, conflict_status_walker): Use desc2.

(eval_text_conflict_func_result): Rename 'merged_abspath' parameter back to

'merged_file' for consistency. Use desc2.

* subversion/libsvn_wc/deprecated.c

(svn_wc__status2_from_3): Use desc2.



svn_wc_conflict_description_create_tree2): Moved back to libsvn_wc/util.c.

* subversion/libsvn_wc/entries.c

(read_one_entry, write_entry): Use desc2.

* subversion/libsvn_wc/info.c

(svn_wc_info_dup, build_info_for_node, svn_wc__get_info): Use desc2 and drop

support for removed 'conflicts2' member of svn_wc_info_t.

* subversion/libsvn_wc/tree_conflicts.c

(svn_wc__deserialize_conflict, svn_wc__serialize_conflict,

svn_wc__add_tree_conflict, svn_wc__get_tree_conflict): Use desc2.

* subversion/libsvn_wc/tree_conflicts.h


svn_wc__deserialize_conflict): Tweak declarations for desc2.

* subversion/libsvn_wc/upgrade.c

(read_tree_conflicts, migrate_single_tree_conflict_data,

svn_wc__upgrade_conflict_skel_from_raw): Use desc2.

* subversion/libsvn_wc/util.c





svn_wc__cd3_array_to_cd2_array, svn_wc__cd3_to_cd2): Remove.



svn_wc_conflict_description_create_tree2): Move back here

from libsvn_wc/deprecated.c

* subversion/libsvn_wc/wc.h

(svn_wc__read_conflicts): Change mention in docstring back to desc2.

* subversion/svn/cl-conflicts.c



append_tree_conflict_info_xml, svn_cl__append_conflict_info_xml): Use desc2.

* subversion/svn/cl-conflicts.h



svn_cl__append_conflict_info_xml): Change declarations for desc2.

* subversion/svn/cl.h

(svn_cl__conflict_func_interactive): Change declaration back to desc2.

* subversion/svn/conflict-callbacks.c

(show_diff, show_conflicts, merge_prop_conflict, show_prop_conflict,

edit_prop_conflict, handle_text_conflict, handle_prop_conflict,

handle_tree_conflict, handle_obstructed_add,

conflict_func_interactive): Use desc2. In handle_prop_conflict, restore

workaround for wrongly filled in fields in desc2 for now.

* subversion/svn/info-cmd.c

(print_info_xml, print_info): Use desc2.

* subversion/svn/status.c

(print_status): Use desc2.

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

(compare_version, compare_file_content, compare_prop_conflict,

tree_conflict_create, test_deserialize_tree_conflict,

test_read_write_tree_conflicts, test_serialize_tree_conflict): Use desc2.

* tools/dev/svnraisetreeconflict/svnraisetreeconflict.c

(raise_tree_conflict): Use desc2.

  1. … 19 more files in changeset.
Use svn_wc_conflict_description3_t throughout the 'svn' command line client.

* subversion/svn/cl-conflicts.c



append_tree_conflict_info_xml, svn_cl__append_conflict_info_xml): Use

svn_wc_conflict_description3_t instead of svn_wc_conflict_description2_t.

* subversion/svn/cl-conflicts.h



svn_cl__append_conflict_info_xml): Update declarations to use


* subversion/svn/cl.h

(svn_cl__conflict_func_interactive): Update declaration to use


* subversion/svn/conflict-callbacks.c

(show_diff, show_conflicts, merge_prop_conflict, show_prop_conflict,

edit_prop_conflict, handle_tree_conflict, handle_prop_conflict,

handle_tree_conflict, handle_obstructed_add, conflict_func_interactive):

Use svn_wc_conflict_description3_t instead of svn_wc_conflict_description2_t.

In handle_prop_conflict() we can drop a workaround that was necessary with

the old conflict descriptor.

* subversion/svn/info-cmd.c

(print_info_xml, print_info): Use svn_wc_conflict_description3_t instead of


* subversion/svn/status.c

(print_status): Update caller.

  1. … 5 more files in changeset.
Cleanup unused code related move heuristic detection from command line


* subversion/svn/cl.h

(svn_cl__opt_state_t): Remove auto_moves member.

* subversion/svn/svn.c

(svn_cl__longopt_t): Remove opt_auto_moves.

(svn_cl__options): Remove "--auto-moves" command line option.

(sub_main): Do not handle opt_auto_moves.

  1. … 1 more file in changeset.
Implement cancellation in a bit of libsvn_client diff/merge handling to avoid

using deprecated functions... and to allow cancelling.

* subversion/svn/cl.h

(svn_cl__merge_file): Add cancel arguments and move single output argument

to the start of the argument list.

* subversion/svn/conflict-callbacks.c

(show_diff): Add cancel arguments. Update caller.

(handle_text_conflict): Update caller.

* subversion/svn/file-merge.c

(svn_cl__merge_file): Add cancel arguments. Move output argument.

Update caller.

  1. … 2 more files in changeset.
Introduce 'svn auth', a subcommand for managing the authentication cache

which supersedes the 'svnauth' tool. Currently, cached credentials can be

listed and removed. In the future, this subcommand could also provide a

mechanism to add credentials to the cache.

* subversion/svn/auth-cmd.c: New file based on subversion/svnauth/svnauth.c.

* subversion/svn/cl.h

(svn_cl__opt_state_t): Add 'show_passwords' option.

(svn_cl__auth): Declare.

* subversion/svn/svn.c

(svn_cl__longopt_t): Add 'opt_show_passwords'.

(svn_cl__options): The --remove option is also used by 'svn auth'.

Adjust its documentation accordingly. Add a --show-passwords option

for use by 'svn auth'.

(svn_cl__cmd_table): Add 'svn auth' subcommand.

(sub_main): Handle new --show-passwords option.

* subversion/tests/cmdline/getopt_tests_data/svn--help_stdout,


Adjust expected output.

  1. … 4 more files in changeset.
Source code tidying. Tweak the calls to svn_cl__try: the argument list

sentinel value should be 0 (or alternatively APR_SUCCESS) rather than

SVN_NO_ERROR, since the latter is nominally of type pointer-to-svn_error_t,

although currently defined as plain 0.

* subversion/svn/cl.h,


(svn_cl__try): Adjust the doc string.

* subversion/svn/add-cmd.c

(svn_cl__add): Use 0 for the sentinel argument to svn_cl__try.

* subversion/svn/cat-cmd.c

(svn_cl__cat): Same.

* subversion/svn/changelist-cmd.c

(svn_cl__changelist): Same.

* subversion/svn/proplist-cmd.c

(svn_cl__proplist): Same.

* subversion/svn/status-cmd.c

(svn_cl__status): Same.

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

Use the latest log client API in our command line client to make it actually

display moves as such.

This also adds the "--auto-moves" CL option and enables it for 'svn log'.

There is no option to force 1.8-style move behavior. If necessary, we can

easily add that in the future.

* subversion/svn/cl.h

(svn_cl__opt_state_t): add auto_moves flag for the new CL option

* subversion/svn/log-cmd.c

(svn_cl__log): select move behavior option based on new flag;

call updated API

* subversion/svn/svn.c


svn_cl__option): declare new option

(svn_cl__cmd_table): enable new option to 'svn log'

(sub_main): handle new CL option

* subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout

(): update expected --help output

  1. … 3 more files in changeset.
Fix issue 4398, relative path handling in status.

* subversion/svn/cl.h

(svn_cl__print_status, svn_cl__print_status_xml): Replace cwd parameter

with two target parameters.

* subversion/svn/status-cmd.c

(struct status_baton): Replace cwd member with two target members.

(struct status_cache): Add two target members.

(print_status_normal_or_xml): Pass new parameters.

(print_status): Cache target parameters.

(svn_cl__status): Store target rather than cwd, use cached target


* subversion/svn/status.c

(make_relpath): Replace relative parameter with two target parameters.

(print_status): Pass new parameters.

(svn_cl__print_status, svn_cl__print_status_xml): Replace cwd parameter

with two target parameters.

* subversion/tests/cmdline/

(status_path_handling): Remove XFAIL.

  1. … 3 more files in changeset.
Finish issue #4299 ("Remote version of 'svnlook youngest'") by

introducing 'svn youngest'.

* subversion/svn/cl.h

(svn_cl__opt_state_t): Add no_newline member.

(): Add svn_cl__youngest to the command procedure list.

* subversion/svn/svn.c

(svn_cl__options): Add --new-line option.

(svn_cl__longopt_t): Add opt_no_newline to svn_cl__longopt_t.

(svn_cl__cmd_table): Add 'youngest' entry.

(sub_main): Add handler for opt_no_newline.

* subversion/svn/youngest-cmd.c

(svn_cl__youngest): implement the 'youngest' sub command handler.

* subversion/tests/cmdline/

(basic_youngest): New test.

(test_list): Add reference to new test.

Patch by: Masaru Tsuchiyama <m.tmatma{_AT_}>

(Tweaked be me.)

  1. … 3 more files in changeset.
Add a new --remove-ignored option to 'svn cleanup', replacing --no-ignore.

Previously, --no-ignore was only valid with --remove-unversioned. The new

--remove-ignored option allows removing ignored items separately from

non-ignored unversioned items.

Suggested by: gstein

* subversion/include/svn_client.h

(svn_client_cleanup2): Rename 'no_ignore' parameter to


* subversion/libsvn_client/cleanup.c

(remove_unversioned_items_baton): Add 'remove_unversioned_items' member.

(remove_unversioned_items): Only remove unversioned items if the

'remove_unversioned_items' is set in the baton.

(svn_client_cleanup2): Account for renamed parameter and new baton member.

Run the delete-items status walk if either unversioned or ignored items

are to be removed, not just for unversioned items.

* subversion/svn/cl.h

(svn_cl__opt_state_t): Add remove_ignored.

* subversion/svn/cleanup-cmd.c

(svn_cl__cleanup): Replace handling of --no-ignore with --remove-ignored.

* subversion/svn/svn.c

(svn_cl__longopt_t): Add opt_remove_ignored.

(svn_cl__options): Add --remove-ignored.

(svn_cl__cmd_table): Adjust 'svn help cleanup' output.

(sub_main): Handle --remove-ignored.

* subversion/tests/cmdline/

(cleanup_unversioned_items): Replace --no-ignore with --remove-ignored.

  1. … 5 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.
Follow-up to 1489203: Remove unnecessary check for branches ancestry from

command line client. All required checks are performed in libsvn_client.

* subversion/svn/cl.h

* subversion/svn/util.c

(svn_cl__check_related_source_and_target): Remove

* subversion/svn/merge-cmd.c

* subversion/svn/mergeinfo-cmd.c

(run_merge, svn_cl__mergeinfo): Remove call to


  1. … 3 more files in changeset.
Implement '--log' option for 'svn mergeinfo --show-revs' subcommand to print

revisions log message, author and date.

Suggested by: lgo

* subversion/svn/cl.h

(svn_cl__opt_state_t): Add mergeinfo_log member.

* subversion/svn/mergeinfo-cmd.c

(): Include svn_compat.h and svn_props.h.

(SEP_STRING, print_log_details): New.

(mergeinfo_log): New, mostly extracted from svn_cl__mergeinfo().

(svn_cl__mergeinfo): Call mergeinfo_log().

* subversion/svn/svn.c

(svn_cl__longopt_t): Add opt_mergeinfo_log.

(svn_cl__options): Add description for '--log' option.

(svn_cl__cmd_table): Add opt_mergeinfo_log to mergeinfo subcommand.

(sub_main): Handle '--log' option.

* subversion/tests/cmdline/

(mergeinfo_log): New test.

(test_list): Add mergeinfo_log.

  1. … 3 more files in changeset.