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/14 18:15:42 UTC

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

Author: julianfoad
Date: Mon Dec 14 17:15:42 2015
New Revision: 1719961

URL: http://svn.apache.org/viewvc?rev=1719961&view=rev
Log:
In 'svnmover', consolidate some branching methods. Basically, delete the
two 'add branch' methods because 'open branch' can do the same job.

* subversion/include/private/svn_branch.h
  (svn_branch__txn_get_branches): Add comments.
  (svn_branch__txn_open_branch): Add comments. Rename a parameter.
  (svn_branch__state_t): Add comments.
  (svn_branch__txn_add_branch,
   svn_branch__txn_add_new_branch): Delete.

* subversion/include/private/svn_branch_impl.h
  (svn_branch__txn_v_add_branch_t,
   svn_branch__txn_v_add_new_branch_t): Delete.
  (svn_branch__txn_vtable_t): Delete those entries from the vtable.

* subversion/libsvn_delta/branch.c
  (branch_txn_add_branch,
   branch_txn_add_new_branch): Delete.
  (branch_txn_open_branch,
   branch_txn_branch): Don't use svn_branch__txn_add_new_branch().
  (svn_branch__txn_add_branch,
   svn_branch__txn_add_new_branch): Delete.
  (svn_branch__txn_open_branch): Rename a parameter.
  (branch_txn_create): Update the vtable.
  (svn_branch__txn_parse): Don't use svn_branch__txn_add_branch().

* subversion/libsvn_delta/branch_compat.c
  (compat_branch_txn_add_branch,
   compat_branch_txn_add_new_branch): Delete.
  (svn_branch__compat_txn_from_delta_for_commit): Update the vtable.

* subversion/libsvn_delta/branch_nested.c
  (svn_branch__instantiate_elements_r): Use svn_branch__txn_open_branch()
    instead of ...add_new_branch.
  (nested_branch_txn_add_branch,
   nested_branch_txn_add_new_branch): Delete.
  (svn_branch__nested_txn_create): Update the vtable.

* tools/dev/svnmover/svnmover.c
  (do_mkbranch): Add a comment.

Modified:
    subversion/trunk/subversion/include/private/svn_branch.h
    subversion/trunk/subversion/include/private/svn_branch_impl.h
    subversion/trunk/subversion/libsvn_delta/branch.c
    subversion/trunk/subversion/libsvn_delta/branch_compat.c
    subversion/trunk/subversion/libsvn_delta/branch_nested.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=1719961&r1=1719960&r2=1719961&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_branch.h (original)
+++ subversion/trunk/subversion/include/private/svn_branch.h Mon Dec 14 17:15:42 2015
@@ -166,6 +166,11 @@ svn_branch__txn_create(const svn_branch_
 
 /* Return all the branches in TXN.
  *
+ * These branches are available for reading. (Some of them may also be
+ * mutable.)
+ *
+ * ### Rename to 'list_branches' & return only their ids?
+ *
  * Return an empty array if there are none.
  */
 apr_array_header_t *
@@ -199,11 +204,16 @@ svn_branch__txn_new_eid(svn_branch__txn_
                         int *new_eid_p,
                         apr_pool_t *scratch_pool);
 
-/** Create a new branch or access an existing branch.
+/** Open for writing, either a new branch or an existing branch.
  *
- * When creating a branch, declare its root element id to be ROOT_EID. Do
+ * When creating a new branch, declare its root element id to be ROOT_EID. Do
  * not instantiate the root element, nor any other elements.
  *
+ * ### TODO: Change this: Allow specifying the initial tree state, by
+ *     reference to a committed tree. (Default / typically: the main
+ *     parent in 'history' param.) 'empty' is a common and valid option.
+ * ### TODO: Take a 'history' parameter; 'none' is a valid option.
+ *
  * We use a common 'open subbranch' method for both 'find' and 'add'
  * cases, according to the principle that 'editing' a txn should dictate
  * the new state without reference to the old state.
@@ -211,15 +221,13 @@ svn_branch__txn_new_eid(svn_branch__txn_
  * This method returns a mutable 'branch state' object which is a part of
  * the txn.
  *
- * When adding a new branch, ROOT_EID is used.
- *
  * ### When opening ('finding') an existing branch, ROOT_EID should match
  *     it. (Should we check, and throw an error if not?)
  */
 svn_error_t *
 svn_branch__txn_open_branch(svn_branch__txn_t *txn,
                             svn_branch__state_t **new_branch_p,
-                            const char *new_branch_id,
+                            const char *branch_id,
                             int root_eid,
                             apr_pool_t *result_pool,
                             apr_pool_t *scratch_pool);
@@ -323,6 +331,8 @@ struct svn_branch__state_t
   const char *bid;
 
   /* The revision to which this branch state belongs */
+  /* ### Later we should remove this and let a single state be sharable
+     by multiple txns. */
   svn_branch__txn_t *txn;
 
 };
