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/03 16:55:55 UTC

svn commit: r1717785 - in /subversion/trunk: subversion/include/private/ subversion/libsvn_delta/ tools/dev/svnmover/

Author: julianfoad
Date: Thu Dec  3 15:55:55 2015
New Revision: 1717785

URL: http://svn.apache.org/viewvc?rev=1717785&view=rev
Log:
In 'svnmover', tweak the 'branch state' API to slightly simplify both the
implementation and some callers.

* subversion/include/private/svn_branch.h
  (svn_branch__state_set_element): New.

* subversion/include/private/svn_branch_impl.h
  (svn_branch__state_v_set_element_t): New.
  (svn_branch__state_v_alter_one_t,
   svn_branch__state_v_delete_one_t): Delete.
  (svn_branch__state_vtable_t): Replace 'alter_one' and 'delete_one' with
    'set_element'.

* subversion/include/private/svn_element.h,
  subversion/libsvn_delta/element.c
  (svn_element__tree_set): Constify the input.

* subversion/libsvn_delta/branch.c
  (branch_map_set): Constify the input.
  (branch_state_delete_one,
   branch_state_alter): Delete.
  (branch_state_set_element,
   svn_branch__state_set_element): New.
  (svn_branch__state_alter_one,
   svn_branch__state_delete_one): Change implementations to forward to
    svn_branch__state_set_element.
  (branch_state_create): Update the vtable.
  (svn_branch__map_add_subtree,
   svn_branch__state_parse): Update callers.

* subversion/libsvn_delta/branch_nested.c
  (branch_instantiate_elements): Use the new method. Add a missing SVN_ERR().

* tools/dev/svnmover/merge3.c
  (branch_merge_subtree_r): Use the new method.

* tools/dev/svnmover/svnmover.c
  (branch_elements_replay,
   update_wc_base_r): Use the new method.

Modified:
    subversion/trunk/subversion/include/private/svn_branch.h
    subversion/trunk/subversion/include/private/svn_branch_impl.h
    subversion/trunk/subversion/include/private/svn_element.h
    subversion/trunk/subversion/libsvn_delta/branch.c
    subversion/trunk/subversion/libsvn_delta/branch_nested.c
    subversion/trunk/subversion/libsvn_delta/element.c
    subversion/trunk/tools/dev/svnmover/merge3.c
    subversion/trunk/tools/dev/svnmover/svnmover.c

Modified: subversion/trunk/subversion/include/private/svn_branch.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_branch.h?rev=1717785&r1=1717784&r2=1717785&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_branch.h (original)
+++ subversion/trunk/subversion/include/private/svn_branch.h Thu Dec  3 15:55:55 2015
@@ -514,6 +514,17 @@ svn_branch__state_get_element(const svn_
                               int eid,
                               apr_pool_t *result_pool);
 
