Checkout Tools
  • last updated 2 hours ago
Constraints
Constraints: committers
 
Constraints: files
Constraints: dates

Changeset 1708994 is being indexed.

On the 'move-tracking-2' branch: Refactoring: give the 'branch txn' and

'branch state' objects some virtual methods.

These methods are intended to take over from the separate 'editor API'. At

this point, however, this is an additional layer below the editor API.

Only the more significant identifiers and changes are mentioned below.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_txn_priv_t,

svn_branch_state_priv_t): New.

(svn_branch_txn_t,

svn_branch_state_t): Insert an opaque pointer to a private structure that

contains the function vtable and any private data.

(branch_txn_*,

branch_state_*): New method implementations, some from code that was here

already and some code moved from compat3e.c.

(svn_branch_txn_create,

svn_branch_state_create): Fill in the vtable and private data.

(svn_branch_txn_open_branch,

svn_branch_txn_branch,

svn_branch_txn_sequence_point,

svn_branch_state_copy_tree): New methods, based on editor3 methods, with

implementations moved here from compat3e.c.

(svn_branch_txn_new_eid,

svn_branch_state_delete_one,

svn_branch_state_alter_one,

svn_branch_state_purge): Methods renamed and/or changed to the regular

form (output results via a pointer parameter, take a scratch pool,

return an error).

* subversion/libsvn_delta/compat3e.c

(editor3_new_eid,

editor3_open_branch,

editor3_branch,

editor3_alter,

editor3_copy_one,

editor3_copy_tree,

editor3_delete,

editor3_sequence_point): Move the implementations of these methods to

'branch.c', and call the branch object methods instead.

  1. … 2 more files in changeset.
On the 'move-tracking-2' branch: Minor refactoring.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_txn_add_new_branch): Rename from 'svn_branch_add_new_branch'.

Move 'txn' parameter to the first parameter.

(svn_branch_txn_delete_branch): Take a branch-id instead of a branch

pointer. Allow returning an error.

Delete an old commented-out suggestion for an element structure.

* subversion/libsvn_delta/branch_nested.c

(svn_branch_instantiate_elements_r): Track the changes.

* subversion/libsvn_delta/compat3e.c

(editor3_open_branch,

editor3_branch,

editor3_sequence_point): Track the changes.

  1. … 3 more files in changeset.
On the 'move-tracking-2' branch: Rename 'revision_root' to 'txn'.

* subversion/include/private/svn_branch.h

(svn_branch_txn_t,

svn_branch_txn_create,

svn_branch_txn_get_branches,

svn_branch_txn_get_branch_by_id,

svn_branch_txn_new_eid,

svn_branch_txn_finalize_eids,

svn_branch_txn_delete_branch,

svn_branch_txn_parse,

svn_branch_txn_serialize): Rename from *_revision_root_*.

Rename struct members and function arguments similarly.

* subversion/include/private/svn_branch_repos.h,

subversion/include/private/svn_editor3e.h,

subversion/include/private/svn_ra_private.h,

subversion/libsvn_delta/branch.c,

subversion/libsvn_delta/branch_nested.c,

subversion/libsvn_delta/branch_repos.c,

subversion/libsvn_delta/compat3e.c,

subversion/libsvn_ra/ra_loader.c,

subversion/svnmover/svnmover.c

Track these changes, and make similar changes nearly everywhere.

  1. … 9 more files in changeset.
On the 'move-tracking-2' branch: Minor refactoring.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_revision_root_get_branches): Return a copy of the array.

* subversion/libsvn_delta/compat3e.c

(drive_changes): Use svn_branch_revision_root_get_branches() instead

of direct access.

(editor3_sequence_point): Use svn_branch_revision_root_get_branches()

instead of direct access, and thus simplify a little.

  1. … 2 more files in changeset.
On the 'move-tracking-2' branch: Rename a struct and its functions,

following r1708631.

* subversion/include/private/svn_element.h,

subversion/libsvn_delta/element.c

(svn_element_content_t,

svn_element_content_create,

svn_element_content_dup,

svn_element_content_equal): Renamed from 'svn_branch_el_rev_content_*'.

* subversion/include/private/svn_branch.h,

subversion/include/private/svn_editor3e.h,

subversion/libsvn_delta/branch.c,

subversion/libsvn_delta/branch_nested.c,

