You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by gs...@apache.org on 2010/04/09 09:42:07 UTC
svn commit: r932277 - /subversion/trunk/subversion/libsvn_wc/merge.c
Author: gstein
Date: Fri Apr 9 07:42:07 2010
New Revision: 932277
URL: http://svn.apache.org/viewvc?rev=932277&view=rev
Log:
Convert some uses of loggy_copy over to OP_FILE_INSTALL.
* subversion/libsvn_wc/merge.c:
(eval_conflict_func_result): rather than calling loggy_copy(), set a
source path, and break out of the switch. in one case, we generate a
temp file which needs to be removed after the installation. add logic,
based on REMOVE_SOURCE, to manage this. and lastly, outside the
switch, make use of the INSTALL_FROM to do the working file install.
Modified:
subversion/trunk/subversion/libsvn_wc/merge.c
Modified: subversion/trunk/subversion/libsvn_wc/merge.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/merge.c?rev=932277&r1=932276&r2=932277&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/merge.c (original)
+++ subversion/trunk/subversion/libsvn_wc/merge.c Fri Apr 9 07:42:07 2010
@@ -445,25 +445,24 @@ eval_conflict_func_result(enum svn_wc_me
svn_diff_file_options_t *options,
apr_pool_t *pool)
{
+ const char *install_from = NULL;
+ svn_boolean_t remove_source = FALSE;
+
switch (result->choice)
{
/* If the callback wants to use one of the fulltexts
to resolve the conflict, so be it.*/
case svn_wc_conflict_choose_base:
{
- SVN_ERR(svn_wc__loggy_copy(db, adm_abspath,
- left_abspath, target_abspath,
- pool));
+ install_from = left_abspath;
*merge_outcome = svn_wc_merge_merged;
- return SVN_NO_ERROR;
+ break;
}
case svn_wc_conflict_choose_theirs_full:
{
- SVN_ERR(svn_wc__loggy_copy(db, adm_abspath,
- right_abspath, target_abspath,
- pool));
+ install_from = right_abspath;
*merge_outcome = svn_wc_merge_merged;
- return SVN_NO_ERROR;
+ break;
}
case svn_wc_conflict_choose_mine_full:
{
@@ -504,18 +503,11 @@ eval_conflict_func_result(enum svn_wc_me
style,
pool));
SVN_ERR(svn_stream_close(chosen_stream));
- SVN_ERR(svn_wc__loggy_copy(db, adm_abspath,
- chosen_path, target_abspath, pool));
- {
- const svn_skel_t *work_item;
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item,
- db, chosen_path,
- pool, pool));
- SVN_ERR(svn_wc__db_wq_add(db, adm_abspath, work_item, pool));
- }
+ install_from = chosen_path;
+ remove_source = TRUE;
*merge_outcome = svn_wc_merge_merged;
- return SVN_NO_ERROR;
+ break;
}
/* For the case of 3-way file merging, we don't
@@ -526,40 +518,59 @@ eval_conflict_func_result(enum svn_wc_me
good to use". */
case svn_wc_conflict_choose_merged:
{
- SVN_ERR(svn_wc__loggy_copy(db, adm_abspath,
- /* Look for callback's own
- merged-file first: */
- result->merged_file
- ? result->merged_file
- : result_target,
- target_abspath,
- pool));
+ /* Look for callback's own merged-file first: */
+ install_from = (result->merged_file
+ ? result->merged_file
+ : result_target);
*merge_outcome = svn_wc_merge_merged;
- return SVN_NO_ERROR;
+ break;
}
case svn_wc_conflict_choose_postpone:
default:
{
+#if 0
+ /* ### what should this value be? no caller appears to initialize
+ ### it, so we really SHOULD be setting a value here. */
+ *merge_outcome = svn_wc_merge_merged;
+#endif
+
/* Issue #3354: We need to install the copyfrom_text,
* which now carries conflicts, into ACTUAL, by copying
* it to the merge target. */
if (copyfrom_text)
{
- SVN_ERR(svn_wc__loggy_copy(db, adm_abspath,
- copyfrom_text, target_abspath,
- pool));
+ install_from = copyfrom_text;
+ break;
}
-#if 0
- /* ### what should this value be? no caller appears to initialize
- ### it, so we really SHOULD be setting a value here. */
- *merge_outcome = svn_wc_merge_merged;
-#endif
-
/* Assume conflict remains. */
return SVN_NO_ERROR;
}
}
+
+ SVN_ERR_ASSERT(install_from != NULL);
+
+ {
+ const svn_skel_t *work_item;
+
+ SVN_ERR(svn_wc__wq_build_file_install(&work_item,
+ db, target_abspath,
+ install_from,
+ FALSE /* use_commit_times */,
+ FALSE /* record_fileinfo */,
+ pool, pool));
+ SVN_ERR(svn_wc__db_wq_add(db, adm_abspath, work_item, pool));
+
+ if (remove_source)
+ {
+ SVN_ERR(svn_wc__wq_build_file_remove(&work_item,
+ db, install_from,
+ pool, pool));
+ SVN_ERR(svn_wc__db_wq_add(db, adm_abspath, work_item, pool));
+ }
+ }
+
+ return SVN_NO_ERROR;
}
/* Preserve the three pre-merge files, and modify the