+/** Equivalent to
+ *    alter_one(..., element->parent_eid, element->name, element->payload),
+ * or, if @a element is null, to
+ *    delete_one(...).
+ */
+svn_error_t *
+svn_branch__state_set_element(svn_branch__state_t *branch,
+                              int eid,
+                              const svn_element__content_t *element,
+                              apr_pool_t *result_pool);
+
 /** Specify that the element of @a branch identified by @a eid shall not
  * be present.
  *

Modified: subversion/trunk/subversion/include/private/svn_branch_impl.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_branch_impl.h?rev=1717785&r1=1717784&r2=1717785&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_branch_impl.h (original)
+++ subversion/trunk/subversion/include/private/svn_branch_impl.h Thu Dec  3 15:55:55 2015
@@ -160,12 +160,10 @@ typedef svn_error_t *(*svn_branch__state
   int eid,
   apr_pool_t *result_pool);
 
-typedef svn_error_t *(*svn_branch__state_v_alter_one_t)(
+typedef svn_error_t *(*svn_branch__state_v_set_element_t)(
   svn_branch__state_t *branch,
   svn_branch__eid_t eid,
-  svn_branch__eid_t new_parent_eid,
-  const char *new_name,
-  const svn_element__payload_t *new_payload,
+  const svn_element__content_t *element,
   apr_pool_t *scratch_pool);
 
 typedef svn_error_t *(*svn_branch__state_v_copy_one_t)(
@@ -184,11 +182,6 @@ typedef svn_error_t *(*svn_branch__state
   const char *new_name,
   apr_pool_t *scratch_pool);
 
-typedef svn_error_t *(*svn_branch__state_v_delete_one_t)(
-  svn_branch__state_t *branch,
-  svn_branch__eid_t eid,
-  apr_pool_t *scratch_pool);
-
 typedef svn_error_t *(*svn_branch__state_v_purge_t)(
   svn_branch__state_t *branch,
   apr_pool_t *scratch_pool);
@@ -209,10 +202,9 @@ struct svn_branch__state_vtable_t
 
   svn_branch__state_v_get_elements_t get_elements;
   svn_branch__state_v_get_element_t get_element;
-  svn_branch__state_v_alter_one_t alter_one;
+  svn_branch__state_v_set_element_t set_element;
   svn_branch__state_v_copy_one_t copy_one;
   svn_branch__state_v_copy_tree_t copy_tree;
-  svn_branch__state_v_delete_one_t delete_one;
   svn_branch__state_v_purge_t purge;
   svn_branch__state_v_get_merge_ancestor_t get_merge_ancestor;
   svn_branch__state_v_add_merge_ancestor_t add_merge_ancestor;

Modified: subversion/trunk/subversion/include/private/svn_element.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_element.h?rev=1717785&r1=1717784&r2=1717785&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_element.h (original)
+++ subversion/trunk/subversion/include/private/svn_element.h Thu Dec  3 15:55:55 2015
@@ -351,7 +351,7 @@ svn_element__tree_get(const svn_element_
 svn_error_t *
 svn_element__tree_set(svn_element__tree_t *tree,
                       int eid,
-                      svn_element__content_t *element);
+                      const svn_element__content_t *element);
 
 /* Purge entries from E_MAP that don't connect, via parent directory hierarchy,
  * to ROOT_EID. In other words, remove elements that have been implicitly

Modified: subversion/trunk/subversion/libsvn_delta/branch.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_delta/branch.c?rev=1717785&r1=1717784&r2=1717785&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_delta/branch.c (original)
+++ subversion/trunk/subversion/libsvn_delta/branch.c Thu Dec  3 15:55:55 2015
@@ -1020,7 +1020,7 @@ branch_state_get_element(const svn_branc
 static void
 branch_map_set(svn_branch__state_t *branch,
                int eid,
-               svn_element__content_t *element)
+               const svn_element__content_t *element)
 {
   apr_pool_t *map_pool = apr_hash_pool_get(branch->priv->element_tree->e_map);
 
@@ -1035,44 +1035,32 @@ branch_map_set(svn_branch__state_t *bran
 
 /* An #svn_branch__state_t method. */
 static svn_error_t *