subversion/libsvn_delta/compat3e.c,

subversion/libsvn_delta/editor3e.c,

subversion/svnmover/svnmover.c

Update all callers/users.

  1. … 8 more files in changeset.
On the 'move-tracking-2' branch: More refactoring, disentangling the concept

of nested branches from the basic concept of branches, following r1708550.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_state_t): Move the element mapping into a sub-structure.

(svn_branch_root_eid,

svn_branch_get_element_tree,

svn_branch_get_element_tree_at_eid): New.

(svn_branch_el_rev_content_t,

svn_branch_el_rev_content_create,

svn_branch_el_rev_content_dup,

svn_branch_el_rev_content_equal): Move to element.c/h.

(svn_branch_subtree_t,

svn_branch_subtree_create,

svn_branch_subtree_get_subbranch_at_eid): Move to branch_nested.c/h.

(svn_branch_get_element_tree_at_eid): Rename from

'svn_branch_get_subtree_n' and change the return type.

(svn_branch_instantiate_elements,

svn_branch_map_add_subtree): Change an input parameter type.

(svn_branch_subtree_get_path_by_eid): Delete; the replacement is

'svn_element_tree_get_path_by_eid'.

(map_purge_orphans): Delete; the replacement is

'svn_element_tree_purge_orphans'.

* subversion/include/private/svn_branch_nested.h,

subversion/libsvn_delta/branch_nested.c

(svn_branch_subtree_t,

svn_branch_subtree_create,

(svn_branch_subtree_get_subbranch_at_eid): Moved from branch.c/h.

* subversion/include/private/svn_element.h,

subversion/libsvn_delta/element.c

(svn_branch_el_rev_content_t,

svn_branch_el_rev_content_create,

svn_branch_el_rev_content_dup,

svn_branch_el_rev_content_equal): Move from branch.c/h.

(svn_element_tree_t,

svn_element_tree_create,

svn_element_tree_get,

svn_element_tree_set,

svn_element_tree_purge_orphans,

svn_element_tree_get_path_by_eid): New.

* subversion/libsvn_delta/compat3e.c

Update all callers/users.

* subversion/svnmover/svnmover.c

Update all callers/users.

  1. … 7 more files in changeset.
On the 'move-tracking-2' branch: Following r1708550, remove the 'root

branches' field of the branch state object.

* subversion/include/private/svn_branch.h

(svn_branch_revision_root_t): Remove the 'root branches' field. Update a

comment.

* subversion/libsvn_delta/branch.c

(svn_branch_revision_root_create,

svn_branch_add_new_branch,

svn_branch_revision_root_delete_branch,

svn_branch_revision_root_parse): No longer update the 'root branches'

field.

* subversion/libsvn_delta/compat3e.c

(drive_changes): Adjust the way of looping over all 'root branches'.

  1. … 2 more files in changeset.
On the 'move-tracking-2' branch: Update a doc string following r1707086.

* subversion/include/private/svn_branch.h

(svn_branch_get_element): Update the doc string.

On the 'move-tracking-2' branch: Update a doc string following r1708550.

* subversion/include/private/svn_branch.h

(svn_branch_add_new_branch): Update the doc string.

On the 'move-tracking-2' branch: Disentangle the concept of nested branches

from the basic concept of branches.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_state_t,

svn_branch_state_create,

svn_branch_add_new_branch): Add a branch-id field, and delete the outer-

branch and outer-eid fields.

(svn_branch_get_element): Remove an assertion which need not be true, and

which with the new code is not always true.

Move some functions to svn_branch_nested.h and branch_nested.c.

* subversion/include/private/svn_branch_repos.h,

subversion/libsvn_delta/branch_repos.c

Move some functions to svn_branch_nested.h and branch_nested.c.

* subversion/include/private/svn_branch_nested.h,

subversion/libsvn_delta/branch_nested.c

New files.

* subversion/libsvn_delta/compat3e.c

(branch_get_top_num): Delete.

(branch_get_storage_root_rrpath,

editor3_open_branch,

editor3_branch,

drive_changes,

editor3_sequence_point): Adjust accordingly.

* subversion/svnmover/svnmover.c

(branch_id_str,

do_branch_into,

point_to_outer_element_instead,

execute): Adjust accordingly.

* subversion/tests/cmdline/svnmover_tests.py

