On the 'move-tracking-2' branch: Get branch-state pointers out of the editor API. The API now uses only references (branch-id).
* subversion/include/private/svn_branch.h, subversion/libsvn_delta/branch.c (svn_branch_rev_bid_eid_t, svn_branch_rev_bid_eid_create, svn_branch_rev_bid_eid_dup): New type and its constructors, similar to svn_branch_el_rev_id_t but containing a branch-id instead of a branch state pointer.
* subversion/include/private/svn_editor3e.h, subversion/libsvn_delta/editor3e.c In all editor API methods, replace an svn_branch_state_t pointer with a branch-id or in the case of svn_editor3_new_eid get rid of it entirely, and replace svn_branch_el_rev_id_t with svn_branch_rev_bid_eid_t.
* subversion/libsvn_delta/compat3e.c (editor3_new_eid): Track the API change, accessing the transaction through the editor's private data instead of through the previously passed-in branch state pointer. (editor3_add, editor3_copy_one, editor3_copy_tree, editor3_delete, editor3_alter): Track the API change, looking up branches from their ids.
* subversion/svnmover/svnmover.c (subtree_replay, branch_merge_subtree_r, do_copy, do_delete, do_mkdir, do_put_file, mk_branch, do_move): Track the API change, looking up branch ids as needed.
On the 'move-tracking-2' branch: Implement '^B<branch-id>/path' syntax for svnmover path inputs.
The full syntax is
When BRANCH-ID is given, this means the relative path RELPATH within the branch. When branches are nested, this may identify an element in a branch that is nested inside branch <branch-id>; in case of multiple nesting, the most deeply nested branch is found.
When the '^B<branch-id>/' prefix is not given, look inside the same branch id as the WC base branch when a revision number is given, and look inside the WC working branch when a revision number is not given.
* subversion/include/private/svn_branch.h, subversion/libsvn_delta/branch.c (svn_branch_repos_find_el_rev_by_path_rev): Take an arbitrary branch id and a branch-relative path instead of a top-level branch number and a repository-relative path. (svn_branch_find_nested_branch_element_by_relpath): Rename from svn_branch_find_nested_branch_element_by_rrpath. Take a branch-relative path instead of a repository-relative path. (svn_branch_repos_get_branch_by_id): New. (svn_branch_repos_find_el_rev_by_id): Simplify by using svn_branch_repos_get_branch_by_id; this also means it will throw an error instead of crashing if the branch is not found.
* subversion/libsvn_delta/compat3e.c (drive_changes_r, drive_changes_branch): Track the change to svn_branch_repos_find_el_rev_by_path_rev(), by identifying the top-level branch by its branch-id rather than its top-level branch number.
* subversion/svnmover/svnmover.h (svnmover_wc_t): Remove the 'top_branch_num' field.
* subversion/svnmover/svnmover.c (wc_create): Remove initialization of the obsolete 'top_branch_num' field. (action_t): Add a 'branch_id' field. (find_el_rev_by_rrpath_rev): Look up the path in a given branch, defaulting to the base branch when looking in a given revision or the working branch otherwise. (execute): Pass on the branch id when looking up a path. Remove a re-initialization of the obsolete 'top_branch_num' field. (parse_actions): Parse "^B<branch-id>/path" syntax. (sub_main): No longer pass the obsolete 'top_branch_num' parameter to wc_create().