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/11/09 18:03:18 UTC
svn commit: r1713479 - in /subversion/branches/move-tracking-2/subversion:
include/private/ libsvn_delta/ libsvn_ra/ svnmover/
Author: julianfoad
Date: Mon Nov 9 17:03:18 2015
New Revision: 1713479
URL: http://svn.apache.org/viewvc?rev=1713479&view=rev
Log:
On the 'move-tracking-2' branch: Refactoring: remove the plain function
'svn_branch_get_element_tree_at_eid' and use virtual class methods instead.
Also tweak the signature of 'svn_branch_state_get_elements' following
r1713431.
* subversion/include/private/svn_branch.h
(svn_branch_get_element_tree_at_eid): Delete.
(SVN_BRANCH_SEQUENCE_POINT): Delete.
(svn_branch_state_get_elements): Remove 'const' from the return type.
* subversion/include/private/svn_branch_impl.h
(branch_state_v_get_elements_t): Remove 'const' from the return type.
* subversion/include/private/svn_element.h,
subversion/libsvn_delta/element.c
(svn_element_tree_get_subtree_at_eid): New, extracted from
'svn_branch_get_element_tree_at_eid'.
* subversion/libsvn_delta/branch.c
(branch_txn_branch,
copy_subtree): Use 'svn_element_tree_get_subtree_at_eid' instead of
'svn_branch_get_element_tree_at_eid'.
(branch_state_get_element,
svn_branch_state_get_elements): Remove 'const' from the return type.
(svn_branch_get_element_tree_at_eid): Delete.
* subversion/libsvn_delta/branch_compat.c
(convert_branch_to_paths): Track the constness change.
* subversion/libsvn_delta/branch_nested.c
(svn_branch_get_immediate_subbranches): Track the constness change.
(svn_branch_get_subtree): Use 'svn_element_tree_get_subtree_at_eid'
instead of 'svn_branch_get_element_tree_at_eid'.
* subversion/libsvn_ra/ra_loader.c
(txn_fetch_payloads): Track the constness change.
* subversion/svnmover/merge3.c
(detect_clashes,
detect_cycles,
detect_orphans,
branch_merge_subtree_r): Track the constness change.
* subversion/svnmover/svnmover.c
(txn_is_changed,
svn_branch_replay,
list_branch_elements,
list_branch_elements_by_eid): Track the constness change.
Modified:
subversion/branches/move-tracking-2/subversion/include/private/svn_branch.h
subversion/branches/move-tracking-2/subversion/include/private/svn_branch_impl.h
subversion/branches/move-tracking-2/subversion/include/private/svn_element.h
subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c
subversion/branches/move-tracking-2/subversion/libsvn_delta/branch_compat.c
subversion/branches/move-tracking-2/subversion/libsvn_delta/branch_nested.c
subversion/branches/move-tracking-2/subversion/libsvn_delta/element.c
subversion/branches/move-tracking-2/subversion/libsvn_ra/ra_loader.c
subversion/branches/move-tracking-2/subversion/svnmover/merge3.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=1713479&r1=1713478&r2=1713479&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 Mon Nov 9 17:03:18 2015
@@ -488,31 +488,11 @@ svn_branch_rev_bid_dup(const svn_branch_
apr_pool_t *result_pool);
-/* Return the element-tree within BRANCH rooted at EID.
- *
- * The result is limited by the lifetime of BRANCH. It includes a shallow
- * copy of the element maps in BRANCH: the hash table is
- * duplicated but the keys and values (element content data) are not.
- * It assumes that modifications on a svn_branch_state_t treat element
- * map keys and values as immutable -- which they do.
- */
-svn_element_tree_t *
-svn_branch_get_element_tree_at_eid(svn_branch_state_t *branch,
- int eid,
- apr_pool_t *result_pool);
-
-/* Declare that the following function requires/implies that in BRANCH's
- * mapping, for each existing element, the parent also exists.
- *
- * ### Find a better word? flattened, canonical, finalized, ...
- */
-#define SVN_BRANCH_SEQUENCE_POINT(branch)
-
/* Return the mapping of elements in branch BRANCH.
*/
svn_error_t *
svn_branch_state_get_elements(svn_branch_state_t *branch,
- const svn_element_tree_t **element_tree_p,
+ svn_element_tree_t **element_tree_p,
apr_pool_t *result_pool);
/* In BRANCH, get element EID (parent, name, payload).
Modified: subversion/branches/move-tracking-2/subversion/include/private/svn_branch_impl.h
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/include/private/svn_branch_impl.h?rev=1713479&r1=1713478&r2=1713479&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/include/private/svn_branch_impl.h (original)
+++ subversion/branches/move-tracking-2/subversion/include/private/svn_branch_impl.h Mon Nov 9 17:03:18 2015
@@ -151,7 +151,7 @@ struct svn_branch_txn_vtable_t
typedef svn_error_t *(*branch_state_v_get_elements_t)(
svn_branch_state_t *branch,
- const svn_element_tree_t **element_tree_p,
+ svn_element_tree_t **element_tree_p,
apr_pool_t *result_pool);
typedef svn_error_t *(*branch_state_v_get_element_t)(
Modified: subversion/branches/move-tracking-2/subversion/include/private/svn_element.h
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/include/private/svn_element.h?rev=1713479&r1=1713478&r2=1713479&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/include/private/svn_element.h (original)
+++ subversion/branches/move-tracking-2/subversion/include/private/svn_element.h Mon Nov 9 17:03:18 2015
@@ -333,6 +333,17 @@ svn_element_tree_get_path_by_eid(const s
int eid,
apr_pool_t *result_pool);
+/* Return the subtree rooted at EID within ELEMENT_TREE.
+ *
+ * The result is limited by the lifetime of ELEMENT_TREE. It includes a
+ * shallow copy of the mapping in ELEMENT_TREE: the hash table is
+ * duplicated but the keys and values (element content data) are not.
+ */
+svn_element_tree_t *
+svn_element_tree_get_subtree_at_eid(svn_element_tree_t *element_tree,
+ int eid,
+ apr_pool_t *result_pool);
+
/** @} */
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=1713479&r1=1713478&r2=1713479&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c Mon Nov 9 17:03:18 2015
@@ -268,7 +268,12 @@ branch_txn_branch(svn_branch_txn_t *txn,
from->rev, from->bid, from->eid);
}
- from_subtree = svn_branch_get_element_tree_at_eid(from_branch, from->eid,
+ SVN_ERR_ASSERT(from_branch->priv->is_flat);
+
+ SVN_ERR(svn_branch_state_get_elements(from_branch, &from_subtree,
+ scratch_pool));
+ from_subtree = svn_element_tree_get_subtree_at_eid(from_subtree,
+ from->eid,
scratch_pool);
/* Source element must exist */
if (! from_subtree)
@@ -783,9 +788,13 @@ copy_subtree(const svn_branch_el_rev_id_
SVN_DBG(("cp subtree from e%d to e%d/%s",
from_el_rev->eid, to_parent_eid, to_name));
- new_subtree = svn_branch_get_element_tree_at_eid(from_el_rev->branch,
- from_el_rev->eid,
- scratch_pool);
+ SVN_ERR_ASSERT(from_el_rev->branch->priv->is_flat);
+
+ SVN_ERR(svn_branch_state_get_elements(from_el_rev->branch, &new_subtree,
+ scratch_pool));
+ new_subtree = svn_element_tree_get_subtree_at_eid(new_subtree,
+ from_el_rev->eid,
+ scratch_pool);
/* copy the subtree, assigning new EIDs */
SVN_ERR(svn_branch_map_add_subtree(to_branch, -1 /*to_eid*/,
@@ -942,7 +951,7 @@ branch_validate_element(const svn_branch
static svn_error_t *
branch_state_get_elements(svn_branch_state_t *branch,
- const svn_element_tree_t **element_tree_p,
+ svn_element_tree_t **element_tree_p,
apr_pool_t *result_pool)
{
*element_tree_p = branch->priv->element_tree;
@@ -1044,33 +1053,6 @@ branch_state_alter(svn_branch_state_t *b
return SVN_NO_ERROR;
}
-svn_element_tree_t *
-svn_branch_get_element_tree_at_eid(svn_branch_state_t *branch,
- int eid,
- apr_pool_t *result_pool)
-{
- svn_element_tree_t *new_subtree;
- svn_element_content_t *subtree_root_element;
-
- SVN_ERR_ASSERT_NO_RETURN(branch->priv->is_flat);
-
- new_subtree = svn_element_tree_create(branch->priv->element_tree->e_map, eid,
- result_pool);
-
- /* Purge orphans */
- svn_element_tree_purge_orphans(new_subtree->e_map,
- new_subtree->root_eid, result_pool);
-
- /* Remove 'parent' and 'name' attributes from subtree root element */
- subtree_root_element
- = svn_element_tree_get(new_subtree, new_subtree->root_eid);
- svn_element_tree_set(new_subtree, new_subtree->root_eid,
- svn_element_content_create(
- -1, "", subtree_root_element->payload, result_pool));
-
- return new_subtree;
-}
-
/* An #svn_branch_state_t method. */
static svn_error_t *
branch_state_purge(svn_branch_state_t *branch,
@@ -1221,7 +1203,7 @@ branch_instantiate_elements(svn_branch_s
svn_error_t *
svn_branch_state_get_elements(svn_branch_state_t *branch,
- const svn_element_tree_t **element_tree_p,
+ svn_element_tree_t **element_tree_p,
apr_pool_t *result_pool)
{
SVN_ERR(branch->vtable->get_elements(branch,
Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/branch_compat.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/branch_compat.c?rev=1713479&r1=1713478&r2=1713479&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/branch_compat.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/branch_compat.c Mon Nov 9 17:03:18 2015
@@ -1149,7 +1149,7 @@ convert_branch_to_paths(apr_hash_t *path
apr_pool_t *scratch_pool)
{
apr_hash_index_t *hi;
- const svn_element_tree_t *elements;
+ svn_element_tree_t *elements;
/* assert(branch is at a sequence point); */
Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/branch_nested.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/branch_nested.c?rev=1713479&r1=1713478&r2=1713479&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/branch_nested.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/branch_nested.c Mon Nov 9 17:03:18 2015
@@ -128,7 +128,7 @@ svn_branch_get_immediate_subbranches(svn
{
svn_array_t *subbranches = svn_array_make(result_pool);
const char *branch_id = svn_branch_get_id(branch, scratch_pool);
- const svn_element_tree_t *elements;
+ svn_element_tree_t *elements;
apr_hash_index_t *hi;
SVN_ERR(svn_branch_state_get_elements(branch, &elements, scratch_pool));
@@ -172,16 +172,16 @@ svn_branch_get_subtree(svn_branch_state_
int eid,
apr_pool_t *result_pool)
{
+ svn_element_tree_t *element_tree;
svn_branch_subtree_t *new_subtree;
apr_array_header_t *subbranches;
SVN_ITER_T(svn_branch_state_t) *bi;
- SVN_BRANCH_SEQUENCE_POINT(branch);
-
+ SVN_ERR(svn_branch_state_get_elements(branch, &element_tree, result_pool));
+ element_tree = svn_element_tree_get_subtree_at_eid(element_tree, eid,
+ result_pool);
new_subtree
- = svn_branch_subtree_create(
- svn_branch_get_element_tree_at_eid(branch, eid, result_pool)->e_map,
- eid, result_pool);
+ = svn_branch_subtree_create(element_tree->e_map, eid, result_pool);
new_subtree->predecessor = svn_branch_rev_bid_dup(branch->predecessor,
result_pool);
Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/element.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/element.c?rev=1713479&r1=1713478&r2=1713479&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/element.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/element.c Mon Nov 9 17:03:18 2015
@@ -405,3 +405,28 @@ svn_element_tree_get_path_by_eid(const s
return path;
}
+svn_element_tree_t *
+svn_element_tree_get_subtree_at_eid(svn_element_tree_t *element_tree,
+ int eid,
+ apr_pool_t *result_pool)
+{
+ svn_element_tree_t *new_subtree;
+ svn_element_content_t *subtree_root_element;
+
+ new_subtree = svn_element_tree_create(element_tree->e_map, eid,
+ result_pool);
+
+ /* Purge orphans */
+ svn_element_tree_purge_orphans(new_subtree->e_map,
+ new_subtree->root_eid, result_pool);
+
+ /* Remove 'parent' and 'name' attributes from subtree root element */
+ subtree_root_element
+ = svn_element_tree_get(new_subtree, new_subtree->root_eid);
+ svn_element_tree_set(new_subtree, new_subtree->root_eid,
+ svn_element_content_create(
+ -1, "", subtree_root_element->payload, result_pool));
+
+ return new_subtree;
+}
+
Modified: subversion/branches/move-tracking-2/subversion/libsvn_ra/ra_loader.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_ra/ra_loader.c?rev=1713479&r1=1713478&r2=1713479&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_ra/ra_loader.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_ra/ra_loader.c Mon Nov 9 17:03:18 2015
@@ -743,7 +743,7 @@ txn_fetch_payloads(svn_branch_txn_t *txn
scratch_pool))
{
svn_branch_state_t *branch = bi->val;
- const svn_element_tree_t *element_tree;
+ svn_element_tree_t *element_tree;
SVN_ITER_T(svn_element_content_t) *hi;
SVN_ERR(svn_branch_state_get_elements(branch, &element_tree,
Modified: subversion/branches/move-tracking-2/subversion/svnmover/merge3.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnmover/merge3.c?rev=1713479&r1=1713478&r2=1713479&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnmover/merge3.c (original)
+++ subversion/branches/move-tracking-2/subversion/svnmover/merge3.c Mon Nov 9 17:03:18 2015
@@ -791,7 +791,7 @@ detect_clashes(apr_hash_t **clashes_p,
apr_pool_t *scratch_pool)
{
apr_hash_t *clashes = apr_hash_make(result_pool);
- const svn_element_tree_t *elements;
+ svn_element_tree_t *elements;
SVN_ITER_T(svn_element_content_t) *pi;
int prev_eid = -1;
svn_element_content_t *prev_element = NULL;
@@ -844,7 +844,7 @@ detect_cycles(apr_hash_t **cycles_p,
{
apr_hash_t *cycles = apr_hash_make(result_pool);
SVN_ITER_T(svn_element_content_t) *pi;
- const svn_element_tree_t *elements;
+ svn_element_tree_t *elements;
SVN_ERR(svn_branch_state_get_elements(branch, &elements, scratch_pool));
for (SVN_HASH_ITER(pi, scratch_pool, elements->e_map))
@@ -885,7 +885,7 @@ detect_orphans(apr_hash_t **orphans_p,
{
apr_hash_t *orphans = apr_hash_make(result_pool);
SVN_ITER_T(svn_element_content_t) *pi;
- const svn_element_tree_t *elements;
+ svn_element_tree_t *elements;
SVN_ERR(svn_branch_state_get_elements(branch, &elements, scratch_pool));
for (SVN_HASH_ITER(pi, scratch_pool, elements->e_map))
@@ -925,7 +925,7 @@ branch_merge_subtree_r(svn_branch_txn_t
apr_hash_t *e_conflicts = apr_hash_make(scratch_pool);
conflict_storage_t *conflict_storage = conflict_storage_create(result_pool);
SVN_ITER_T(svn_element_content_t *) *pi;
- const svn_element_tree_t *src_elements, *tgt_elements, *yca_elements;
+ svn_element_tree_t *src_elements, *tgt_elements, *yca_elements;
apr_hash_t *all_elements;
const merge_conflict_policy_t policy = { TRUE, TRUE, TRUE, TRUE, TRUE };
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
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=1713479&r1=1713478&r2=1713479&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c (original)
+++ subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c Mon Nov 9 17:03:18 2015
@@ -401,7 +401,7 @@ txn_is_changed(svn_branch_txn_t *edit_tx
svn_branch_state_t *base_branch
= svn_branch_txn_get_branch_by_id(base_txn, edit_branch->bid,
scratch_pool);
- const svn_element_tree_t *edit_branch_elements, *base_branch_elements;
+ svn_element_tree_t *edit_branch_elements, *base_branch_elements;
apr_hash_t *diff;
if (! base_branch)
@@ -539,8 +539,8 @@ svn_branch_replay(svn_branch_txn_t *edit
if (right_branch)
{
/* Replay this branch */
- const svn_element_tree_t *s_left = NULL;
- const svn_element_tree_t *s_right = NULL;
+ svn_element_tree_t *s_left = NULL;
+ svn_element_tree_t *s_right = NULL;
if (left_branch)
SVN_ERR(svn_branch_state_get_elements(left_branch, &s_left,
@@ -1052,7 +1052,7 @@ list_branch_elements(svn_branch_state_t
apr_pool_t *scratch_pool)
{
apr_hash_t *paths_to_eid = apr_hash_make(scratch_pool);
- const svn_element_tree_t *elements;
+ svn_element_tree_t *elements;
apr_hash_index_t *hi;
SVN_ITER_T(int) *pi;
@@ -1115,7 +1115,7 @@ static svn_error_t *
list_branch_elements_by_eid(svn_branch_state_t *branch,
apr_pool_t *scratch_pool)
{
- const svn_element_tree_t *elements;
+ svn_element_tree_t *elements;
SVN_ITER_T(svn_element_content_t) *pi;
svnmover_notify_v("%s", elements_by_eid_header);