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

Changeset 1727838 is being indexed.

Add the ability to emulate the old svn_fs_paths_changed2 through

svn_fs_paths_changed3. So, we've got a two-way emulation now and

we enable both for now such that all callers of the old API will

be redirected: old API -> new API -> old API vtable entry.

As a bonus, the emulated svn_fs_paths_changed2 now correctly reports

the IDs for in-revision nodes in FSFS. It also fails earlier on

corrupted change lists. Both is only true for "emulated" mode.

* subversion/include/private/svn_fs_util.h

(svn_fs__get_deleted_node): Declare a new private utility API needed

to handle ID creation edge cases.

* subversion/libsvn_fs_util/fs-util.c

(svn_fs__prop_lists_equal): Implement.

* subversion/libsvn_fs/fs-loader.c

(SVN_FS_EMULATE_PATHS_CHANGED): Declare new control macro as we did

already for the new API.


add_changed_path): Callback implementation to emulate the old API

based on the new one.

(svn_fs_paths_changed2): Emulate when necessary or forced to do so.

* subversion/tests/cmdline/

(verify_invalid_path_changes): The correct ID construction in emulated

mode creates fewer repetitions of the

same error during verification. Update

test expectations accordingly.

Provide a fallback implementation for svn_fs_paths_changed3.

* subversion/libsvn_fs/fs-loader.c

(SVN_FS_EMULATE_REPORT_CHANGES): Add this macro to optionally enforce

API emulation.

(svn_fs_paths_changed3): Emulate the new API using old one either when

enforced by macro or as a fallback for FS that

don't provide the new API.

Define a callback-based FS API to report changed paths.

The old API is not going to be deprecated until the majority of users have

been migrated. Also, there is no backend that implements the new API, so

this will simply segfault when being called. The next patch will fix this

by adding a fallback implementation for it.

* subversion/include/svn_fs.h

(svn_fs_path_change3_t): Declare the new path change data type. Lose

the unusable noderev ID and add the path, so

this struct is now self-sufficient.

(svn_fs_path_change3_create): Declare a suitable constructor to help

future binary compatibility.


svn_fs_paths_changed3): The actual new API & callback function type.

* subversion/include/private/svn_fs_util.h

(svn_fs__path_change_create_internal2): Declare a suitable private API

to instantiate the new data

struct - similar to the old one.

* subversion/libsvn_fs_util/fs-util.c

(svn_fs__path_change_create_internal2): Implement the new internal API

similar to the old one.

* subversion/libsvn_fs/fs-loader.h

(root_vtable_t): Add entry for the new API.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_paths_changed3): Implement as simple vtable call. This will

actually segfault for now b/c nobody provides

the function.

(svn_fs_path_change3_create): Implement like svn_fs_path_change2_create.

* subversion/libsvn_fs_base/tree.c

* subversion/libsvn_fs_fs/tree.c

* subversion/libsvn_fs_x/tree.c

(root_vtable): None of these backends actually implement the new API.

* subversion/libsvn_client/resolved.c


(svn_client_conflict_prop_get_resolution_options): Forgot to localize

descriptions while copying conflict options from static arrays.

Found by: rhuijben

Reduce memory consumption of DAV merge responses (commits).

* subversion/mod_dav_svn/merge.c

(do_resources): Since the paths in the changes list provided by the FS

are already unique, we only need to track thoes that

might clash with ones we add ourselves.

Revert r1727785 (committed the wrong file).
[Reverted in r1727789]

Reduce memory consumption of DAV merge responses (commits).

* subversion/mod_dav_svn/merge.c

(do_resources): Since the paths in the changes list provided by the FS

are already unique, we only need to track thoes that

might clash with ones we add ourselves.

* subversion/svn/conflict-callbacks.c: Stop including svn_wc_private.h.

* subversion/libsvn_client/resolved.c

(svn_client_conflict_prop_get_resolution_options): Ensure that options

returned from here live in writable memory so that option->type_data

can be written to. Should fix access violation on Windows.

Found by: svn-windows-local buildbot

* subversion/libsvn_client/resolved.c

(prop_conflict_option): Fix the callback for 'base' property conflict option.

* subversion/svn/conflict-callbacks.c

(mark_conflict_resolved): Use the new client conflict API to mark

conflicts as resolved, instead of calling into libsvn_wc.

* subversion/libsvn_client/resolved.c

(prop_conflicts): Allow 'base', 'mine-conflict', and 'theirs-conflict'

for property conflicts because libsvn_wc supports this.

At present, libsvn_wc treats 'mine-conflict' and 'theirs-conflict'

just like 'mine-full' and 'theirs-full'. For backwards compat we should

keep accepting them, and perhaps we'll decide to make 'mine-conflict'

and 'theirs-conflict' do something different in the future.

* subversion/libsvn_client/resolved.c

(svn_client_conflict_tree_resolve_by_id): Add a hack that makes the

'--accept mine-conflict' option work for 2 specific tree conflicts.

In Subversion 1.9 these conflicts could be resolved to 'mine-conflict'

and we should keep allowing this for backwards compatibility, even if

the conflict prompt doesn't offer this option anymore.

* subversion/libsvn_client/resolved.c

(svn_client_conflict_tree_get_resolution_options): Always add an option

which allows the user to accept the current working copy state. This option

was not added if automated resolution is possible, but it needs to be

