[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [PATCH] Resolve issue #4647 on trunk (v4)

From: Stefan Sperling <stsp_at_elego.de>
Date: Fri, 14 Oct 2016 16:05:43 +0200

On Fri, Oct 14, 2016 at 03:35:48PM +0200, Stefan wrote:
> Thanks for taking the time to review the patch, Ivan (and also stsp).
> After talking to stsp, here's a different approach to solve the issue
> without the need for adding a new parameter to the public API.
>
> (all tests pass on Windows and the conflict resolution UI was tested
> manually to ensure no duplicate options are displayed for the conflict
> resolution)

+1, please commit.

Thank you!

> [[[
> Fix svn resolve --accept=working not working on binary conflicts by retrying
> to find a resolution option for the semantically corresponding
> svn_client_conflict_option_working_text option.
>
> Additionally, enable the mf option for binary conflicts, so to have the
> option displayed in the client.
>
> * subversion/libsvn_client/conflicts.c
> (svn_client_conflict_text_get_resolution_options): return the more
> suitable
> svn_client_conflict_option_working_text to resolve binary conflicts.
> (svn_client_conflict_text_resolve_by_id): retry determining resolution
> option with svn_client_conflict_option_working_text.
>
> * subversion/svn/conflict-callbacks.c
> (handle_text_conflict): add "mf" to the list of allowed resolutions for
> binary conflicts.
>
> * subversion/tests/cmdline/resolve_tests.py
> (automatic_binary_conflict_resolution): remove XFail marker
> ]]]
>
> Regards,
> Stefan
>

> Index: subversion/libsvn_client/conflicts.c
> ===================================================================
> --- subversion/libsvn_client/conflicts.c (revision 1764824)
> +++ subversion/libsvn_client/conflicts.c (working copy)
> @@ -7193,7 +7193,7 @@
> resolve_text_conflict);
>
> add_resolution_option(*options, conflict,
> - svn_client_conflict_option_merged_text,
> + svn_client_conflict_option_working_text,
> _("accept binary file as it appears in the working copy"),
> resolve_text_conflict);
> }
> @@ -8537,6 +8537,7 @@
> {
> apr_array_header_t *resolution_options;
> svn_client_conflict_option_t *option;
> + const char *mime_type;
>
> SVN_ERR(svn_client_conflict_text_get_resolution_options(
> &resolution_options, conflict, ctx,
> @@ -8543,13 +8544,29 @@
> scratch_pool, scratch_pool));
> option = svn_client_conflict_option_find_by_id(resolution_options,
> option_id);
> +
> + /* Support svn_client_conflict_option_merged_text for binary conflicts by
> + * mapping this onto the semantically equal
> + * svn_client_conflict_option_working_text.
> + */
> if (option == NULL)
> - return svn_error_createf(SVN_ERR_CLIENT_CONFLICT_OPTION_NOT_APPLICABLE,
> - NULL,
> - _("Inapplicable conflict resolution option "
> - "given for conflicted path '%s'"),
> - svn_dirent_local_style(conflict->local_abspath,
> - scratch_pool));
> + {
> + if (option_id == svn_client_conflict_option_merged_text) {
> + mime_type = svn_client_conflict_text_get_mime_type(conflict);
> + if (mime_type && svn_mime_type_is_binary(mime_type))
> + option = svn_client_conflict_option_find_by_id(resolution_options,
> + svn_client_conflict_option_working_text);
> + }
> + }
> +
> + if (option == NULL)
> + return svn_error_createf(SVN_ERR_CLIENT_CONFLICT_OPTION_NOT_APPLICABLE,
> + NULL,
> + _("Inapplicable conflict resolution option "
> + "given for conflicted path '%s'"),
> + svn_dirent_local_style(conflict->local_abspath,
> + scratch_pool));
> +
> SVN_ERR(svn_client_conflict_text_resolve(conflict, option, ctx, scratch_pool));
>
> return SVN_NO_ERROR;
> Index: subversion/svn/conflict-callbacks.c
> ===================================================================
> --- subversion/svn/conflict-callbacks.c (revision 1764824)
> +++ subversion/svn/conflict-callbacks.c (working copy)
> @@ -913,10 +913,9 @@
> if (knows_something || is_binary)
> *next_option++ = "r";
>
> - /* The 'mine-full' option selects the ".mine" file so only offer
> - * it if that file exists. It does not exist for binary files,
> - * for example (questionable historical behaviour since 1.0). */
> - if (my_abspath)
> + /* The 'mine-full' option selects the ".mine" file for texts or
> + * the current working directory file for binary files. */
> + if (my_abspath || is_binary)
> *next_option++ = "mf";
>
> *next_option++ = "tf";
> Index: subversion/tests/cmdline/resolve_tests.py
> ===================================================================
> --- subversion/tests/cmdline/resolve_tests.py (revision 1764824)
> +++ subversion/tests/cmdline/resolve_tests.py (working copy)
> @@ -602,7 +602,6 @@
>
> # Test for issue #4647 'auto resolution mine-full fails on binary file'
> @Issue(4647)
> -_at_XFail()
> def automatic_binary_conflict_resolution(sbox):
> "resolve -R --accept [base | mf | tf] binary file"
>
Received on 2016-10-14 16:06:00 CEST

This is an archived mail posted to the Subversion Dev mailing list.