@@ -385,26 +395,6 @@ svn_branch__id_unnest(const char **outer
                       const char *bid,
                       apr_pool_t *result_pool);
 
-/* Register the existence of BRANCH in TXN.
- */
-svn_error_t *
-svn_branch__txn_add_branch(svn_branch__txn_t *txn,
-                           svn_branch__state_t *branch,
-                           apr_pool_t *scratch_pool);
-
-/* Create a new branch with branch id BID, with no elements
- * (not even a root element).
- *
- * Create and return a new branch object. Register its existence in TXN.
- *
- * Set the root element to ROOT_EID.
- */
-svn_branch__state_t *
-svn_branch__txn_add_new_branch(svn_branch__txn_t *txn,
-                               const char *bid,
-                               int root_eid,
-                               apr_pool_t *scratch_pool);
-
 /* Remove the branch with id BID from the list of branches in TXN.
  */
 svn_error_t *

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=1719961&r1=1719960&r2=1719961&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_branch_impl.h (original)
+++ subversion/trunk/subversion/include/private/svn_branch_impl.h Mon Dec 14 17:15:42 2015
@@ -59,17 +59,6 @@ typedef apr_array_header_t *(*svn_branch
   const svn_branch__txn_t *txn,
   apr_pool_t *result_pool);
 