(merge_swap_abc,

move_to_related_branch_2): Adjust expected outputs of the '--ui=serial'

listing to account for branch root paths no longer being included in the

serialization format.

* subversion/tests/cmdline/svntest/wc.py

(_re_parse_eid_branch,

State.from_eids): Adjust to account for branch root paths no longer being

included in the serialization format.

  1. … 9 more files in changeset.
On the 'move-tracking-2' branch: Update a comment following r1707086.

* subversion/include/private/svn_branch.h

(svn_branch_el_rev_content_t): Update a comment.

On the 'move-tracking-2' branch: Refactoring towards moving the

subbranch-root element concept to a higher level. Represent a subbranch-root

payload by a payload object with a flag set, rather than by null, and

eliminate some special handling of a subbranch-root element.

* subversion/include/private/svn_branch.h

(svn_branch_update_subbranch_root_element): Delete.

* subversion/include/private/svn_element.h

(svn_element_payload_t): Add an 'is_subbranch_root' field.

(svn_element_payload_create_subbranch): New.

* subversion/libsvn_delta/branch.c

(svn_branch_update_subbranch_root_element): Delete.

(branch_validate_element,

map_purge_orphans,

svn_branch_map_add_subtree,

svn_branch_state_parse,

svn_branch_state_serialize): Update the callers/users.

* subversion/libsvn_delta/compat3e.c

(editor3_alter): Update the callers/users.

* subversion/libsvn_delta/editor3e.c

(svn_editor3_alter,

svn_editor3_copy_one,

svn_editor3_payload_resolve,

wrap_alter): Update the callers/users.

* subversion/libsvn_delta/element.c

(svn_element_payload_invariants,

svn_element_payload_equal): Update the callers/users.

(svn_element_payload_create_subbranch): New.

* subversion/svnmover/svnmover.c

(subtree_replay,

element_merge,

mk_branch,

do_branch): Update the callers/users.

  1. … 6 more files in changeset.
On the 'move-tracking-2' branch: Simpify an API.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_instantiate_elements): Rename from

'svn_branch_instantiate_subtree'. Don't take new parent-eid and name

parameters; instead, take these from the 'elements' input.

* subversion/libsvn_delta/compat3e.c

(editor3_branch): Adjust the caller.

* subversion/svnmover/svnmover.c

(do_branch_into): Adjust the caller.

  1. … 3 more files in changeset.
On the 'move-tracking-2' branch: Record where branches were branched from.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_rev_bid_t,

svn_branch_rev_bid_create,

svn_branch_rev_bid_dup): New.

(svn_branch_state_t,

svn_branch_state_create,

svn_branch_add_new_branch,

svn_branch_subtree_t): Add a 'predecessor' field.

(svn_branch_get_subtree): Fill in the 'predecessor' field.

(svn_branch_instantiate_subtree): Pass on the predecessor when creating

any nested branches.

(parse_branch_line,

svn_branch_state_parse,

svn_branch_state_serialize): Read and write the branch predecessor info.

(svn_branch_revision_root_serialize): Finalize the predecessor 'rev' field

by converting '-1' to the committed revision number.

* subversion/include/private/svn_editor3e.h,

subversion/libsvn_delta/editor3e.c

(svn_editor3_open_branch,

svn_editor3_open_branch_t): Add a 'predecessor' field.

(wrap_open_branch,

change_detection_open_branch): Adjust accordingly.

* subversion/libsvn_delta/compat3e.c

(editor3_open_branch,

editor3_branch): Pass on the predecessor when creating a new branch.

* subversion/libsvn_ra/ra_loader.c

(svn_branch_get_mutable_state): Update all the 'predecessor' info to point

to the base revision instead of to that revision's predecessor.

* subversion/svnmover/svnmover.c

(svn_branch_replay): Pass on the predecessor when creating a new branch.

(mk_branch): Pass null for the predecessor of the new branch.

* subversion/tests/cmdline/svntest/wc.py

(re_parse_eid_branch,

State.from_eids): Adjust the regex for matching the branch metadata.

  1. … 7 more files in changeset.
On the 'move-tracking-2' branch: Some tidying up.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_id_nest): New.

(svn_branch_id_unnest): Rename from 'svn_branch_id_split'. Move the doc

string to the declaration.

(svn_branch_branch_subtree): Delete.

(svn_branch_rev_bid_eid_dup): Allow a null input.

