Author: julianfoad
Date: Tue Feb 24 16:43:16 2015
New Revision: 1662011
URL: http://svn.apache.org/r1662011
Log:
On the 'move-tracking-2' branch: Prevent bad branch nesting in the
'svnmover branch' command.
* subversion/libsvn_delta/branching.c
(SAME_BRANCH): New macro.
(svn_branch_branch_subtree_r): Check preconditions here: move the existence
check here, and add a check for correct nesting.
* subversion/libsvn_delta/compat3b.c
(svn_branch_branch): Move the existence check away from here.
Modified:
subversion/branches/move-tracking-2/subversion/libsvn_delta/branching.c
subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3b.c
Modified:
subversion/branches/move-tracking-2/subversion/libsvn_delta/branching.c
URL:
http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/branching.c?rev=1662011&r1=1662010&r2=1662011&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/branching.c
(original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/branching.c Tue
Feb 24 16:43:16 2015
@@ -42,6 +42,9 @@
((branch1)->sibling_defn->family->fid \
== (branch2)->sibling_defn->family->fid)
+#define SAME_BRANCH(branch1, branch2) \
+ ((branch1)->sibling_defn->family->fid \
+ == (branch2)->sibling_defn->family->fid)
svn_branch_repos_t *
svn_branch_repos_create(apr_pool_t *result_pool)
@@ -1266,11 +1269,26 @@ svn_branch_branch_subtree_r(svn_branch_i
svn_branch_sibling_t *new_branch_def;
svn_branch_instance_t *new_branch;
- /* FROM_BRANCH must be an immediate child branch of OUTER_BRANCH. */
- /* SVN_ERR_ASSERT(from_branch->sibling_defn->family->parent_family->fid
- == to_outer_branch->sibling_defn->family->fid); */
-
- /* SVN_ERR_ASSERT(...); */
+ /* Source element must exist */
+ if (! svn_branch_get_path_by_eid(from_branch, from_eid, scratch_pool))
+ {
+ return svn_error_createf(SVN_ERR_BRANCHING, NULL,
+ _("cannot branch from b%d e%d: "
+ "does not exist"),
+ from_branch->sibling_defn->bid, from_eid);
+ }
+
+ /* FROM_BRANCH must be an immediate child branch of TO_OUTER_BRANCH. */
+ if (! SAME_BRANCH(from_branch->outer_branch, to_outer_branch))
+ {
+ return svn_error_createf(SVN_ERR_BRANCHING, NULL,
+ _("source and destination must be within same "
+ "outer branch; source is b%d inside b%d, "
+ "destination is in b%d"),
+ from_branch->sibling_defn->bid,
+ from_branch->outer_branch->sibling_defn->bid,
+ to_outer_branch->sibling_defn->bid);
+ }
/* assign new eid to root node (outer branch) */
to_outer_eid
Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3b.c
URL:
http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3b.c?rev=1662011&r1=1662010&r2=1662011&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3b.c
(original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3b.c Tue
Feb 24 16:43:16 2015
@@ -891,14 +891,6 @@ svn_branch_branch(svn_editor3_t *editor,
const char *new_name,
apr_pool_t *scratch_pool)
{
- if (! svn_branch_get_path_by_eid(from_branch, from_eid, scratch_pool))
- {
- return svn_error_createf(SVN_ERR_BRANCHING, NULL,
- _("cannot branch from b%d e%d: "
- "does not exist"),
- from_branch->sibling_defn->bid, from_eid);
- }
-
SVN_ERR(svn_branch_branch_subtree_r(NULL,
from_branch, from_eid,
to_outer_branch, to_outer_parent_eid,