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/10/01 20:32:34 UTC
svn commit: r1706304 - in /subversion/branches/move-tracking-2/subversion:
include/private/svn_branch.h libsvn_delta/branch.c libsvn_delta/compat3e.c
svnmover/svnmover.c
Author: julianfoad
Date: Thu Oct 1 18:32:34 2015
New Revision: 1706304
URL: http://svn.apache.org/viewvc?rev=1706304&view=rev
Log:
On the 'move-tracking-2' branch: Simpify an API.
* subversion/include/private/svn_branch.h,
subversion/libsvn_delta/branch.c
(svn_branch_instantiate_elements): Rename from
'svn_branch_instantiate_subtree'. Don't take new parent-eid and name
parameters; instead, take these from the 'elements' input.
* subversion/libsvn_delta/compat3e.c
(editor3_branch): Adjust the caller.
* subversion/svnmover/svnmover.c
(do_branch_into): Adjust the caller.
Modified:
subversion/branches/move-tracking-2/subversion/include/private/svn_branch.h
subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c
subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c
subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c
Modified: subversion/branches/move-tracking-2/subversion/include/private/svn_branch.h
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/include/private/svn_branch.h?rev=1706304&r1=1706303&r2=1706304&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/include/private/svn_branch.h (original)
+++ subversion/branches/move-tracking-2/subversion/include/private/svn_branch.h Thu Oct 1 18:32:34 2015
@@ -604,26 +604,18 @@ void
svn_branch_purge_r(svn_branch_state_t *branch,
apr_pool_t *scratch_pool);
-/* Instantiate a subtree.
+/* Instantiate elements in a branch.
*
* In TO_BRANCH, instantiate (or alter, if existing) each element of
- * FROM_SUBTREE, with the given tree structure and payload. Set the subtree
- * root element's parent to NEW_PARENT_EID and name to NEW_NAME.
+ * ELEMENTS, each with its given tree structure (parent, name) and payload.
*
- * Also branch the subbranches in FROM_SUBTREE, creating corresponding new
+ * Also branch the subbranches in ELEMENTS, creating corresponding new
* subbranches in TO_BRANCH, recursively.
- *
- * If FROM_SUBTREE.root_eid is the same as TO_BRANCH.root_eid, then
- * (NEW_PARENT_EID, NEW_NAME) must be (-1, ""); otherwise, NEW_PARENT_EID
- * must be an existing element (it may be the root element) of TO_BRANCH and
- * NEW_NAME must not be not "".
*/
svn_error_t *
-svn_branch_instantiate_subtree(svn_branch_state_t *to_branch,
- svn_branch_eid_t new_parent_eid,
- const char *new_name,
- svn_branch_subtree_t from_subtree,
- apr_pool_t *scratch_pool);
+svn_branch_instantiate_elements(svn_branch_state_t *to_branch,
+ svn_branch_subtree_t elements,
+ apr_pool_t *scratch_pool);
/* Create a copy of NEW_SUBTREE in TO_BRANCH.
*
Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c?rev=1706304&r1=1706303&r2=1706304&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c Thu Oct 1 18:32:34 2015
@@ -831,54 +831,29 @@ svn_branch_map_add_subtree(svn_branch_st
}
svn_error_t *
-svn_branch_instantiate_subtree(svn_branch_state_t *to_branch,
- svn_branch_eid_t new_parent_eid,
- const char *new_name,
- svn_branch_subtree_t new_subtree,
- apr_pool_t *scratch_pool)
+svn_branch_instantiate_elements(svn_branch_state_t *to_branch,
+ svn_branch_subtree_t elements,
+ apr_pool_t *scratch_pool)
{
apr_hash_index_t *hi;
- svn_branch_el_rev_content_t *new_root_content;
- /* Source element must not be the same as the target parent element */
- if (new_subtree.root_eid == new_parent_eid)
- {
- return svn_error_createf(SVN_ERR_BRANCHING, NULL,
- _("Cannot branch from e%d to %s e%d/%s: "
- "target element cannot be its own parent"),
- new_subtree.root_eid,
- svn_branch_get_id(to_branch, scratch_pool),
- new_parent_eid, new_name);
- }
-
- /* Instantiate the root element of NEW_SUBTREE */
- new_root_content = svn_int_hash_get(new_subtree.e_map, new_subtree.root_eid);
- if (new_root_content->payload)
- svn_branch_update_element(to_branch, new_subtree.root_eid,
- new_parent_eid, new_name,
- new_root_content->payload);
- else
- svn_branch_update_subbranch_root_element(to_branch, new_subtree.root_eid,
- new_parent_eid, new_name);
-
- /* Instantiate all the children of NEW_SUBTREE */
- for (hi = apr_hash_first(scratch_pool, new_subtree.e_map);
+ /* Instantiate all the elements of NEW_SUBTREE */
+ for (hi = apr_hash_first(scratch_pool, elements.e_map);
hi; hi = apr_hash_next(hi))
{
int this_eid = svn_int_hash_this_key(hi);
svn_branch_el_rev_content_t *this_element = apr_hash_this_val(hi);
- if (this_eid != new_subtree.root_eid)
- {
- branch_map_set(to_branch, this_eid, this_element);
- }
+ branch_map_set(to_branch, this_eid,
+ svn_branch_el_rev_content_dup(
+ this_element, apr_hash_pool_get(to_branch->e_map)));
}
/* branch any subbranches */
{
SVN_ITER_T(svn_branch_subtree_t) *bi;
- for (SVN_HASH_ITER(bi, scratch_pool, new_subtree.subbranches))
+ for (SVN_HASH_ITER(bi, scratch_pool, elements.subbranches))
{
int this_outer_eid = svn_int_hash_this_key(bi->apr_hi);
svn_branch_subtree_t *this_subtree = bi->val;
@@ -891,8 +866,8 @@ svn_branch_instantiate_subtree(svn_branc
this_subtree->root_eid,
bi->iterpool);
- SVN_ERR(svn_branch_instantiate_subtree(new_branch, -1, "", *this_subtree,
- bi->iterpool));
+ SVN_ERR(svn_branch_instantiate_elements(new_branch, *this_subtree,
+ bi->iterpool));
}
}
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=1706304&r1=1706303&r2=1706304&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c Thu Oct 1 18:32:34 2015
@@ -1254,8 +1254,8 @@ editor3_branch(void *baton,
from->eid, scratch_pool);
/* Populate the mapping from the 'from' source */
- SVN_ERR(svn_branch_instantiate_subtree(new_branch, -1, "", *from_subtree,
- scratch_pool));
+ SVN_ERR(svn_branch_instantiate_elements(new_branch, *from_subtree,
+ scratch_pool));
*new_branch_id_p = svn_branch_get_id(new_branch, result_pool);
return SVN_NO_ERROR;
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=1706304&r1=1706303&r2=1706304&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c (original)
+++ subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c Thu Oct 1 18:32:34 2015
@@ -2433,6 +2433,7 @@ do_branch_into(svn_branch_state_t *from_
apr_pool_t *scratch_pool)
{
svn_branch_subtree_t *from_subtree;
+ svn_branch_el_rev_content_t *new_root_content;
/* Source element must exist */
if (! svn_branch_get_path_by_eid(from_branch, from_eid, scratch_pool))
@@ -2446,9 +2447,18 @@ do_branch_into(svn_branch_state_t *from_
from_subtree = svn_branch_get_subtree(from_branch, from_eid, scratch_pool);
+ /* Change this subtree's root element to TO_PARENT_EID/NEW_NAME. */
+ new_root_content
+ = svn_int_hash_get(from_subtree->e_map, from_subtree->root_eid);
+ new_root_content
+ = svn_branch_el_rev_content_create(to_parent_eid, new_name,
+ new_root_content->payload, scratch_pool);
+ svn_int_hash_set(from_subtree->e_map, from_subtree->root_eid,
+ new_root_content);
+
/* Populate the new branch mapping */
- SVN_ERR(svn_branch_instantiate_subtree(to_branch, to_parent_eid, new_name,
- *from_subtree, scratch_pool));
+ SVN_ERR(svn_branch_instantiate_elements(to_branch, *from_subtree,
+ scratch_pool));
notify_v("A+ %s (subtree)",
svn_branch_get_path_by_eid(to_branch, from_eid, scratch_pool));