(svn_branch_instantiate_subtree): Avoid using svn_branch_branch_subtree().

(svn_branch_state_parse): Track the rename.

* subversion/libsvn_delta/compat3e.c

(editor3_open_branch): Use svn_branch_id_nest().

* subversion/libsvn_delta/editor3e.c

(svn_editor3_open_branch,

svn_editor3_branch): Allow the output pointer to be null.

* subversion/svnmover/svnmover.c

(subtree_subbranch_str): Use svn_branch_id_nest().

(merge_subbranch): Avoid using svn_branch_branch_subtree().

(branch_merge_subtree_r): Add comments.

(subtree_diff_r): Use svn_branch_id_nest().

  1. … 4 more files in changeset.
On the 'move-tracking-2' branch: Keep track of new EIDs assigned with a

transaction, and only convert them to permanent EIDs at commit time.

This allows us to add elements in a txn based on an old revision, and then

'update' the txn to be based on a newer revision, and the EIDs added in the

newer revision will not clash with the EIDs added in the txn. (This 'update'

could be either a client-side WC update or the automatic rebase-on-commit.)

* subversion/libsvn_delta/editor3e.c

(VALID_EID): Adjust for local EIDs being negative.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_revision_root_t): Document that 'first_eid' holds less than

zero for transaction-local EIDs.

(svn_branch_txn_new_eid): Rename from 'svn_branch_revision_root_new_eid'.

Allocate negative EIDs instead of positive EIDs.

(branch_finalize_eids,

svn_branch_txn_finalize_eids): New.

(svn_branch_map_add_subtree): Track the rename.

* subversion/libsvn_delta/compat3e.c

(editor3_new_eid): Track the rename.

(editor3_alter): Track the rename. Adjust for local EIDs being negative.

(editor3_complete): Finalize the txn EIDs before committing.

* subversion/libsvn_delta/element.c

(svn_element_payload_invariants): Adjust for local EIDs being negative.

* subversion/svnmover/svnmover.c

(do_branch): Track the rename.

  1. … 5 more files in changeset.
On the 'move-tracking-2' branch: Tweak comments.

* subversion/include/private/svn_branch.h

(svn_branch_instantiate_subtree): Correct the doc string.

(svn_branch_branch_subtree): Fix a typo in the doc string.

On the 'move-tracking-2' branch: Tweak an API to remove an unneeded option.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_add_new_branch): Require the caller to specify the new branch

root EID. (Callers already comply.)

* subversion/include/private/svn_editor3e.h

(svn_editor3_open_branch): Correct the documentation -- the same requirement

is already enforced in this API.

  1. … 2 more files in changeset.
On the 'move-tracking-2' branch: Add an editor method 'open_branch'.

This gets rid of some direct access to the editor's txn.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_id_split): Newly public; renamed from 'branch_id_split'.

(svn_branch_state_parse): Track the rename.

* subversion/include/private/svn_editor3e.h

(svn_editor3_open_branch,

svn_editor3_cb_open_branch_t): New.

(svn_editor3_cb_funcs_t): Add the new method.

* subversion/libsvn_delta/editor3e.c

(svn_editor3_open_branch,

wrap_open_branch,

change_detection_open_branch): New.

(svn_editor3__get_debug_editor,

svn_editor3__change_detection_editor): Add the new method to the vtable.

* subversion/libsvn_delta/compat3e.c

(editor3_open_branch): New.

(svn_editor3_in_memory,

svn_editor3__ev3_from_delta_for_commit): Add it to the vtable.

(editor3_alter): Move the EID allocation hack to here...

* subversion/svnmover/svnmover.c

(subtree_replay): ... from here. Take a branch id instead of a pointer.

(svn_branch_replay): Use the new editor method. Use branch ids instead of

pointers.

(replay): Pass a branch id instead of a pointer.

(mk_branch): Use the new editor method. Return a branch id instead of a

pointer.

(execute): Adjust the call to mk_branch.

  1. … 5 more files in changeset.
On the 'move-tracking-2' branch: Rename a function for consistency.

* subversion/include/private/svn_branch.h

subversion/libsvn_delta/branch.c

(svn_branch_revision_root_new_eid): Renamed from

'svn_branch_allocate_new_eid'.

(svn_branch_map_add_subtree,

svn_branch_add_new_branch): Track the rename.