always available so that '--accept working' can function.

* subversion/libsvn_client/resolved.c

(text_conflict_options): Add svn_client_conflict_option_base_text to the

list of valid text conflict options. Missed by accident.

* subversion/libsvn_client/resolved.c

(resolve_conflict): Plug an error leak.

Remove unused path change types from FSX containers.

* subversion/libsvn_fs_x/changes.c

(CHANGE_KIND_MASK): Update as we use one bit less now.



CHANGE_KIND_MOVEREPLACE): Remove these unused change kinds.

Add support for the mergeinfo_mod flag to FSX changed paths list containers.

This had been omitted by accident.

* subversion/libsvn_fs_x/changes.c

(CHANGE_MERGEINFO_MOD): Define bit we use to represent the flag.

(append_change): Store the new flag.

(svn_fs_x__changes_get_list): Return the new flag.

Cleanse FSX changed paths lists code from the renmants of noderev_id.

* subversion/libsvn_fs_x/fs.h

(svn_fs_x__change_t): Remove noderev ID element entirely.

* subversion/libsvn_fs_x/transaction.h

(svn_fs_x__add_change): ID parameter is no longer used.

* subversion/libsvn_fs_x/transaction.c

(svn_fs_x__add_change): Update.

* subversion/libsvn_fs_x/tree.c

(add_change): Update caller.







apply_text): Update respective next caller level.

In FSX, remove all code that reads and writes noderev IDs in changed

path lists.

* subversion/libsvn_fs_x/changes.c

(CHANGE_TXN_NODE): No longer needed.

(binary_change_t): Remove noderev ID element.





svn_fs_x__changes_get_list_func): Remove all noderev ID access for

containered changed paths lists.

* subversion/libsvn_fs_x/low_level.c


write_change_entry): No longer read and write noderev IDs when

reading / writing non-packed changes lists.

* subversion/libsvn_fs_x/transaction.c

(fold_change): The noderev ID is now meaningless here.

(svn_fs_x__add_change): Don't store the noderev ID anymore.

(write_final_rev): No longer update the noderev in changed paths lists.

(sanitize_changed_path_info): No longer neccessary.

(commit_body): Update caller.

In FSX, begin getting rid of the redundant noderev IDs within changed

paths lists.

This change dynamically determines the ID for the changed_paths API

implementation, effectively rendering the stored IDs unnecessary.

* subversion/libsvn_fs_x/tree.c

(construct_fs_id): New function to construct the ID object dynamically.

(construct_fs_path_change): Update to call the new utility instead of

using the info provided in CHANGE. Add a

few pass-through parameters.

(x_paths_changed): Update the next level caller.

* subversion/libsvn_fs_fs/id.c

(locale_independent_strtol): Clarify comment. No functional change.

* site/publish/ideas.html

(Project ideas): Add 'svnadmin unpack' as an idea.

* subversion/svn/conflict-callbacks.c

(mark_conflict_resolved): Move this function further up in the file to avoid

a forward declaration.

* subversion/libsvn_client/resolved.c

(conflict_get_internal): Initialize text and tree conflict resolution options

to 'unspecified' rather than 'undefined'.

* subversion/include/svn_client.h


(svn_client_conflict_tree_get_resolution): Update docstring accordingly.


(svn_client_conflict_prop_get_resolution): Return 'unspecified' rather than

'undefined' for property conflicts which haven't been resolved yet.


(svn_client_conflict_prop_get_resolution): Update docstring accordingly.

Create distinct conflict option IDs for our current tree conflict resolution

options (there are only 2 options which actually resolve a tree conflict).

The new options are only used in libsvn_client and 'svn' for now. The

current libsvn_wc interfaces still force us to map conflict option IDs to

svn_wc_conflict_choice_t. As a side effect, --accept mine-conflict still

works with these tree conflicts, but that may change later (we'll need a

different system than a single --accept option to resolve arbitrary tree

conflicts in a non-interactive way).

* subversion/include/svn_client.h


svn_client_conflict_option_update_any_moved_away_children): Declare.

(svn_client_conflict_option_id_to_wc_conflict_choice): Declare. This is a

temorary interface which maps option ID to legacy conflict choice.

* subversion/libsvn_client/resolved.c

(conflict_option_id_to_wc_conflict_choice): Rename to ...

(svn_client_conflict_option_id_to_wc_conflict_choice): ... this and expose as

a temporary public API function. Map the new option IDs to the legacy

conflict choice 'mine-conflict' so libsvn_wc will still resolve these

conflicts correctly.

(resolve_conflict): Update caller.

(svn_client_conflict_tree_get_resolution_options): Assign the new option IDs

to their respective tree conflict options.

* subversion/svn/conflict-callbacks.c

(builtin_resolver_options): Add new options IDs. Use code "u" for them,

a mnemonic for "update", instead of "mc" ("mine-conflict").

(conflict_option_id_to_wc_conflict_choice): Remove. This was a copy of

the same function in libsvn_client.

(mark_conflict_resolved): Use the new

svn_client_conflict_option_id_to_wc_conflict_choice() interface.


Add r1725180 and vote for it (don't serialize uncachable directories)

On the 1.9.x-r1725180 branch:

Merge r1725180 from /trunk, resolve the text conflict and make everything

compile again.

Open 1.9.x backport branch for r1725180.