You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2015/12/09 17:44:39 UTC
svn commit: r1718900 - /subversion/trunk/tools/dev/svnmover/svnmover.c
Author: julianfoad
Date: Wed Dec 9 16:44:39 2015
New Revision: 1718900
URL: http://svn.apache.org/viewvc?rev=1718900&view=rev
Log:
In 'svnmover', rework the 'diff' code a little.
* tools/dev/svnmover/svnmover.c
(subtree_diff_r): Take branch state objects instead of 'subtree' objects.
(branch_diff_r): Track the change.
Modified:
subversion/trunk/tools/dev/svnmover/svnmover.c
Modified: subversion/trunk/tools/dev/svnmover/svnmover.c
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dev/svnmover/svnmover.c?rev=1718900&r1=1718899&r2=1718900&view=diff
==============================================================================
--- subversion/trunk/tools/dev/svnmover/svnmover.c (original)
+++ subversion/trunk/tools/dev/svnmover/svnmover.c Wed Dec 9 16:44:39 2015
@@ -2063,28 +2063,43 @@ svn_branch__diff_func_t(svn_branch__subt
* Recurse into sub-branches.
*/
static svn_error_t *
-subtree_diff_r(svn_branch__subtree_t *left,
- const char *left_bid,
- const char *left_rrpath,
- svn_branch__subtree_t *right,
- const char *right_bid,
- const char *right_rrpath,
+subtree_diff_r(svn_branch__state_t *left_branch,
+ int left_root_eid,
+ svn_branch__state_t *right_branch,
+ int right_root_eid,
svn_branch__diff_func_t diff_func,
const char *prefix,
apr_pool_t *scratch_pool)
{
+ svn_branch__subtree_t *left = NULL;
+ svn_branch__subtree_t *right = NULL;
const char *left_str
- = left ? apr_psprintf(scratch_pool, "%s:e%d at /%s",
- left_bid, left->tree->root_eid, left_rrpath)
- : NULL;
+ = left_branch
+ ? apr_psprintf(scratch_pool, "%s:e%d at /%s",
+ left_branch->bid, left_root_eid,
+ svn_branch__get_root_rrpath(left_branch, scratch_pool))
+ : NULL;
const char *right_str
- = right ? apr_psprintf(scratch_pool, "%s:e%d at /%s",
- right_bid, right->tree->root_eid, right_rrpath)
+ = right_branch
+ ? apr_psprintf(scratch_pool, "%s:e%d at /%s",
+ right_branch->bid, right_root_eid,
+ svn_branch__get_root_rrpath(right_branch, scratch_pool))
: NULL;
const char *header;
apr_hash_t *subbranches_l, *subbranches_r, *subbranches_all;
apr_hash_index_t *hi;
+ if (left_branch)
+ {
+ SVN_ERR(svn_branch__get_subtree(left_branch, &left, left_root_eid,
+ scratch_pool));
+ }
+ if (right_branch)
+ {
+ SVN_ERR(svn_branch__get_subtree(right_branch, &right, right_root_eid,
+ scratch_pool));
+ }
+
if (!left)
{
header = apr_psprintf(scratch_pool,
@@ -2113,7 +2128,7 @@ subtree_diff_r(svn_branch__subtree_t *le
scratch_pool, "--- diff branch %s : %s",
left_str, right_str);
}
- SVN_ERR(diff_func(left, left_bid, right, right_bid,
+ SVN_ERR(diff_func(left, left_branch->bid, right, right_branch->bid,
prefix, header,
scratch_pool));
}
@@ -2127,41 +2142,30 @@ subtree_diff_r(svn_branch__subtree_t *le
hi; hi = apr_hash_next(hi))
{
int e = svn_eid__hash_this_key(hi);
- svn_branch__subtree_t *sub_left = NULL, *sub_right = NULL;
- const char *sub_left_bid = NULL, *sub_right_bid = NULL;
- const char *sub_left_rrpath = NULL, *sub_right_rrpath = NULL;
+ svn_branch__state_t *left_subbranch = NULL, *right_subbranch = NULL;
+ int left_subbranch_eid = -1, right_subbranch_eid = -1;
/* recurse */
- if (left)
+ if (left_branch)
{
- sub_left = svn_branch__subtree_get_subbranch_at_eid(left, e,
- scratch_pool);
- if (sub_left)
+ SVN_ERR(svn_branch__get_subbranch_at_eid(left_branch, &left_subbranch, e,
+ scratch_pool));
+ if (left_subbranch)
{
- const char *relpath
- = svn_element__tree_get_path_by_eid(left->tree, e, scratch_pool);
-
- sub_left_bid = svn_branch__id_nest(left_bid, e, scratch_pool);
- sub_left_rrpath = svn_relpath_join(left_rrpath, relpath,
- scratch_pool);
+ left_subbranch_eid = svn_branch__root_eid(left_subbranch);
}
}
- if (right)
+ if (right_branch)
{
- sub_right = svn_branch__subtree_get_subbranch_at_eid(right, e,
- scratch_pool);
- if (sub_right)
+ SVN_ERR(svn_branch__get_subbranch_at_eid(right_branch, &right_subbranch, e,
+ scratch_pool));
+ if (right_subbranch)
{
- const char *relpath
- = svn_element__tree_get_path_by_eid(right->tree, e, scratch_pool);
-
- sub_right_bid = svn_branch__id_nest(right_bid, e, scratch_pool);
- sub_right_rrpath = svn_relpath_join(right_rrpath, relpath,
- scratch_pool);
+ right_subbranch_eid = svn_branch__root_eid(right_subbranch);
}
}
- SVN_ERR(subtree_diff_r(sub_left, sub_left_bid, sub_left_rrpath,
- sub_right, sub_right_bid, sub_right_rrpath,
+ SVN_ERR(subtree_diff_r(left_subbranch, left_subbranch_eid,
+ right_subbranch, right_subbranch_eid,
diff_func, prefix, scratch_pool));
}
return SVN_NO_ERROR;
@@ -2180,8 +2184,6 @@ branch_diff_r(svn_branch__el_rev_id_t *l
{
svn_branch__rev_bid_t *merge_history1, *merge_history2;
const char *merge_history_difference;
- svn_branch__subtree_t *s_left;
- svn_branch__subtree_t *s_right;
/* ### This should be done for each branch, e.g. in subtree_diff_r(). */
/* ### This notification should start with a '--- diff branch ...' line. */
@@ -2195,17 +2197,8 @@ branch_diff_r(svn_branch__el_rev_id_t *l
svnmover_notify("%s--- merge history is different: %s", prefix,
merge_history_difference);
- SVN_ERR(svn_branch__get_subtree(left->branch, &s_left, left->eid,
- scratch_pool));
- SVN_ERR(svn_branch__get_subtree(right->branch, &s_right, right->eid,
- scratch_pool));
-
- SVN_ERR(subtree_diff_r(s_left,
- svn_branch__get_id(left->branch, scratch_pool),
- svn_branch__get_root_rrpath(left->branch, scratch_pool),
- s_right,
- svn_branch__get_id(right->branch, scratch_pool),
- svn_branch__get_root_rrpath(right->branch, scratch_pool),
+ SVN_ERR(subtree_diff_r(left->branch, svn_branch__root_eid(left->branch),
+ right->branch, svn_branch__root_eid(right->branch),
diff_func, prefix, scratch_pool));
return SVN_NO_ERROR;
}