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/20 17:36:45 UTC

svn commit: r1709625 - in /subversion/branches/move-tracking-2/subversion: include/private/svn_branch.h libsvn_delta/branch.c

Author: julianfoad
Date: Tue Oct 20 15:36:45 2015
New Revision: 1709625

URL: http://svn.apache.org/viewvc?rev=1709625&view=rev
Log:
On the 'move-tracking-2' branch: Refactoring of branch state and branch
transaction objects to allow implementing different subclasses with
different private data.

Make generic class constructors that subclasses can re-use.

* subversion/include/private/svn_branch.h,
  subversion/libsvn_delta/branch.c
  (svn_branch_txn_create,
   svn_branch_state_create): Turn this into a 'base class' contructor.
  (branch_txn_create,
   branch_state_create): Let this be the constructor for the specific
    implementation.
  Adjust all callers.

Modified:
    subversion/branches/move-tracking-2/subversion/include/private/svn_branch.h
    subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.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=1709625&r1=1709624&r2=1709625&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 Tue Oct 20 15:36:45 2015
@@ -161,14 +161,12 @@ typedef struct svn_branch_txn_t
 
 } svn_branch_txn_t;
 
-/* Create a new branching revision-info object.
- *
- * It will have no branch-roots.
+/* Create a new branch txn object.
  */
 svn_branch_txn_t *
