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/05/07 15:40:58 UTC

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

Author: julianfoad
Date: Thu May  7 13:40:57 2015
New Revision: 1678203

URL: http://svn.apache.org/r1678203
Log:
On the 'move-tracking-2' branch: Eliminate some direct access to branch
object implementation details.

* subversion/include/private/svn_branch.h,
  subversion/libsvn_delta/branch.c
  (svn_branch_repos_find_el_rev_by_id): New.

* subversion/libsvn_delta/compat3e.c
  (svn_editor3_get_all_branches_in_rev): Use an accessor function instead of
    directly reading rev_root->branches.

* subversion/svnmover/svnmover.c
  (svn_branch_find_predecessor_el_rev): Use the new method
    'svn_branch_repos_find_el_rev_by_id'.
  (svn_branch_log): Adjust the call to 'svn_branch_find_predecessor_el_rev'.

Modified:
    subversion/branches/move-tracking-2/subversion/include/private/svn_branch.h
    subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c
    subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.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=1678203&r1=1678202&r2=1678203&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 Thu May  7 13:40:57 2015
@@ -82,6 +82,25 @@ typedef struct svn_branch_repos_t
 svn_branch_repos_t *
 svn_branch_repos_create(apr_pool_t *result_pool);
 
+/* Set *EL_REV_P to the el-rev-id of the element at branch id BRANCH_ID,
+ * element id EID, in revision REVNUM in REPOS.
+ *
+ * If there is no element there, set *EL_REV_P to point to an id in which
+ * the BRANCH field is the nearest enclosing branch of RRPATH and the EID
+ * field is -1.
+ *
+ * Allocate *EL_REV_P (but not the branch object that it refers to) in
+ * RESULT_POOL.
+ */
+svn_error_t *
+svn_branch_repos_find_el_rev_by_id(svn_branch_el_rev_id_t **el_rev_p,
+                                   const svn_branch_repos_t *repos,
+                                   svn_revnum_t revnum,
+                                   const char *branch_id,
+                                   int eid,
+                                   apr_pool_t *result_pool,
+                                   apr_pool_t *scratch_pool);
+
 /* Set *EL_REV_P to the el-rev-id of the element at repos-relpath RRPATH
  * in revision REVNUM in REPOS.
  *

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=1678203&r1=1678202&r2=1678203&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c Thu May  7 13:40:57 2015
@@ -1211,6 +1211,39 @@ svn_branch_find_nested_branch_element_by
 }
 
 svn_error_t *
+svn_branch_repos_find_el_rev_by_id(svn_branch_el_rev_id_t **el_rev_p,
+                                   const svn_branch_repos_t *repos,
+                                   svn_revnum_t revnum,
+                                   const char *branch_id,
+                                   int eid,
+                                   apr_pool_t *result_pool,
+                                   apr_pool_t *scratch_pool)
+{
+  svn_branch_el_rev_id_t *el_rev = apr_palloc(result_pool, sizeof(*el_rev));
+  const svn_branch_revision_root_t *rev_root;
+
+  if (revnum < 0 || revnum >= repos->rev_roots->nelts)
+    return svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, NULL,
+                             _("No such revision %ld"), revnum);
+
+  rev_root = svn_array_get(repos->rev_roots, (int)(revnum));
+  el_rev->rev = revnum;
+  el_rev->branch
+    = svn_branch_revision_root_get_branch_by_id(rev_root, branch_id,
+                                                scratch_pool);
+  if (svn_branch_get_element(el_rev->branch, eid))
+    {
+      el_rev->eid = eid;
+    }
+  else
+    {
+      el_rev->eid = -1;
+    }
+  *el_rev_p = el_rev;
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
 svn_branch_repos_find_el_rev_by_path_rev(svn_branch_el_rev_id_t **el_rev_p,
                                 const char *rrpath,
                                 svn_revnum_t revnum,

Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c?rev=1678203&r1=1678202&r2=1678203&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3e.c Thu May  7 13:40:57 2015
@@ -880,7 +880,7 @@ svn_editor3_get_all_branches_in_rev(cons
       rev_root = eb->edited_rev_root;
     }
 
-  *branches_p = rev_root->branches;
+  *branches_p = svn_branch_revision_root_get_branches(rev_root, result_pool);
   return SVN_NO_ERROR;
 }
 

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=1678203&r1=1678202&r2=1678203&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c (original)
+++ subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c Thu May  7 13:40:57 2015
@@ -1605,28 +1605,23 @@ do_move(svn_editor3_t *editor,
 }
 
 /*  */
-static svn_branch_el_rev_id_t *
-svn_branch_find_predecessor_el_rev(svn_branch_el_rev_id_t *old_el_rev,
+static svn_error_t *
+svn_branch_find_predecessor_el_rev(svn_branch_el_rev_id_t **new_el_rev_p,
+                                   svn_branch_el_rev_id_t *old_el_rev,
                                    apr_pool_t *result_pool)
 {
   const svn_branch_repos_t *repos = old_el_rev->branch->rev_root->repos;
-  const svn_branch_revision_root_t *rev_root;
   const char *branch_id;
-  svn_branch_state_t *branch;
-  svn_branch_el_rev_id_t *new_el_rev;
 
   if (old_el_rev->rev <= 0)
     return NULL;
 
   branch_id = svn_branch_get_id(old_el_rev->branch, result_pool);
-  rev_root = svn_array_get(repos->rev_roots, (int)(old_el_rev->rev - 1));
-  branch = svn_branch_revision_root_get_branch_by_id(rev_root, branch_id,
-                                                     result_pool);
-
-  new_el_rev = svn_branch_el_rev_id_create(branch, old_el_rev->eid,
-                                           old_el_rev->rev - 1,
-                                           result_pool);
-  return new_el_rev;
+  SVN_ERR(svn_branch_repos_find_el_rev_by_id(new_el_rev_p,
+                                             repos, old_el_rev->rev - 1,
+                                             branch_id, old_el_rev->eid,
+                                             result_pool, result_pool));
+  return SVN_NO_ERROR;
 }
 
 /* Similar to 'svn log -v', this iterates over the revisions between
@@ -1643,8 +1638,9 @@ svn_branch_log(svn_editor3_t *editor,
 
   for (rev = right->rev; rev > first_rev; rev--)
     {
-      svn_branch_el_rev_id_t *el_rev_left
-        = svn_branch_find_predecessor_el_rev(right, scratch_pool);
+      svn_branch_el_rev_id_t *el_rev_left;
+
+      SVN_ERR(svn_branch_find_predecessor_el_rev(&el_rev_left, right, scratch_pool));
 
       printf(SVN_CL__LOG_SEP_STRING "r%ld | ...\n",
              rev);