You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2013/01/30 16:51:09 UTC

svn commit: r1440486 - /subversion/trunk/subversion/libsvn_client/merge.c

Author: rhuijben
Date: Wed Jan 30 15:51:09 2013
New Revision: 1440486

URL: http://svn.apache.org/viewvc?rev=1440486&view=rev
Log:
Complete the conversion of the file callbacks in the merge processing to the
diff tree processor (aka the easiest part).

* subversion/libsvn_client/merge.c
  (merge_file_deleted): Implement svn_diff_tree_processor_t api.
  (ignore_file_deleted): New stub.
  (merge_callbacks): Use stub.
  (do_merge): Tweak spacing. Use merge_file_deleted.

Modified:
    subversion/trunk/subversion/libsvn_client/merge.c

Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1440486&r1=1440485&r2=1440486&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Wed Jan 30 15:51:09 2013
@@ -2192,22 +2192,26 @@ files_same_p(svn_boolean_t *same,
   return SVN_NO_ERROR;
 }
 
-/* An svn_wc_diff_callbacks4_t function. */
+/* An svn_diff_tree_processor_t function.
+ *
+ * Called after merge_file_opened() when a node does exist in LEFT_SOURCE, but
+ * no longer exists (or is replaced) in RIGHT_SOURCE.
+ *
+ * When a node is replaced instead of just added a separate opened+added will
+ * be invoked after the current open+deleted.
+ */
 static svn_error_t *
-merge_file_deleted(svn_wc_notify_state_t *state,
-                   svn_boolean_t *tree_conflicted,
-                   const char *mine_relpath,
-                   const char *older_abspath,
-                   const char *yours_abspath,
-                   const char *mimetype1,
-                   const char *mimetype2,
-                   apr_hash_t *original_props,
-                   void *baton,
+merge_file_deleted(const char *relpath,
+                   const svn_diff_source_t *left_source,
+                   const char *left_file,
+                   /*const*/ apr_hash_t *left_props,
+                   void *file_baton,
+                   const struct svn_diff_tree_processor_t *processor,
                    apr_pool_t *scratch_pool)
 {
-  merge_cmd_baton_t *merge_b = baton;
+  merge_cmd_baton_t *merge_b = processor->baton;
   const char *local_abspath = svn_dirent_join(merge_b->target->abspath,
-                                              mine_relpath, scratch_pool);
+                                              relpath, scratch_pool);
   svn_node_kind_t kind;
   svn_boolean_t is_deleted;
   svn_boolean_t same;
@@ -2274,7 +2278,7 @@ merge_file_deleted(svn_wc_notify_state_t
   
 
   /* If the files are identical, attempt deletion */
-  SVN_ERR(files_same_p(&same, older_abspath, original_props,
+  SVN_ERR(files_same_p(&same, left_file, left_props,
                        local_abspath, merge_b->ctx->wc_ctx,
                        scratch_pool));
   if (same || merge_b->force_delete || merge_b->record_only /* ### why? */)
@@ -3006,6 +3010,21 @@ ignore_file_added(svn_wc_notify_state_t 
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+ignore_file_deleted(svn_wc_notify_state_t *state,
+                    svn_boolean_t *tree_conflicted,
+                    const char *mine_relpath,
+                    const char *older_abspath,
+                    const char *yours_abspath,
+                    const char *mimetype1,
+                    const char *mimetype2,
+                    apr_hash_t *original_props,
+                    void *baton,
+                    apr_pool_t *scratch_pool)
+{
+  return SVN_NO_ERROR;
+}
+
 /* The main callback table for 'svn merge'.  */
 static const svn_wc_diff_callbacks4_t
 merge_callbacks =
@@ -3013,7 +3032,7 @@ merge_callbacks =
     ignore_file_opened,
     ignore_file_changed,
     ignore_file_added,
-    merge_file_deleted,
+    ignore_file_deleted,
     merge_dir_deleted,
     merge_dir_opened,
     merge_dir_added,
@@ -9206,9 +9225,11 @@ do_merge(apr_hash_t **modified_subtrees,
     merge_processor = svn_diff__tree_processor_create(&merge_cmd_baton,
                                                       scratch_pool);
 
-    merge_processor->file_opened = merge_file_opened;
+    merge_processor->file_opened  = merge_file_opened;
     merge_processor->file_changed = merge_file_changed;
     merge_processor->file_added   = merge_file_added;
+    merge_processor->file_deleted = merge_file_deleted;
+    /* Not interested in file_closed() */
 
     merge_processor->node_absent = merge_node_absent;