You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2013/02/05 18:36:46 UTC
svn commit: r1442672 - in /subversion/trunk/subversion/libsvn_wc:
conflicts.c wc_db.h wc_db_update_move.c
Author: philip
Date: Tue Feb 5 17:36:46 2013
New Revision: 1442672
URL: http://svn.apache.org/viewvc?rev=1442672&view=rev
Log:
Resolving a move-edit tree-conflict without doing move-update must
break the move into a copy+delete.
* subversion/libsvn_wc/wc_db.h
(svn_wc__db_resolve_break_moved_away): New.
* subversion/libsvn_wc/wc_db_update_move.c
(resolve_break_moved_away, svn_wc__db_resolve_break_moved_away): New.
* subversion/libsvn_wc/conflicts.c
(resolve_conflict_on_node): Call new function.
Modified:
subversion/trunk/subversion/libsvn_wc/conflicts.c
subversion/trunk/subversion/libsvn_wc/wc_db.h
subversion/trunk/subversion/libsvn_wc/wc_db_update_move.c
Modified: subversion/trunk/subversion/libsvn_wc/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/conflicts.c?rev=1442672&r1=1442671&r2=1442672&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/conflicts.c (original)
+++ subversion/trunk/subversion/libsvn_wc/conflicts.c Tue Feb 5 17:36:46 2013
@@ -2615,6 +2615,14 @@ resolve_conflict_on_node(svn_boolean_t *
SVN_ERR(svn_wc__db_resolve_delete_raise_moved_away(db, local_abspath,
scratch_pool));
}
+ else if (reason == svn_wc_conflict_reason_moved_away
+ && conflict_choice == svn_wc_conflict_choose_merged)
+ {
+ /* ### As above, this should also be combined with
+ ### svn_wc__db_op_mark_resolved. */
+ SVN_ERR(svn_wc__db_resolve_break_moved_away(db, local_abspath,
+ scratch_pool));
+ }
*did_resolve = TRUE;
}
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.h?rev=1442672&r1=1442671&r2=1442672&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.h Tue Feb 5 17:36:46 2013
@@ -3295,6 +3295,13 @@ svn_error_t *
svn_wc__db_resolve_delete_raise_moved_away(svn_wc__db_t *db,
const char *local_abspath,
apr_pool_t *scratch_pool);
+
+/* Like svn_wc__db_resolve_delete_raise_moved_away this should be
+ combined. */
+svn_error_t *
+svn_wc__db_resolve_break_moved_away(svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool);
/* @} */
Modified: subversion/trunk/subversion/libsvn_wc/wc_db_update_move.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db_update_move.c?rev=1442672&r1=1442671&r2=1442672&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db_update_move.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db_update_move.c Tue Feb 5 17:36:46 2013
@@ -2047,3 +2047,56 @@ svn_wc__db_resolve_delete_raise_moved_aw
return SVN_NO_ERROR;
}
+
+static svn_error_t *
+resolve_break_moved_away(svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *scratch_pool)
+{
+ const char *dummy, *moved_to_op_root_relpath, *op_root_relpath;
+ svn_sqlite__stmt_t *stmt;
+ int dst_op_depth;
+
+ SVN_ERR(svn_wc__db_op_depth_moved_to(&dummy, &moved_to_op_root_relpath,
+ &op_root_relpath,
+ relpath_depth(local_relpath) - 1,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
+ dst_op_depth = relpath_depth(moved_to_op_root_relpath);
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_CLEAR_MOVED_TO_RELPATH));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id, local_relpath,
+ relpath_depth(op_root_relpath)));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ /* This statement clears moved_here. */
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_UPDATE_OP_DEPTH_RECURSIVE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "isdd", wcroot->wc_id,
+ moved_to_op_root_relpath,
+ dst_op_depth, dst_op_depth));
+ SVN_ERR(svn_sqlite__step_done(stmt));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_wc__db_resolve_break_moved_away(svn_wc__db_t *db,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(resolve_break_moved_away(wcroot, local_relpath,
+ scratch_pool),
+ wcroot);
+
+ return SVN_NO_ERROR;
+}