-branch_state_delete_one(svn_branch__state_t *branch,
-                        svn_branch__eid_t eid,
-                        apr_pool_t *scratch_pool)
-{
-  SVN_ERR_ASSERT(EID_IS_ALLOCATED(branch, eid));
-
-  branch_map_set(branch, eid, NULL);
-
-  return SVN_NO_ERROR;
-}
-
-/* An #svn_branch__state_t method. */
-static svn_error_t *
-branch_state_alter(svn_branch__state_t *branch,
-                   svn_branch__eid_t eid,
-                   svn_branch__eid_t new_parent_eid,
-                   const char *new_name,
-                   const svn_element__payload_t *new_payload,
-                   apr_pool_t *scratch_pool)
+branch_state_set_element(svn_branch__state_t *branch,
+                         svn_branch__eid_t eid,
+                         const svn_element__content_t *element,
+                         apr_pool_t *scratch_pool)
 {
   apr_pool_t *map_pool = apr_hash_pool_get(branch->priv->element_tree->e_map);
-  svn_element__content_t *element
-    = svn_element__content_create(new_parent_eid, new_name, new_payload,
-                                  map_pool);
 
   /* EID must be a valid element id */
   SVN_ERR_ASSERT(EID_IS_ALLOCATED(branch, eid));
-  /* NEW_PAYLOAD must be specified, either in full or by reference */
-  SVN_ERR_ASSERT(new_payload);
 
-  if ((new_parent_eid == -1) != IS_BRANCH_ROOT_EID(branch, eid)
-      || (*new_name == '\0') != IS_BRANCH_ROOT_EID(branch, eid))
+  if (element)
     {
-      return svn_error_createf(SVN_BRANCH__ERR, NULL,
-                               _("Cannot set e%d to (parent=e%d, name='%s'): "
-                                 "branch root is e%d"),
-                               eid, new_parent_eid, new_name,
-                               branch->priv->element_tree->root_eid);
+      element = svn_element__content_dup(element, map_pool);
+
+      /* NEW_PAYLOAD must be specified, either in full or by reference */
+      SVN_ERR_ASSERT(element->payload);
+
+      if ((element->parent_eid == -1) != IS_BRANCH_ROOT_EID(branch, eid)
+          || (*element->name == '\0') != IS_BRANCH_ROOT_EID(branch, eid))
+        {
+          return svn_error_createf(SVN_BRANCH__ERR, NULL,
+                                   _("Cannot set e%d to (parent=e%d, name='%s'): "
+                                     "branch root is e%d"),
+                                   eid, element->parent_eid, element->name,
+                                   branch->priv->element_tree->root_eid);
+        }
     }
 
   /* Insert the new version */
@@ -1194,10 +1182,11 @@ svn_branch__map_add_subtree(svn_branch__
 
   /* Create the new subtree root element */
   new_root_content = svn_element__tree_get(new_subtree, new_subtree->root_eid);
-  SVN_ERR(branch_state_alter(to_branch, to_eid,
-                             new_parent_eid, new_name,
-                             new_root_content->payload,
-                             scratch_pool));
+  new_root_content = svn_element__content_create(new_parent_eid, new_name,
+                                                 new_root_content->payload,
+                                                 scratch_pool);
+  SVN_ERR(branch_state_set_element(to_branch, to_eid, new_root_content,
+                                   scratch_pool));
 
   /* Process its immediate children */
   for (hi = apr_hash_first(scratch_pool, new_subtree->e_map);
@@ -1280,6 +1269,18 @@ svn_branch__state_get_element(const svn_
 }
 
 svn_error_t *
+svn_branch__state_set_element(svn_branch__state_t *branch,
+                              int eid,
+                              const svn_element__content_t *element,
+                              apr_pool_t *scratch_pool)
+{
+  SVN_ERR(branch->vtable->set_element(branch,
+                                      eid, element,
+                                      scratch_pool));
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
 svn_branch__state_alter_one(svn_branch__state_t *branch,
                             svn_branch__eid_t eid,
                             svn_branch__eid_t new_parent_eid,
@@ -1287,9 +1288,11 @@ svn_branch__state_alter_one(svn_branch__
                             const svn_element__payload_t *new_payload,
                             apr_pool_t *scratch_pool)
 {
-  SVN_ERR(branch->vtable->alter_one(branch,
-                                    eid, new_parent_eid, new_name, new_payload,
-                                    scratch_pool));
+  svn_element__content_t *element
+    = svn_element__content_create(new_parent_eid, new_name, new_payload,
+                                  scratch_pool);
+
+  SVN_ERR(svn_branch__state_set_element(branch, eid, element, scratch_pool));
   return SVN_NO_ERROR;
 }
 
@@ -1311,9 +1314,7 @@ svn_branch__state_delete_one(svn_branch_
                              svn_branch__eid_t eid,
                              apr_pool_t *scratch_pool)
 {
-  SVN_ERR(branch->vtable->delete_one(branch,
-                                     eid,
-                                     scratch_pool));
+  SVN_ERR(svn_branch__state_set_element(branch, eid, NULL, scratch_pool));
   return SVN_NO_ERROR;
 }
 
@@ -1385,10 +1386,9 @@ branch_state_create(const char *bid,
     {0},
     branch_state_get_elements,
     branch_state_get_element,
-    branch_state_alter,
+    branch_state_set_element,
     branch_state_copy_one,
     branch_state_copy_tree,
-    branch_state_delete_one,
     branch_state_purge,
     branch_state_get_merge_ancestor,
     branch_state_add_merge_ancestor,
@@ -1611,6 +1611,8 @@ svn_branch__state_parse(svn_branch__stat
       if (this_name)
         {
           svn_element__payload_t *payload;
+          svn_element__content_t *element;
+
           if (! is_subbranch)
             {
               payload = svn_element__payload_create_ref(txn->rev, bid, eid,
@@ -1621,9 +1623,11 @@ svn_branch__state_parse(svn_branch__stat
               payload
                 = svn_element__payload_create_subbranch(result_pool);
             }
-          SVN_ERR(branch_state_alter(
-            branch_state, eid, this_parent_eid, this_name, payload,
-            scratch_pool));
+          element = svn_element__content_create(this_parent_eid,
+                                                this_name, payload,
+                                                scratch_pool);
+          SVN_ERR(branch_state_set_element(branch_state, eid, element,
+                                           scratch_pool));
         }
     }
 

Modified: subversion/trunk/subversion/libsvn_delta/branch_nested.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_delta/branch_nested.c?rev=1717785&r1=1717784&r2=1717785&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_delta/branch_nested.c (original)
+++ subversion/trunk/subversion/libsvn_delta/branch_nested.c Thu Dec  3 15:55:55 2015
@@ -244,11 +244,8 @@ branch_instantiate_elements(svn_branch__
       int this_eid = svn_eid__hash_this_key(hi);
       svn_element__content_t *this_element = apr_hash_this_val(hi);
 
-      svn_branch__state_alter_one(to_branch, this_eid,
-                                  this_element->parent_eid,
-                                  this_element->name,
-                                  this_element->payload,
-                                  scratch_pool);
+      SVN_ERR(svn_branch__state_set_element(to_branch, this_eid,
+                                            this_element, scratch_pool));
     }
 
   return SVN_NO_ERROR;

Modified: subversion/trunk/subversion/libsvn_delta/element.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_delta/element.c?rev=1717785&r1=1717784&r2=1717785&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_delta/element.c (original)
+++ subversion/trunk/subversion/libsvn_delta/element.c Thu Dec  3 15:55:55 2015
@@ -376,7 +376,7 @@ svn_element__tree_get(const svn_element_
 svn_error_t *
 svn_element__tree_set(svn_element__tree_t *tree,
                       int eid,
-                      svn_element__content_t *element)
+                      const svn_element__content_t *element)
 {
   svn_eid__hash_set(tree->e_map, eid, element);
 

Modified: subversion/trunk/tools/dev/svnmover/merge3.c
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dev/svnmover/merge3.c?rev=1717785&r1=1717784&r2=1717785&view=diff
==============================================================================
--- subversion/trunk/tools/dev/svnmover/merge3.c (original)
+++ subversion/trunk/tools/dev/svnmover/merge3.c Thu Dec  3 15:55:55 2015
@@ -1275,9 +1275,8 @@ branch_merge_subtree_r(svn_branch__txn_t
                             eid, result->name,
                             subbranch_str(tgt->branch, eid, iterpool));
 
-          SVN_ERR(svn_branch__state_alter_one(tgt->branch, eid,
-                                              result->parent_eid, result->name,
-                                              result->payload, iterpool));
+          SVN_ERR(svn_branch__state_set_element(tgt->branch, eid,
+                                                result, iterpool));
 
           SVN_ERR(merge_subbranch(edit_txn, src, tgt, yca, eid, iterpool));
         }
@@ -1305,9 +1304,8 @@ branch_merge_subtree_r(svn_branch__txn_t
            * (which is not specified here, but will need to be),
            * which may be in this branch or in another branch.
            */
-          SVN_ERR(svn_branch__state_alter_one(tgt->branch, eid,
-                                              result->parent_eid, result->name,
-                                              result->payload, iterpool));
+          SVN_ERR(svn_branch__state_set_element(tgt->branch, eid,
+                                                result, iterpool));
 
           SVN_ERR(merge_subbranch(edit_txn, src, tgt, yca, eid, iterpool));
         }

Modified: subversion/trunk/tools/dev/svnmover/svnmover.c
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dev/svnmover/svnmover.c?rev=1717785&r1=1717784&r2=1717785&view=diff
==============================================================================
--- subversion/trunk/tools/dev/svnmover/svnmover.c (original)
+++ subversion/trunk/tools/dev/svnmover/svnmover.c Thu Dec  3 15:55:55 2015
@@ -699,17 +699,8 @@ branch_elements_replay(svn_branch__state
                      || svn_element__payload_invariants(e0->payload));
       SVN_ERR_ASSERT(!e1
                      || svn_element__payload_invariants(e1->payload));
-      if (e1)
-        {
-          SVN_ERR(svn_branch__state_alter_one(edit_branch, eid,
-                                              e1->parent_eid, e1->name,
-                                              e1->payload, scratch_pool));
-        }
-      else
-        {
-          SVN_ERR(svn_branch__state_delete_one(edit_branch, eid,
-                                               scratch_pool));
-        }
+      SVN_ERR(svn_branch__state_set_element(edit_branch, eid,
+                                            e1, scratch_pool));
     }
 
   return SVN_NO_ERROR;
@@ -972,12 +963,8 @@ update_wc_base_r(svnmover_wc_t *wc,
       if (work_branch)
         SVN_ERR(svn_branch__state_get_element(work_branch, &content,
                                               eid, scratch_pool));
-      if (content)
-        SVN_ERR(svn_branch__state_alter_one(base_branch, eid,
-                                            content->parent_eid, content->name,
-                                            content->payload, scratch_pool));
-      else
-        SVN_ERR(svn_branch__state_delete_one(base_branch, eid, scratch_pool));
+      SVN_ERR(svn_branch__state_set_element(base_branch, eid,
+                                            content, scratch_pool));
       svnmover_wc_set_base_rev(wc, base_branch, eid, new_rev);
 
       /* recurse into nested branches that exist in working */