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;
+}