Author: julianfoad
Date: Wed Jun  3 16:13:30 2015
New Revision: 1683383

URL: http://svn.apache.org/r1683383
Log:
On the 'move-tracking-2' branch: Make 'payload_resolve' an editor virtual
method.

I am not sure if the editor eventually will need to provide this, or
something like it, but for now it is useful. And it was worse, previously,
to have this as a non-virtual function, because then editors could not
successfully be chained. Now there are no non-virtual methods.

* subversion/include/private/svn_editor3e.h
  (svn_editor3_cb_payload_resolve_t): New.
  (svn_editor3_cb_funcs_t): Add the method.
  (svn_editor3_payload_resolve): Tweak the function signature as required
    for editor methods.

* subversion/libsvn_delta/compat3e.c
  (editor3_payload_resolve): Rename from 'svn_editor3_payload_resolve' and
    make static.
  (svn_editor3_in_memory,
   svn_editor3__ev3_from_delta_for_commit): Add the method to the vtable.

* subversion/libsvn_delta/editor3e.c
  (svn_editor3_payload_resolve,
   wrap_payload_resolve): New.
  (svn_editor3__get_debug_editor): Add the method to the vtable.
  (svn_branch_subtree_differences): Tweak callers accordingly.

* subversion/svnmover/svnmover.c
  (wc_commit): Display the diff after the commit has completed, rather than
    inside the commit callback, so as not to nest calls to payload_resolve
    inside the editor complete() method, as the editor framework forbids
    nesting.
  (commit_callback): Don't display the diff here.
  (display_diff_of_commit): New.

Modified:
    
subversion/branches/move-tracking-2/subversion/include/private/svn_editor3e.h
    subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c
    subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c
    subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c

Modified: 
subversion/branches/move-tracking-2/subversion/include/private/svn_editor3e.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/include/private/svn_editor3e.h?rev=1683383&r1=1683382&r2=1683383&view=diff
==============================================================================
--- 
subversion/branches/move-tracking-2/subversion/include/private/svn_editor3e.h 
(original)
+++ 
subversion/branches/move-tracking-2/subversion/include/private/svn_editor3e.h 
Wed Jun  3 16:13:30 2015
@@ -899,6 +899,15 @@ typedef svn_error_t *(*svn_editor3_cb_al
   const svn_element_payload_t *new_payload,
   apr_pool_t *scratch_pool);
 
