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