On 7/26/2016 5:46 PM, Stefan Hett wrote:
Hi,

based on the talk on IRC with stsp and Bert I'd like to propose the following patch which would resolve an issue in TSVN when selecting to prefer the local version of a binary file in conflict (see: "code location related to investigate potential issue in resolve dialog" thread on the TSVN user's mailing list for further details).

[[[
Teach build_text_conflict_resolve_items() to skip installling files, if these
are not required to resolve the conflict.

* libsvn_wc/conflicts.c
(build_text_conflict_resolve_items): introduce new allow_ski_install variable and set it in the two cases where we simply accept the current local file to
                                       resolve the conflict.
]]]

Attached is a revised patch replacing the tabs with whitespaces of the original patch (spotted by stsp).

--
Regards,
Stefan Hett

Index: subversion/libsvn_wc/conflicts.c
===================================================================
--- subversion/libsvn_wc/conflicts.c    (revision 1754140)
+++ subversion/libsvn_wc/conflicts.c    (working copy)
@@ -1583,6 +1583,7 @@
   svn_skel_t *work_item;
   const char *install_from_abspath = NULL;
   svn_boolean_t remove_source = FALSE;
+  svn_boolean_t allow_skip_install = FALSE;
 
   *work_items = NULL;
 
@@ -1624,6 +1625,12 @@
       case svn_wc_conflict_choose_mine_full:
         {
           install_from_abspath = mine_abspath;
+          /* In case of selecting to resolve the conflict choosing the full
+             own file, allow the text conflict resolution to just take the
+             existing local file if no merged file was present (case: binary
+             file conflicts do not generate a locally merge file).
+          */
+          allow_skip_install = TRUE;
           break;
         }
       case svn_wc_conflict_choose_theirs_conflict:
@@ -1665,9 +1672,8 @@
            good to use". */
       case svn_wc_conflict_choose_merged:
         {
-          install_from_abspath = merged_file
-                                  ? merged_file
-                                  : local_abspath;
+          install_from_abspath = merged_file;
+          allow_skip_install = TRUE;
           break;
         }
       case svn_wc_conflict_choose_postpone:
@@ -1679,7 +1685,7 @@
         SVN_ERR_ASSERT(choice == svn_wc_conflict_choose_postpone);
     }
 
-  if (install_from_abspath == NULL)
+  if (install_from_abspath == NULL && !allow_skip_install)
     return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
                              _("Conflict on '%s' could not be resolved "
                                "because the chosen version of the file "

Reply via email to