-typedef svn_error_t *(*svn_branch__txn_v_add_branch_t)(
-  svn_branch__txn_t *txn,
-  svn_branch__state_t *branch,
-  apr_pool_t *scratch_pool);
-
-typedef svn_branch__state_t *(*svn_branch__txn_v_add_new_branch_t)(
-  svn_branch__txn_t *txn,
-  const char *bid,
-  int root_eid,
-  apr_pool_t *scratch_pool);
-
 typedef svn_error_t *(*svn_branch__txn_v_delete_branch_t)(
   svn_branch__txn_t *txn,
   const char *bid,
@@ -128,8 +117,6 @@ struct svn_branch__txn_vtable_t
 
   /* Methods. */
   svn_branch__txn_v_get_branches_t get_branches;
-  svn_branch__txn_v_add_branch_t add_branch;
-  svn_branch__txn_v_add_new_branch_t add_new_branch;
   svn_branch__txn_v_delete_branch_t delete_branch;
   svn_branch__txn_v_get_num_new_eids_t get_num_new_eids;
   svn_branch__txn_v_new_eid_t new_eid;

Modified: subversion/trunk/subversion/libsvn_delta/branch.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_delta/branch.c?rev=1719961&r1=1719960&r2=1719961&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_delta/branch.c (original)
+++ subversion/trunk/subversion/libsvn_delta/branch.c Mon Dec 14 17:15:42 2015
@@ -145,36 +145,6 @@ branch_txn_get_branches(const svn_branch
 
 /* An #svn_branch__txn_t method. */
 static svn_error_t *
-branch_txn_add_branch(svn_branch__txn_t *txn,
-                      svn_branch__state_t *branch,
-                      apr_pool_t *scratch_pool)
-{
-  APR_ARRAY_PUSH(txn->priv->branches, void *) = branch;
-
-  return SVN_NO_ERROR;
-}
-
-/* An #svn_branch__txn_t method. */
-static svn_branch__state_t *
-branch_txn_add_new_branch(svn_branch__txn_t *txn,
-                          const char *bid,
-                          int root_eid,
-                          apr_pool_t *scratch_pool)
-{
-  svn_branch__state_t *new_branch;
-
-  SVN_ERR_ASSERT_NO_RETURN(root_eid != -1);
-
-  new_branch = branch_state_create(bid, root_eid, txn,
-                                   txn->priv->branches->pool);
-
-  APR_ARRAY_PUSH(txn->priv->branches, void *) = new_branch;
-
-  return new_branch;
-}
-
-/* An #svn_branch__txn_t method. */
-static svn_error_t *
 branch_txn_delete_branch(svn_branch__txn_t *txn,
                          const char *bid,
                          apr_pool_t *scratch_pool)
@@ -223,25 +193,27 @@ branch_txn_new_eid(svn_branch__txn_t *tx
 static svn_error_t *
 branch_txn_open_branch(svn_branch__txn_t *txn,
                        svn_branch__state_t **new_branch_p,
-                       const char *new_branch_id,
+                       const char *branch_id,
                        int root_eid,
                        apr_pool_t *result_pool,
                        apr_pool_t *scratch_pool)
 {
   svn_branch__state_t *new_branch;
 
-  /* if the subbranch already exists, just return it */
+  /* if the branch already exists, just return it, else create it */
   new_branch
-    = svn_branch__txn_get_branch_by_id(txn, new_branch_id, scratch_pool);
+    = svn_branch__txn_get_branch_by_id(txn, branch_id, scratch_pool);
   if (new_branch)
     {
       SVN_ERR_ASSERT(root_eid == svn_branch__root_eid(new_branch));
     }
   else
     {
-      new_branch = svn_branch__txn_add_new_branch(txn,
-                                                  new_branch_id,
-                                                  root_eid, scratch_pool);
+      SVN_ERR_ASSERT_NO_RETURN(root_eid != -1);
+
+      new_branch = branch_state_create(branch_id, root_eid, txn,
+                                       txn->priv->branches->pool);
+      APR_ARRAY_PUSH(txn->priv->branches, void *) = new_branch;
     }
 
   if (new_branch_p)
@@ -288,9 +260,8 @@ branch_txn_branch(svn_branch__txn_t *txn
                                from->rev, from->bid, from->eid);
     }
 
-  new_branch = svn_branch__txn_add_new_branch(txn,
-                                              new_branch_id,
-                                              from->eid, scratch_pool);
+  SVN_ERR(branch_txn_open_branch(txn, &new_branch, new_branch_id,
+                                 from->eid, scratch_pool, scratch_pool));
 
   /* Populate the mapping from the 'from' source */
   SVN_ERR(branch_instantiate_elements(new_branch, from_subtree,
@@ -354,32 +325,6 @@ svn_branch__txn_get_branches(const svn_b
 }
 
 svn_error_t *
-svn_branch__txn_add_branch(svn_branch__txn_t *txn,
-                           svn_branch__state_t *branch,
-                           apr_pool_t *scratch_pool)
-{
-  SVN_ERR(txn->vtable->add_branch(txn,
-                                  branch,
-                                  scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-svn_branch__state_t *
-svn_branch__txn_add_new_branch(svn_branch__txn_t *txn,
-                               const char *bid,
-                               int root_eid,
-                               apr_pool_t *scratch_pool)
-{
-  svn_branch__state_t *new_branch
-    = txn->vtable->add_new_branch(txn,
-                                  bid, root_eid,
-                                  scratch_pool);
-
-  return new_branch;
-}
-
-svn_error_t *
 svn_branch__txn_delete_branch(svn_branch__txn_t *txn,
                               const char *bid,
                               apr_pool_t *scratch_pool)
@@ -415,14 +360,14 @@ svn_branch__txn_new_eid(svn_branch__txn_
 svn_error_t *
 svn_branch__txn_open_branch(svn_branch__txn_t *txn,
                             svn_branch__state_t **new_branch_p,
-                            const char *new_branch_id,
+                            const char *branch_id,
                             int root_eid,
                             apr_pool_t *result_pool,
                             apr_pool_t *scratch_pool)
 {
   SVN_ERR(txn->vtable->open_branch(txn,
                                    new_branch_p,
-                                   new_branch_id,
+                                   branch_id,
                                    root_eid, result_pool,
                                    scratch_pool));
   return SVN_NO_ERROR;
@@ -680,8 +625,6 @@ branch_txn_create(svn_branch__repos_t *r
   static const svn_branch__txn_vtable_t vtable = {
     {0},
     branch_txn_get_branches,
-    branch_txn_add_branch,
-    branch_txn_add_new_branch,
     branch_txn_delete_branch,
     branch_txn_get_num_new_eids,
     branch_txn_new_eid,
@@ -1701,7 +1644,7 @@ svn_branch__txn_parse(svn_branch__txn_t
 
       SVN_ERR(svn_branch__state_parse(&branch, txn, stream,
                                       result_pool, scratch_pool));
-      SVN_ERR(svn_branch__txn_add_branch(txn, branch, scratch_pool));
+      APR_ARRAY_PUSH(txn->priv->branches, void *) = branch;
     }
 
   *txn_p = txn;

Modified: subversion/trunk/subversion/libsvn_delta/branch_compat.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_delta/branch_compat.c?rev=1719961&r1=1719960&r2=1719961&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_delta/branch_compat.c (original)
+++ subversion/trunk/subversion/libsvn_delta/branch_compat.c Mon Dec 14 17:15:42 2015
@@ -1763,35 +1763,6 @@ compat_branch_txn_get_branches(const svn
 
 /* An #svn_branch__txn_t method. */
 static svn_error_t *
-compat_branch_txn_add_branch(svn_branch__txn_t *txn,
-                             svn_branch__state_t *branch,
-                             apr_pool_t *scratch_pool)
-{
-  /* Just forwarding: nothing more is needed. */
-  SVN_ERR(svn_branch__txn_add_branch(txn->priv->txn,
-                                     branch,
-                                     scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-/* An #svn_branch__txn_t method. */
-static svn_branch__state_t *
-compat_branch_txn_add_new_branch(svn_branch__txn_t *txn,
-                                 const char *bid,
-                                 int root_eid,
-                                 apr_pool_t *scratch_pool)
-{
-  /* Just forwarding: nothing more is needed. */
-  svn_branch__state_t *new_branch
-    = svn_branch__txn_add_new_branch(txn->priv->txn,
-                                     bid, root_eid,
-                                     scratch_pool);
-
-  return new_branch;
-}
-
-/* An #svn_branch__txn_t method. */
-static svn_error_t *
 compat_branch_txn_delete_branch(svn_branch__txn_t *txn,
                                 const char *bid,
                                 apr_pool_t *scratch_pool)
@@ -2012,8 +1983,6 @@ svn_branch__compat_txn_from_delta_for_co
   static const svn_branch__txn_vtable_t vtable = {
     {0},
     compat_branch_txn_get_branches,
-    compat_branch_txn_add_branch,
-    compat_branch_txn_add_new_branch,
     compat_branch_txn_delete_branch,
     compat_branch_txn_get_num_new_eids,
     compat_branch_txn_new_eid,

Modified: subversion/trunk/subversion/libsvn_delta/branch_nested.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_delta/branch_nested.c?rev=1719961&r1=1719960&r2=1719961&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_delta/branch_nested.c (original)
+++ subversion/trunk/subversion/libsvn_delta/branch_nested.c Mon Dec 14 17:15:42 2015
@@ -295,14 +295,18 @@ svn_branch__instantiate_elements_r(svn_b
         svn_branch__subtree_t *this_subtree = apr_hash_this_val(hi);
         const char *new_branch_id;
         svn_branch__state_t *new_branch;
+        /*### svn_branch__history_t *history;*/
 
         /* branch this subbranch into NEW_BRANCH (recursing) */
         new_branch_id = svn_branch__id_nest(to_branch->bid, this_outer_eid,
                                             scratch_pool);
-        new_branch = svn_branch__txn_add_new_branch(to_branch->txn,
-                                                    new_branch_id,
-                                                    this_subtree->tree->root_eid,
-                                                    scratch_pool);
+        SVN_ERR(svn_branch__txn_open_branch(to_branch->txn, &new_branch,
+                                            new_branch_id,
+                                            /*### reference_tree={empty},*/
+                                            this_subtree->tree->root_eid,
+                                            scratch_pool, scratch_pool));
+        /*### SVN_ERR(svn_branch__state_set_history(new_branch, history,
+                                              scratch_pool));*/
 
         SVN_ERR(svn_branch__instantiate_elements_r(new_branch, *this_subtree,
                                                    scratch_pool));
@@ -462,35 +466,6 @@ nested_branch_txn_get_branches(const svn
 
 /* An #svn_branch__txn_t method. */
 static svn_error_t *
-nested_branch_txn_add_branch(svn_branch__txn_t *txn,
-                             svn_branch__state_t *branch,
-                             apr_pool_t *scratch_pool)
-{
-  /* Just forwarding: nothing more is needed. */
-  SVN_ERR(svn_branch__txn_add_branch(txn->priv->wrapped_txn,
-                                     branch,
-                                     scratch_pool));
-  return SVN_NO_ERROR;
-}
-
-/* An #svn_branch__txn_t method. */
-static svn_branch__state_t *
-nested_branch_txn_add_new_branch(svn_branch__txn_t *txn,
-                                 const char *bid,
-                                 int root_eid,
-                                 apr_pool_t *scratch_pool)
-{
-  /* Just forwarding: nothing more is needed. */
-  svn_branch__state_t *new_branch
-    = svn_branch__txn_add_new_branch(txn->priv->wrapped_txn,
-                                     bid, root_eid,
-                                     scratch_pool);
-
-  return new_branch;
-}
-
-/* An #svn_branch__txn_t method. */
-static svn_error_t *
 nested_branch_txn_delete_branch(svn_branch__txn_t *txn,
                                 const char *bid,
                                 apr_pool_t *scratch_pool)
@@ -676,8 +651,6 @@ svn_branch__nested_txn_create(svn_branch
   static const svn_branch__txn_vtable_t vtable = {
     {0},
     nested_branch_txn_get_branches,
-    nested_branch_txn_add_branch,
-    nested_branch_txn_add_new_branch,
     nested_branch_txn_delete_branch,
     nested_branch_txn_get_num_new_eids,
     nested_branch_txn_new_eid,

Modified: subversion/trunk/tools/dev/svnmover/svnmover.c
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dev/svnmover/svnmover.c?rev=1719961&r1=1719960&r2=1719961&view=diff
==============================================================================
--- subversion/trunk/tools/dev/svnmover/svnmover.c (original)
+++ subversion/trunk/tools/dev/svnmover/svnmover.c Mon Dec 14 17:15:42 2015
@@ -2634,6 +2634,7 @@ do_mkbranch(const char **new_branch_id_p
                                       scratch_pool);
   SVN_ERR(svn_branch__txn_open_branch(txn, &new_branch,
                                       new_branch_id, new_inner_eid,
+                                      /*### reference_tree={empty},*/
                                       scratch_pool, scratch_pool));
   SVN_ERR(svn_branch__state_alter_one(new_branch, new_inner_eid,
                                       -1, "", payload, scratch_pool));