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