* subversion/libsvn_delta/compat3e.c

(editor3_new_eid): Track the rename.

* subversion/svnmover/svnmover.c

(subtree_replay,

do_branch): Track the rename.

  1. … 3 more files in changeset.
On the 'move-tracking-2' branch: Separate the repository-object API from the

rest of the branching API, into its own header and implementation files.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_repos_t): Leave the typedef here; make the struct definition

opaque, moving it to 'branch_repos.c'.

(svn_branch_repos_create,

svn_branch_repos_get_revision,

svn_branch_repos_get_root_branch,

svn_branch_repos_get_branch_by_id,

svn_branch_repos_find_el_rev_by_id,

svn_branch_repos_find_el_rev_by_path_rev,

svn_branch_revision_root_get_base): Move these...

* subversion/include/private/svn_branch_repos.h,

subversion/libsvn_delta/branch_repos.c

... to these new files.

(svn_branch_repos_get_base_revision_root): Renamed from

'svn_branch_revision_root_get_base'.

(svn_branch_repos_add_revision): New.

* subversion/libsvn_delta/compat3e.c

Include 'svn_branch_repos.h'.

* subversion/libsvn_ra/ra_loader.c

Include 'svn_branch_repos.h'.

(svn_branch_repos_fetch_info,

commit_callback_wrapper): Use 'svn_branch_repos_add_revision' instead of

direct access to the 'repos' structure.

* subversion/svnmover/svnmover.c

Include 'svn_branch_repos.h'.

(wc_checkout,

display_diff_of_commit): Track the rename.

  1. … 6 more files in changeset.
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.

  1. … 5 more files in changeset.
On the 'move-tracking-2' branch: Implement '^B<branch-id>/path' syntax for

svnmover path inputs.

The full syntax is

[^B<branch-id>/]relpath[@rev]

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().

  1. … 4 more files in changeset.
On the 'move-tracking-2' branch: Hide a tiny implementation detail.

* subversion/include/private/svn_branch.h

(svn_branch_add_new_branch,

svn_branch_branch_subtree): Document that when creating a top-level

branch a new id is assigned and the OUTER_EID parameter ignored.

* subversion/libsvn_delta/branch.c

(svn_branch_add_new_branch): When creating a top-level branch, assign it

the next available top-branch number.

* subversion/svnmover/svnmover.c

(wc_commit,

do_topbranch): Pass 0 for the new top-level branch number instead of

peeking into the implementation.

  1. … 2 more files in changeset.
On the 'move-tracking-2' branch: More support for top-level (that is,

non-nested) branches.

This makes it possible to create a new top-level branch by branching any

existing branch, by means of:

svnmover -B <existing-branch-id> tbranch <path-to-existing-branch>

(The syntax is redundant, as <existing-branch-id> implies

<path-to-existing-branch>.)

TODO:

* change svnmover syntax so that paths given are relative to the branch

designated by the "-B" option;

* mkbranch <top-level-branch>

* rmbranch <top-level-branch>

* command-line syntax for addressing things in other top-level branches,

e.g. <path>@[<rev>].[B<branch-id>]

or ^B<branch-id>/path[@rev]

* subversion/include/private/svn_branch.h

(svn_branch_add_new_branch,

svn_branch_branch_subtree): Take the revision root as a separate parameter.

* subversion/libsvn_delta/branch.c

(svn_branch_instantiate_subtree): Adjust calls to track the API changes.

(svn_branch_add_new_branch,

svn_branch_branch_subtree): Take the revision root as a separate parameter.

(svn_branch_revision_root_delete_branch): Also update the list of

top-level branches, in preparation for when we can delete a top-level

branch.

(svn_branch_delete_branch_r): Remove a dereference that was redundant for

nested branches but would have broken when deleting a top-level branch.

(svn_branch_repos_find_el_rev_by_path_rev): Error out nicely if asked to

look in a nonexistent top-level branch.

* subversion/libsvn_delta/compat3e.c

(drive_changes_branch): Create the top-level storage node for any newly

created top-level branch.

* subversion/svnmover/svnmover.c

(commit_callback_baton_t,

display_diff_of_commit): Rename a baton field, for clarity.

(wc_commit): Support creating a new top-level branch as part of the commit.

(action_code_t,

action_defn): Add a 'tbranch' subcommand.

(do_topbranch): New.