-svn_branch_txn_create(svn_branch_repos_t *repos,
-                      svn_revnum_t rev,
-                      svn_revnum_t base_rev,
+svn_branch_txn_create(const svn_branch_txn_vtable_t *vtable,
+                      svn_cancel_func_t cancel_func,
+                      void *cancel_baton,
                       apr_pool_t *result_pool);
 
 /* Return all the branches in TXN.
@@ -290,14 +288,12 @@ struct svn_branch_state_t
 
 };
 
-/* Create a new branch state object, with no elements (not even a root
- * element).
+/* Create a new branch state object.
  */
 svn_branch_state_t *
-svn_branch_state_create(const char *bid,
-                        svn_branch_rev_bid_t *predecessor,
-                        int root_eid,
-                        svn_branch_txn_t *txn,
+svn_branch_state_create(const svn_branch_state_vtable_t *vtable,
+                        svn_cancel_func_t cancel_func,
+                        void *cancel_baton,
                         apr_pool_t *result_pool);
 
 /* Get the full id of branch 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=1709625&r1=1709624&r2=1709625&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c Tue Oct 20 15:36:45 2015
@@ -66,6 +66,13 @@ struct svn_branch_state_priv_t
 
 };
 
+static svn_branch_state_t *
+branch_state_create(const char *bid,
+                    svn_branch_rev_bid_t *predecessor,
+                    int root_eid,
+                    svn_branch_txn_t *txn,
+                    apr_pool_t *result_pool);
+
 /*  */
 static apr_pool_t *
 branch_state_pool_get(svn_branch_state_t *branch)
@@ -278,22 +285,18 @@ svn_branch_txn_sequence_point(svn_branch
   return SVN_NO_ERROR;
 }
 
-static svn_branch_txn_t *
-branch_txn_create(apr_pool_t *result_pool)
+svn_branch_txn_t *
+svn_branch_txn_create(const svn_branch_txn_vtable_t *vtable,
+                      svn_cancel_func_t cancel_func,
+                      void *cancel_baton,
+                      apr_pool_t *result_pool)
 {
-  static const svn_branch_txn_vtable_t vtable = {
-    {0},
-    branch_txn_new_eid,
-    branch_txn_open_branch,
-    branch_txn_branch,
-    branch_txn_sequence_point,
-  };
   svn_branch_txn_t *txn = apr_pcalloc(result_pool, sizeof(*txn));
 
-  txn->vtable = apr_pmemdup(result_pool, &vtable, sizeof(vtable));
+  txn->vtable = apr_pmemdup(result_pool, vtable, sizeof(*vtable));
 
-  txn->vtable->vpriv.cancel_func = NULL;
-  txn->vtable->vpriv.cancel_baton = NULL;
+  txn->vtable->vpriv.cancel_func = cancel_func;
+  txn->vtable->vpriv.cancel_baton = cancel_baton;
   txn->vtable->vpriv.scratch_pool = svn_pool_create(result_pool);
 
 #ifdef ENABLE_ORDERING_CHECK
@@ -305,13 +308,25 @@ branch_txn_create(apr_pool_t *result_poo
   return txn;
 }
 
-svn_branch_txn_t *
-svn_branch_txn_create(svn_branch_repos_t *repos,
-                      svn_revnum_t rev,
-                      svn_revnum_t base_rev,
-                      apr_pool_t *result_pool)
+/* Create a new branch txn object.
+ *
+ * It will have no branches.
+ */
+static svn_branch_txn_t *
+branch_txn_create(svn_branch_repos_t *repos,
+                  svn_revnum_t rev,
+                  svn_revnum_t base_rev,
+                  apr_pool_t *result_pool)
 {
-  svn_branch_txn_t *txn = branch_txn_create(result_pool);
+  static const svn_branch_txn_vtable_t vtable = {
+    {0},
+    branch_txn_new_eid,
+    branch_txn_open_branch,
+    branch_txn_branch,
+    branch_txn_sequence_point,
+  };
+  svn_branch_txn_t *txn
+    = svn_branch_txn_create(&vtable, NULL, NULL, result_pool);
 
   txn->priv = apr_pcalloc(result_pool, sizeof(*txn->priv));
   txn->repos = repos;
@@ -951,8 +966,8 @@ svn_branch_txn_add_new_branch(svn_branch
 
   SVN_ERR_ASSERT_NO_RETURN(root_eid != -1);
 
-  new_branch = svn_branch_state_create(bid, predecessor, root_eid, txn,
-                                       txn->priv->branches->pool);
+  new_branch = branch_state_create(bid, predecessor, root_eid, txn,
+                                   txn->priv->branches->pool);
 
   SVN_ARRAY_PUSH(txn->priv->branches) = new_branch;
 
@@ -1038,24 +1053,18 @@ svn_branch_state_purge(svn_branch_state_
   return SVN_NO_ERROR;
 }
 
-static svn_branch_state_t *
-branch_state_create(apr_pool_t *result_pool)
+svn_branch_state_t *
+svn_branch_state_create(const svn_branch_state_vtable_t *vtable,
+                        svn_cancel_func_t cancel_func,
+                        void *cancel_baton,
+                        apr_pool_t *result_pool)
 {
-  static const svn_branch_state_vtable_t vtable = {
-    {0},
-    branch_state_alter,
-    branch_state_copy_one,
-    branch_state_copy_tree,
-    branch_state_delete_one,
-    branch_state_payload_resolve,
-    branch_state_purge,
-  };
   svn_branch_state_t *b = apr_pcalloc(result_pool, sizeof(*b));
 
-  b->vtable = apr_pmemdup(result_pool, &vtable, sizeof(vtable));
+  b->vtable = apr_pmemdup(result_pool, vtable, sizeof(*vtable));
 
-  b->vtable->vpriv.cancel_func = NULL;
-  b->vtable->vpriv.cancel_baton = NULL;
+  b->vtable->vpriv.cancel_func = cancel_func;
+  b->vtable->vpriv.cancel_baton = cancel_baton;
   b->vtable->vpriv.scratch_pool = svn_pool_create(result_pool);
 
 #ifdef ENABLE_ORDERING_CHECK
@@ -1067,14 +1076,28 @@ branch_state_create(apr_pool_t *result_p
   return b;
 }
 
-svn_branch_state_t *
-svn_branch_state_create(const char *bid,
-                        svn_branch_rev_bid_t *predecessor,
-                        int root_eid,
-                        svn_branch_txn_t *txn,
-                        apr_pool_t *result_pool)
+/* Create a new branch state object.
+ *
+ * It will have no elements (not even a root element).
+ */
+static svn_branch_state_t *
+branch_state_create(const char *bid,
+                    svn_branch_rev_bid_t *predecessor,
+                    int root_eid,
+                    svn_branch_txn_t *txn,
+                    apr_pool_t *result_pool)
 {
-  svn_branch_state_t *b = branch_state_create(result_pool);
+  static const svn_branch_state_vtable_t vtable = {
+    {0},
+    branch_state_alter,
+    branch_state_copy_one,
+    branch_state_copy_tree,
+    branch_state_delete_one,
+    branch_state_payload_resolve,
+    branch_state_purge,
+  };
+  svn_branch_state_t *b
+    = svn_branch_state_create(&vtable, NULL, NULL, result_pool);
 
   b->priv = apr_pcalloc(result_pool, sizeof(*b->priv));
   b->bid = apr_pstrdup(result_pool, bid);
@@ -1224,8 +1247,8 @@ svn_branch_state_parse(svn_branch_state_
   SVN_ERR(parse_branch_line(bid, &root_eid, &num_eids, &predecessor,
                             stream, scratch_pool, scratch_pool));
 
-  branch_state = svn_branch_state_create(bid, predecessor, root_eid, txn,
-                                         result_pool);
+  branch_state = branch_state_create(bid, predecessor, root_eid, txn,
+                                     result_pool);
 
   /* Read in the structure. Set the payload of each normal element to a
      (branch-relative) reference. */
@@ -1287,7 +1310,7 @@ svn_branch_txn_parse(svn_branch_txn_t **
              &num_branches);
   SVN_ERR_ASSERT(n == 4);
 
-  txn = svn_branch_txn_create(repos, rev, rev - 1, result_pool);
+  txn = branch_txn_create(repos, rev, rev - 1, result_pool);
   txn->first_eid = first_eid;
   txn->next_eid = next_eid;