+/** @see svn_editor3_payload_resolve(), #svn_editor3_t
+ */
+typedef svn_error_t *(*svn_editor3_cb_payload_resolve_t)(
+  void *baton,
+  svn_element_payload_t **payload_p,
+  const svn_branch_el_rev_content_t *element,
+  apr_pool_t *result_pool,
+  apr_pool_t *scratch_pool);
+
 /** @see svn_editor3_sequence_point(), #svn_editor3_t
  */
 typedef svn_error_t *(*svn_editor3_cb_sequence_point_t)(
@@ -940,6 +949,7 @@ typedef struct svn_editor3_cb_funcs_t
   svn_editor3_cb_copy_tree_t cb_copy_tree;
   svn_editor3_cb_delete_t cb_delete;
   svn_editor3_cb_alter_t cb_alter;
+  svn_editor3_cb_payload_resolve_t cb_payload_resolve;
 
   svn_editor3_cb_sequence_point_t cb_sequence_point;
   svn_editor3_cb_complete_t cb_complete;
@@ -986,11 +996,10 @@ svn_editor3__get_baton(const svn_editor3
 /* Fetch full payload...
  */
 svn_error_t *
-svn_editor3_payload_resolve(svn_element_payload_t **payload_p,
-                            svn_editor3_t *editor,
+svn_editor3_payload_resolve(svn_editor3_t *editor,
+                            svn_element_payload_t **payload_p,
                             const svn_branch_el_rev_content_t *element,
-                            apr_pool_t *result_pool,
-                            apr_pool_t *scratch_pool);
+                            apr_pool_t *result_pool);
 
 /* Return (left, right) pairs of element content that differ between
  * subtrees LEFT and RIGHT.

Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c?rev=1683383&r1=1683382&r2=1683383&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c 
(original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c Wed 
Jun  3 16:13:30 2015
@@ -991,14 +991,14 @@ payload_fetch(svn_element_payload_t **pa
   return SVN_NO_ERROR;
 }
 
-svn_error_t *
-svn_editor3_payload_resolve(svn_element_payload_t **payload_p,
-                            svn_editor3_t *editor,
-                            const svn_branch_el_rev_content_t *element,
-                            apr_pool_t *result_pool,
-                            apr_pool_t *scratch_pool)
+static svn_error_t *
+editor3_payload_resolve(void *baton,
+                        svn_element_payload_t **payload_p,
+                        const svn_branch_el_rev_content_t *element,
+                        apr_pool_t *result_pool,
+                        apr_pool_t *scratch_pool)
 {
-  ev3_from_delta_baton_t *eb = svn_editor3__get_baton(editor);
+  ev3_from_delta_baton_t *eb = baton;
 
   SVN_ERR_ASSERT(element);
 
@@ -1695,6 +1695,7 @@ svn_editor3_in_memory(svn_editor3_t **ed
     editor3_copy_tree,
     editor3_delete,
     editor3_alter,
+    editor3_payload_resolve,
     editor3_sequence_point,
     editor3_mem_complete,
     editor3_mem_abort
@@ -1734,6 +1735,7 @@ svn_editor3__ev3_from_delta_for_commit(
     editor3_copy_tree,
     editor3_delete,
     editor3_alter,
+    editor3_payload_resolve,
     editor3_sequence_point,
     editor3_complete,
     editor3_abort

Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c?rev=1683383&r1=1683382&r2=1683383&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c 
(original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c Wed 
Jun  3 16:13:30 2015
@@ -321,6 +321,20 @@ svn_editor3_alter(svn_editor3_t *editor,
 }
 
 svn_error_t *
+svn_editor3_payload_resolve(svn_editor3_t *editor,
+                            svn_element_payload_t **payload_p,
+                            const svn_branch_el_rev_content_t *element,
+                            apr_pool_t *result_pool)
+{
+  DO_CALLBACK(editor, cb_payload_resolve,
+              3(payload_p,
+                element,
+                result_pool));
+
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
 svn_editor3_sequence_point(svn_editor3_t *editor)
 {
   SHOULD_NOT_BE_FINISHED(editor);
@@ -527,6 +541,22 @@ wrap_alter(void *baton,
 }
 
 static svn_error_t *
+wrap_payload_resolve(void *baton,
+                     svn_element_payload_t **payload_p,
+                     const svn_branch_el_rev_content_t *element,
+                     apr_pool_t *result_pool,
+                     apr_pool_t *scratch_pool)
+{
+  wrapper_baton_t *eb = baton;
+
+  SVN_ERR(svn_editor3_payload_resolve(eb->wrapped_editor,
+                                  payload_p,
+                                  element,
+                                  result_pool));
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
 wrap_sequence_point(void *baton,
                     apr_pool_t *scratch_pool)
 {
@@ -571,6 +601,7 @@ svn_editor3__get_debug_editor(svn_editor
     wrap_copy_tree,
     wrap_delete,
     wrap_alter,
+    wrap_payload_resolve,
     wrap_sequence_point,
     wrap_complete,
     wrap_abort
@@ -636,9 +667,8 @@ svn_branch_subtree_differences(apr_hash_
         {
           svn_element_payload_t *payload;
 
-          SVN_ERR(svn_editor3_payload_resolve(&payload,
-                                              editor, element_left,
-                                              result_pool, scratch_pool));
+          SVN_ERR(svn_editor3_payload_resolve(editor, &payload, element_left,
+                                          result_pool));
           element_left
             = svn_branch_el_rev_content_create(element_left->parent_eid,
                                                element_left->name,
@@ -648,9 +678,8 @@ svn_branch_subtree_differences(apr_hash_
         {
           svn_element_payload_t *payload;
 
-          SVN_ERR(svn_editor3_payload_resolve(&payload,
-                                              editor, element_right,
-                                              result_pool, scratch_pool));
+          SVN_ERR(svn_editor3_payload_resolve(editor, &payload, element_right,
+                                          result_pool));
           element_right
             = svn_branch_el_rev_content_create(element_right->parent_eid,
                                                element_right->name,

Modified: subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c?rev=1683383&r1=1683382&r2=1683383&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c 
(original)
+++ subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c Wed Jun  
3 16:13:30 2015
@@ -412,6 +412,10 @@ typedef struct commit_callback_baton_t
   svn_revnum_t revision;
 } commit_callback_baton_t;
 
+static svn_error_t *
+display_diff_of_commit(const commit_callback_baton_t *ccbb,
+                       apr_pool_t *scratch_pool);
+
 /* Commit the changes from WC into the repository.
  *
  * Open a new commit txn to the repo. Replay the changes from WC into it.
@@ -461,6 +465,8 @@ wc_commit(svnmover_wc_t *wc,
                  scratch_pool));
   SVN_ERR(svn_editor3_complete(commit_editor));
 
+  SVN_ERR(display_diff_of_commit(&ccbb, scratch_pool));
+
   wc->made_changes = FALSE;
   wc->head_revision = ccbb.revision;
   return SVN_NO_ERROR;
@@ -2003,27 +2009,37 @@ commit_callback(const svn_commit_info_t
                 apr_pool_t *pool)
 {
   commit_callback_baton_t *b = baton;
-  svn_branch_el_rev_id_t *el_rev_left, *el_rev_right;
-  const char *rrpath = "";
-  const svn_branch_repos_t *repos = b->edit_txn->repos;
 
   SVN_ERR(svn_cmdline_printf(pool, "Committed r%ld:\n",
                              commit_info->revision));
 
+  b->revision = commit_info->revision;
+  return SVN_NO_ERROR;
+}
+
+/* Display a diff of the commit */
+static svn_error_t *
+display_diff_of_commit(const commit_callback_baton_t *ccbb,
+                       apr_pool_t *scratch_pool)
+{
+  svn_branch_el_rev_id_t *el_rev_left, *el_rev_right;
+  const char *rrpath = "";
+  const svn_branch_repos_t *repos = ccbb->edit_txn->repos;
+
   SVN_ERR(svn_branch_repos_find_el_rev_by_path_rev(&el_rev_left,
                                                    rrpath,
-                                                   commit_info->revision - 1,
-                                                   repos, pool, pool));
+                                                   ccbb->revision - 1,
+                                                   repos, scratch_pool,
+                                                   scratch_pool));
   SVN_ERR(svn_branch_repos_find_el_rev_by_path_rev(&el_rev_right,
                                                    rrpath,
-                                                   commit_info->revision,
-                                                   repos, pool, pool));
-  SVN_ERR(svn_branch_diff_r(b->editor,
+                                                   ccbb->revision,
+                                                   repos, scratch_pool,
+                                                   scratch_pool));
+  SVN_ERR(svn_branch_diff_r(ccbb->editor,
                             el_rev_left, el_rev_right,
                             flat_branch_diff, "   ",
-                            pool));
-
-  b->revision = commit_info->revision;
+                            scratch_pool));
   return SVN_NO_ERROR;
 }
 


Reply via email to