(execute): Implement the 'tbranch' subcommand.

(find_el_rev_by_rrpath_rev): Adjust doc string now that it can return an

error if the given top-level branch does not exist at the requested rev.

(svn_branch_replay,

merge_subbranch,

mk_branch,

do_branch): Adjust calls to track the API changes.

  1. … 3 more files in changeset.
On the 'move-tracking-2' branch: Remove 'svn_branch_copy_subtree' from the

public API, because 'svn_branch_add_subtree' is a better, more general form

of the same operation.

* subversion/include/private/svn_branch.h

(svn_branch_copy_subtree): Move and rename...

* subversion/libsvn_delta/compat3e.c

(copy_subtree): ... to here.

(editor3_copy_tree): Track the rename.

  1. … 2 more files in changeset.
On the 'move-tracking-2' branch: Remove 'svn_branch_branch' from the public

API, because 'svn_branch_branch_subtree' is a better, more general form of

the same operation.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_branch): Move and rename...

* subversion/svnmover/svnmover.c

(do_branch): ... to here.

(execute): Track the rename.

  1. … 2 more files in changeset.
On move-tracking-2 branch: add '--ui serial' for 'ls' and 'ls-br-r', use

it to verify eids in a test.

* subversion/include/private/svn_branch.h

(svn_branch_state_serialize): Declare.

* subversion/libsvn_delta/branch.c

(svn_branch_state_serialize): Make non-static.

* subversion/svnmover/svnmover.c

(UI_MODE_SERIAL): Add.

(ui_mode_map): Extend.

(execute): Implement ls-br-r and ls serial output.

* subversion/tests/cmdline/svnmover_tests.py

(test_svnmover3): New.

(merge_swap_abc): Use new function.

* subversion/tests/cmdline/svntest/wc.py

(_re_parse_eid_header, _re_parse_eid_branch, _re_parse_eid_ele,

_re_parse_split_branch_eid, from_eids): New.

(StateItem): Add eid attribute.

  1. … 4 more files in changeset.
On the 'move-tracking-2' branch: Tweak a doc string.

* subversion/include/private/svn_branch.h

(svn_branch_get_id): Document the id format. Move to a better position in

the file.

On the 'move-tracking-2' branch: Start implementing top-level branching.

Change the element data structures to support multiple top-level branches.

Everything works as before, using only top-level branch number 0.

This implementation assumes that the WC is within a single existing top

branch, and that the editor drive is within a single existing top branch.

It does not yet support creating or deleting a top-level branch.

It does not yet map top-level branches to different path-spaces in an old

repository, so it does not yet have anywhere to store the payloads.

* subversion/include/private/svn_branch.h,

subversion/libsvn_delta/branch.c

(svn_branch_repos_get_root_branch,

svn_branch_repos_find_el_rev_by_path_rev): Select a particular top branch.

(svn_branch_revision_root_t): Store an array of root branches instead of a

single one.

(svn_branch_revision_root_create): Remove the root branch parameter:

instead, create the object with no branches.

(svn_branch_revision_root_get_root_branch): New.

(svn_branch_state_t): Update docs: for a top-level branch, the 'outer-eid'

field now stores the top-level branch number.

* subversion/include/private/svn_editor3e.h

(svn_editor3_in_memory): Select a particular top branch.

* subversion/libsvn_delta/compat3e.c

(ev3_from_delta_baton_t): Remember which top branch we're editing.

(drive_changes_branch,

editor3_sequence_point): When accessing the root branch, access the right

one.

(svn_editor3_in_memory): Select a particular top branch.

* subversion/svnmover/svnmover.c

(wc_checkout): Initialize the editor for the requested top branch; error

out if that branch doesn't exist.

(wc_create): Remember which top branch the WC is editing.

(replay): Take branches instead of rev-roots as inputs.

(commit_callback_baton_t): Remember which top branch we are editing.

(wc_commit): Pass the appropriate top level branches to replay().

(find_el_rev_by_rrpath_rev): Look up within the WC's designated top

branch.

(do_update): Operate within the designated top branch.

(display_diff_of_commit,

do_revert): Update calls.

(usage,

sub_main): Add a '-B'/'--branch-id' option to select the top branch.

* subversion/svnmover/svnmover.h

(svnmover_wc_t): Remember which top branch the WC is editing.

  1. … 5 more files in changeset.