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