Checkout Tools
  • last updated 4 hours ago
Constraints
Constraints: committers
 
Constraints: files
Constraints: dates
First step towards making svn_ra_get_mergeinfo streamy instead of using

unbound amounts of memory.

The server-side implementation of svn_ra_get_mergeinfo does not scale

well as it collects all m/i into a catalog first before sending the data

over the wire. Using callbacks to process the mergeinfo immediately at

the point it was found will fix this issue.

In this first step, we switch the FS API layer to using callbacks.

* subversion/include/svn_fs.h

(svn_fs_mergeinfo_receiver_t): Declare new callback.

(svn_fs_get_mergeinfo3,

svn_fs_get_mergeinfo2): Bump API.

* subversion/libsvn_fs/deprecated.c

(mergeinfo_receiver,

svn_fs_get_mergeinfo2): Implement the old API in terms of the new one.

* subversion/libsvn_fs/fs-loader.h

(root_vtable_t): Adapt the FS Vtable to mirror the API change.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_get_mergeinfo3): The bumped API replaces ...

(svn_fs_get_mergeinfo2): ... this old one.

* subversion/libsvn_fs_fs/tree.c

(crawl_directory_dag_for_mergeinfo): Invoke the receiver callback instead

of accumulating the result. No more

need for the RESULT_POOL, either.

(add_descendant_mergeinfo): Pass new signature through.

(get_mergeinfos_for_paths): Invoke the receiver callback instead of

accumulating the result. No more need for the

RESULT_POOL, either.

(fs_get_mergeinfo): Pass new signature through.

* subversion/libsvn_fs_x/tree.c

(crawl_directory_dag_for_mergeinfo,

add_descendant_mergeinfo,

get_mergeinfos_for_paths,

x_get_mergeinfo): Same changes as for FSFS.

* subversion/libsvn_fs_base/tree.c

(get_mergeinfo_data_and_entries_baton,

txn_body_get_mergeinfo_data_and_entries,

crawl_directory_for_mergeinfo,

get_mergeinfos_for_paths): Invoke the receiver callback instead of

accumulating the result. No more need

for the RESULT_POOL, either.

(base_get_mergeinfo): Pass new signature through.

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

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.

  1. … 7 more files in changeset.
* subversion/libsvn_fs_base/tree.c

(txn_body_commit): Ensure root node is mutable so that revisions have

distinct root node-revision-ids. This fixes fs-test 2 FAIL for BDB.

Use the typesafe svn_sort__array() helper instead of qsort() in a few places.

* subversion/libsvn_client/merge.c

(get_mergeinfo_paths,

combine_range_with_segments): Use svn_sort__array().

* subversion/libsvn_fs_base/tree.c

(includes): Add svn_sorts_private.h.

(verify_locks): Use svn_sort__array().

* subversion/mod_dav_svn/repos.c

(negotiate_encoding_prefs): Use svn_sort__array(). Remove const from local

variable.

* subversion/tests/libsvn_client/client-test.c

(includes): Add svn_sorts_private.h.

(test_remote_only_status): Use svn_sort__array().

  1. … 3 more files in changeset.
Add an fs layer api that allows obtaining just a boolean indicating whether

properties exist on a node, instead of always obtaining the properties and

checking their count.

This is by far the most expensive operation on 'svn ls -v' in Subversion <=

1.8.x on huge directories as it requires fetching much 'new' data, and has

the risk of trashing the node cache.

r1673153 made new 'svn' clients stop asking for this information for this

scenario but existing clients do ask and so will most likely many third

party clients (confirmed for TortoiseSVN), will keep asking for this

information.

This function introduces the FS api and updates callers, but doesn't provide

optimized implementations yet, so the result is that this doesn't change

runtime behaviour yet, but just moves the implementation into the fs layer.

I hope this patch will be accepted for 1.9.0 to allow further improvements

in later patches, potentially after 1.9.0.

* subversion/include/svn_fs.h

(svn_fs_node_has_props): New function.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_node_has_props): New function.

* subversion/libsvn_fs/fs-loader.h

(root_vtable_t): Add node_has_props.

* subversion/libsvn_fs_base/tree.c

(base_node_has_props): New function.

(root_vtable): Add function.

* subversion/libsvn_fs_fs/tree.c

(fs_node_has_props): New function.

(root_vtable): Add function.

* subversion/libsvn_fs_x/tree.c

(x_node_has_props): New function.

(root_vtable): Add function.

* subversion/libsvn_ra_local/ra_plugin.c

(svn_ra_local__get_dir): Use new optimized fs call. Rename subpool

to iterpool.

* subversion/libsvn_repos/repos.c

(svn_repos_stat): Use new optimized fs call.

* subversion/mod_dav_svn/liveprops.c

(insert_prop_internal): Use optimized code for svn clients.

* subversion/svnserve/serve.c

(get_dir): Use optimized fs code.

* subversion/tests/libsvn_ra/ra-test.c

(ra_list_has_props): New function.

(test_funcs): Add ra_list_has_props.

  1. … 10 more files in changeset.
FS API change:

The new svn_fs_dir_optimal_order shall follow the two pool paradigm.

* subversion/include/svn_fs.h

(svn_fs_dir_optimal_order): Switch to the appropriate new paradigm.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_dir_optimal_order): Update API implementation.

* subversion/libsvn_fs/fs-loader.h

(root_vtable_t): Update v-table.

* subversion/libsvn_fs_base/tree.c

(base_dir_optimal_order): Update BDB implementation.

* subversion/libsvn_fs_fs/tree.c

(fs_dir_optimal_order): Update FSFS vtable implementation.

* subversion/libsvn_fs_fs/pack.h

(svn_fs_fs__order_dir_entries): Update internal function signature.

* subversion/libsvn_fs_fs/pack.c

(svn_fs_fs__order_dir_entries): Update "actual" FSFS implmenentation.

* subversion/libsvn_fs_x/tree.c

(x_dir_optimal_order): Update FSX vtable implementation.

* subversion/libsvn_fs_x/pack.h

(svn_fs_x__order_dir_entries): Update internal function signature.

* subversion/libsvn_fs_x/pack.c

(svn_fs_x__order_dir_entries): Update "actual" FSX implmenentation.

* subversion/libsvn_repos/reporter.c

(delta_dirs): Update caller to provide a scratch pool as well.

* subversion/tests/libsvn_fs/fs-test.c

(test_dir_optimal_order): Same.

  1. … 11 more files in changeset.
FS API change: Rename svn_fs_node_same to svn_fs_node_unchanged.

Note that we currently (ab-)use the same enum in the FS implementation for

ID relationships but this is a mere convenience. They don't have the same

semantics wrt. to edge cases and don't expose their use of the enum through

the FS API.

* subversion/include/svn_fs.h

(svn_fs_node_relation_t): Rename said element and document the semantics

of all elements in terms of (root, path) pairs

other FS API concepts. Be as strict as feasible.

Remove references to #svn_fs_compare_ids as it

does _not_ have the same strictness guarantees.

* subversion/libsvn_fs_base/id.c

(svn_fs_base__id_compare): Update enum element name.

* subversion/libsvn_fs_base/tree.c

(txn_body_copy): Same.

* subversion/libsvn_fs/editor.c

(can_modify): Same.

* subversion/libsvn_fs_fs/id.c

(svn_fs_fs__id_compare): Same.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_compare_ids): Same.

* subversion/libsvn_fs_fs/tree.c

(fs_node_relation): Same.

* subversion/libsvn_fs_x/fs_id.c

(id_compare): Same.

* subversion/libsvn_fs_x/tree.c

(x_node_relation): Same.

* subversion/libsvn_repos/delta.c

(svn_repos_dir_delta2): Same.

* subversion/mod_dav_svn/repos.c

(do_out_of_date_check): Same.

* subversion/mod_dav_svn/util.c

(dav_svn__get_safe_cr): Same.

* subversion/mod_dav_svn/version.c

(dav_svn__checkout): Same.

* subversion/tests/libsvn_fs/fs-test.c

(check_related,

check_txn_related): Same.

  1. … 13 more files in changeset.
Make svn_string_dup() more comfortable to use. Allow the input string

to be NULL and return NULL for the copy in that case.

Right now, it will segfault for NULL pointers and virtually all callers

check for NULL before calling and emulate the improved logic.

So, this change will not break any legal API user code but save us lots

of duplicated logic.

* subversion/include/svn_string.h

(svn_string_dup): Update docstring.

* subversion/libsvn_subr/string.c

(svn_string_dup): Return NULL as copy for NULL inputs.

* subversion/libsvn_client/mtcc.c

(mtcc_prop_getter): Simplify caller.

* subversion/libsvn_client/repos_diff.c

(change_file_prop,

change_dir_prop): Same.

* subversion/libsvn_fs_base/tree.c

(base_node_prop): Same.

* subversion/libsvn_ra_serf/commit.c

(change_dir_prop,

change_file_prop): Same.

* subversion/libsvn_repos/reporter.c

(get_revision_info): Same.

* subversion/libsvn_wc/diff_editor.c

(change_file_prop,

change_dir_prop): Same.

* subversion/libsvn_wc/externals.c

(change_file_prop): Same.

* subversion/libsvn_wc/props.c

(svn_wc__merge_props): Same.

* subversion/libsvn_wc/update_editor.c

(change_dir_prop,

change_file_prop): Same.

* subversion/svnrdump/load_editor.c

(set_node_property): Same.

  1. … 11 more files in changeset.
Following the availability of apr_hash_this_key() etc. in APR v1.5, use

these in Subversion code instead of svn__apr_hash_index_key() etc. Provide

substitutes only when APR is too old to provide them.

* subversion/include/svn_types.h,

subversion/libsvn_subr/iter.c

(svn__apr_hash_index_key,

svn__apr_hash_index_klen,

svn__apr_hash_index_val):

Rename to apr_hash_this_key, apr_hash_this_key_len, apr_hash_this_val.

Declare and define them only if APR is older than 1.5.

Everywhere else: track the renames.

  1. … 102 more files in changeset.
Reverting experimental move-related APIs.

For details see http://svn.haxx.se/dev/archive-2014-05/0155.shtml

This effectively reverts revisions 1595600,1572044,1547039,1535341,

1535330,1535080,1535029,1534280,1532200,1527217,1527088,1526057,

1526014,1526013,1525484,1525467,1525464,1525463,1525462,1525460,

1525459,1525453,1525448,1525442,1525432,1525429 and 1525419.

Remove respective entries from CHANGES.

  1. … 43 more files in changeset.
Fix excessive memory usage during 'svn log -g' with FSFS / FSX.

The root cause is that in --include-merges mode, we recursively

call do_log() such that outer iteration are suddenly long-lived.

In turn, DAG nodes used temporarily in some sub-function are kept

along with a lock on the DAG node cache. The inability to garbage

collect that cache results in hundreds of MB dynamic memory usage

for some repos.

This patch revs two history related FS API functions to using the

two-pool paradigm. It allows all DAG nodes to be released early

because they are all temporaries used inside those functions.

Implement API bump in all backends, update the callers and tighten

pool usage where appropriate.

* subversion/include/svn_fs.h

(svn_fs_node_history2): New, two-pool version of ...

(svn_fs_node_history): ... this now deprecated API.

(svn_fs_history_prev2): New, two-pool version of ...

(svn_fs_history_prev): ... this now deprecated API.

* subversion/libsvn_fs/fs-loader.h

(root_vtable_t,

history_vtable_t): Make the vtable entries match the bumped API.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_node_history2): Implement new API as vtable call.

(svn_fs_node_history): Call the bumped vtable entry directly.

(svn_fs_history_prev2): Implement new API as vtable call.

(svn_fs_history_prev): Call the bumped vtable entry directly.

* subversion/libsvn_fs_base/tree.c

(base_node_history): Update implementation and use the SCRATCH_POOL

for the one temporary that we have.

(base_history_prev): Update signature and always use the RESULT_POOL

as there are no easy to identify temporaries.

* subversion/libsvn_fs_fs/tree.c

(fs_node_history): Update implementation and use the SCRATCH_POOL

for the one temporary that we have.

(fs_history_prev): Update implementation and laverage the already

existing two-pool capability of history_prev().

* subversion/libsvn_fs_x/tree.c

(x_node_history,

fs_history_prev): Do the same in FSX as we did for FSFS.

* subversion/libsvn_repos/log.c

(detect_changed): Bump API calls with no extra benefit.

(get_history): Switch to two-pool paradigm and call the bumped API

with those separate pools. Use the SCRATCH_POOL in

authentication.

(check_history): Switch to two-pool paradigm and call the bumped API

with those separate pools.

(get_path_histories): Use the ITERPOOL as scratch pool for called funcs.

(do_logs): Use a separate iteration pool for the inner loop such that

we may clean it up right after check_history and before

going into do_log recursion.

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_history2,

check_ancestry_of_peg_path): Bump API calls and use the pool that

will be cleaned up next as scratch.

(find_interesting_revisions): Bump API calls with no extra benefit.

(get_file_revs_backwards): Bump API calls and use the pool that

will be cleaned up next as scratch.

  1. … 7 more files in changeset.
Revert r1508225, which moved the include of svn_private_config.h before all

includes of our public headers. Public headers shouldn't depend on private

headers and all changes that required this are long reverted on trunk.

This patch excludes all conflicting cases.

* subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c

* subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c

* subversion/libsvn_auth_gnome_keyring/gnome_keyring.c

* subversion/libsvn_client/add.c

* subversion/libsvn_client/cat.c

* subversion/libsvn_client/changelist.c

* subversion/libsvn_client/cleanup.c

* subversion/libsvn_client/commit.c

* subversion/libsvn_client/commit_util.c

* subversion/libsvn_client/copy.c

* subversion/libsvn_client/copy_foreign.c

* subversion/libsvn_client/ctx.c

* subversion/libsvn_client/delete.c

* subversion/libsvn_client/deprecated.c

* subversion/libsvn_client/diff.c

* subversion/libsvn_client/diff_local.c

* subversion/libsvn_client/diff_summarize.c

* subversion/libsvn_client/export.c

* subversion/libsvn_client/externals.c

* subversion/libsvn_client/import.c

* subversion/libsvn_client/info.c

* subversion/libsvn_client/iprops.c

* subversion/libsvn_client/list.c

* subversion/libsvn_client/locking_commands.c

* subversion/libsvn_client/log.c

* subversion/libsvn_client/merge.c

* subversion/libsvn_client/mergeinfo.c

* subversion/libsvn_client/patch.c

* subversion/libsvn_client/prop_commands.c

* subversion/libsvn_client/ra.c

* subversion/libsvn_client/repos_diff.c

* subversion/libsvn_client/resolved.c

* subversion/libsvn_client/revert.c

* subversion/libsvn_client/switch.c

* subversion/libsvn_client/update.c

* subversion/libsvn_client/util.c

* subversion/libsvn_delta/compat.c

* subversion/libsvn_delta/xdelta.c

* subversion/libsvn_diff/parse-diff.c

* subversion/libsvn_diff/util.c

* subversion/libsvn_fs/access.c

* subversion/libsvn_fs_base/bdb/changes-table.c

* subversion/libsvn_fs_base/bdb/env.c

* subversion/libsvn_fs_base/dag.c

* subversion/libsvn_fs_base/fs.c

* subversion/libsvn_fs_base/lock.c

* subversion/libsvn_fs_base/revs-txns.c

* subversion/libsvn_fs_base/tree.c

* subversion/libsvn_fs_fs/caching.c

* subversion/libsvn_fs_fs/lock.c

* subversion/libsvn_fs_fs/temp_serializer.c

* subversion/libsvn_fs_fs/tree.c

* subversion/libsvn_ra/compat.c

* subversion/libsvn_ra/deprecated.c

* subversion/libsvn_ra/ra_loader.c

* subversion/libsvn_ra_local/ra_plugin.c

* subversion/libsvn_ra_serf/blame.c

* subversion/libsvn_ra_serf/blncache.c

* subversion/libsvn_ra_serf/commit.c

* subversion/libsvn_ra_serf/getlocations.c

* subversion/libsvn_ra_serf/getlocationsegments.c

* subversion/libsvn_ra_serf/getlocks.c

* subversion/libsvn_ra_serf/inherited_props.c

* subversion/libsvn_ra_serf/log.c

* subversion/libsvn_ra_serf/merge.c

* subversion/libsvn_ra_serf/mergeinfo.c

* subversion/libsvn_ra_serf/options.c

* subversion/libsvn_ra_serf/property.c

* subversion/libsvn_ra_serf/replay.c

* subversion/libsvn_ra_serf/serf.c

* subversion/libsvn_ra_serf/update.c

* subversion/libsvn_ra_serf/util.c

* subversion/libsvn_ra_serf/xml.c

* subversion/libsvn_ra_svn/client.c

* subversion/libsvn_ra_svn/editorp.c

* subversion/libsvn_ra_svn/marshal.c

* subversion/libsvn_repos/authz.c

* subversion/libsvn_repos/commit.c

* subversion/libsvn_repos/delta.c

* subversion/libsvn_repos/deprecated.c

* subversion/libsvn_repos/fs-wrap.c

* subversion/libsvn_repos/hooks.c

* subversion/libsvn_repos/log.c

* subversion/libsvn_repos/replay.c

* subversion/libsvn_repos/reporter.c

* subversion/libsvn_repos/repos.c

* subversion/libsvn_repos/rev_hunt.c

* subversion/libsvn_subr/auth.c

* subversion/libsvn_subr/cmdline.c

* subversion/libsvn_subr/compat.c

* subversion/libsvn_subr/config.c

* subversion/libsvn_subr/config_auth.c

* subversion/libsvn_subr/deprecated.c

* subversion/libsvn_subr/dso.c

* subversion/libsvn_subr/hash.c

* subversion/libsvn_subr/io.c

* subversion/libsvn_subr/mergeinfo.c

* subversion/libsvn_subr/opt.c

* subversion/libsvn_subr/properties.c

* subversion/libsvn_subr/simple_providers.c

* subversion/libsvn_subr/sorts.c

* subversion/libsvn_subr/ssl_client_cert_providers.c

* subversion/libsvn_subr/ssl_client_cert_pw_providers.c

* subversion/libsvn_subr/ssl_server_trust_providers.c

* subversion/libsvn_subr/subst.c

* subversion/libsvn_subr/types.c

* subversion/libsvn_subr/username_providers.c

* subversion/libsvn_subr/utf.c

* subversion/libsvn_subr/win32_crypto.c

* subversion/libsvn_wc/adm_crawler.c

* subversion/libsvn_wc/adm_files.c

* subversion/libsvn_wc/conflicts.c

* subversion/libsvn_wc/copy.c

* subversion/libsvn_wc/deprecated.c

* subversion/libsvn_wc/diff_editor.c

* subversion/libsvn_wc/diff_local.c

* subversion/libsvn_wc/entries.c

* subversion/libsvn_wc/externals.c

* subversion/libsvn_wc/info.c

* subversion/libsvn_wc/lock.c

* subversion/libsvn_wc/node.c

* subversion/libsvn_wc/old-and-busted.c

* subversion/libsvn_wc/props.c

* subversion/libsvn_wc/revert.c

* subversion/libsvn_wc/status.c

* subversion/libsvn_wc/update_editor.c

* subversion/libsvn_wc/upgrade.c

* subversion/libsvn_wc/wc_db_update_move.c

* subversion/libsvn_wc/wc_db_wcroot.c

* subversion/mod_dav_svn/repos.c

* subversion/mod_dav_svn/version.c

* subversion/svn/cl-conflicts.c

* subversion/svn/commit-cmd.c

* subversion/svn/conflict-callbacks.c

* subversion/svn/diff-cmd.c

* subversion/svn/help-cmd.c

* subversion/svn/notify.c

* subversion/svn/propedit-cmd.c

* subversion/svn/propget-cmd.c

* subversion/svn/props.c

* subversion/svn/status-cmd.c

* subversion/svn/status.c

* subversion/svn/svn.c

* subversion/svn/util.c

* subversion/svnadmin/svnadmin.c

* subversion/svnlook/svnlook.c

* subversion/svnrdump/dump_editor.c

* subversion/svnrdump/svnrdump.c

* subversion/svnrdump/util.c

* subversion/svnserve/serve.c

* subversion/svnsync/svnsync.c

* subversion/svnsync/sync.c

* subversion/tests/libsvn_fs/fs-test.c

* subversion/tests/libsvn_repos/repos-test.c

* subversion/tests/libsvn_subr/hashdump-test.c

* subversion/tests/libsvn_subr/mergeinfo-test.c

* subversion/tests/libsvn_subr/subst_translate-test.c

* subversion/tests/libsvn_wc/conflict-data-test.c

* subversion/tests/libsvn_wc/op-depth-test.c

* subversion/tests/libsvn_wc/wc-test.c

* subversion/tests/svn_test_fs.c

* tools/server-side/fsfs-stats.c

Move the svn_string_private.h include back to the original location.

  1. … 162 more files in changeset.
Since we introduced symbolic names for all kinds of node relationships

in r1554800, let's use them instead of magic values everywhere in the

FS layer. There is no actual change to the logic.

* subversion/libsvn_fs/fs-loader.h

(id_vtable_t): Use the new enum as the return value of compare.

Tweak formatting for consistency.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_check_related,

svn_fs_compare_ids): Convert the new FS ID vtable return value type

to the FS API level type.

* subversion/libsvn_fs_base/id.h

(svn_fs_base__id_compare): Update return type to match vtable.

* subversion/libsvn_fs_base/id.c

(svn_fs_base__id_compare): Update implementation.

* subversion/libsvn_fs_base/tree.c

(get_copy_inheritance,

base_node_relation,

txn_body_copy): Update BDB-internal users of that function.

* subversion/libsvn_fs_fs/id.h

(svn_fs_fs__id_compare): Similar change as in BDB.

* subversion/libsvn_fs_fs/id.c

(svn_fs_fs__id_compare): Ditto.

* subversion/libsvn_fs_fs/tree.c

(get_copy_inheritance): Update FSFS-internal users of that function.

* subversion/libsvn_fs_x/id.h

(svn_fs_x__id_compare): Similar change as in BDB.

* subversion/libsvn_fs_x/id.c

(svn_fs_x__id_compare): Ditto.

* subversion/libsvn_fs_x/tree.c

(get_copy_inheritance): Update FSX-internal users of that function.

Suggested by: julianfoad

  1. … 10 more files in changeset.
Incorporate documentation and naming feedback gotten for r1554800.

No functional change.

* subversion/include/svn_fs.h

(svn_fs_node_relation_t): Add references to the values previously

used for these relations. Fix member

spelling and docstring typos.

(svn_fs_node_relation): Just declare the current behavior as the

intended one.

* subversion/libsvn_fs_base/tree.c

(base_node_relation): Adapt to enum member spelling fix.

* subversion/libsvn_fs_fs/tree.c

(fs_node_relation): Ditto.

* subversion/libsvn_fs_x/tree.c

(x_node_relation): Ditto.

Suggested by: julianfoad

  1. … 3 more files in changeset.
Expose the recent change detection improvements in the FS API by adding

a STRICT option to rev'ed svn_fs_props_changed and svn_fs_content_changed

functions.

Update all backends and API users. Most API users want strict behavior

as they would otherwise to calc the diff on their own. The only exception

is the svn_repos_get_file_revs2 API which passes the data on to a callback.

* subversion/include/svn_fs.h

(svn_fs_props_changed2,

svn_fs_contents_changed2): Revved versions of the respective APIs.

(svn_fs_props_changed,

svn_fs_contents_changed): Deprecate.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_props_changed2,

svn_fs_contents_changed2): Implement.

(svn_fs_props_changed,

svn_fs_contents_changed): Update vtable call.

* subversion/libsvn_fs/fs-loader.h

(root_vtable_t): Update vtable entries for revved API functions.

* subversion/libsvn_fs_base/tree.c

(base_props_changed,

base_contents_changed): Accept new STRICT parameter and pass it on.

* subversion/libsvn_fs_fs/tree.c

(fs_props_changed,

fs_contents_changed): Ditto.

* subversion/libsvn_fs_x/tree.c

(x_props_changed,

x_contents_changed): Ditto.

* subversion/libsvn_repos/delta.c

(delta_proplists): Update API call.

(svn_repos__compare_files,

delta_files): Use the revved API and greatly simplify the code since

the FS API changed indications are now reliable.

* subversion/libsvn_repos/dump.c

(dump_node): Update API call.

* subversion/libsvn_repos/reporter.c

(delta_proplists): Ditto.

* subversion/libsvn_repos/rev_hunt.c

(send_path_revision): Update API call but allow false positives for now.

  1. … 9 more files in changeset.
Improve the accuracy of the "Have props/contents changed between two nodes?"

check for all three backends.

First, we consider props / text contents as equal whenever the same physical

representation is being used - even if the uniquifiers differ. There is no

such test for directories and it is not needed by any API, ATM. Secondly,

file contents is considered equal when the SHA1 checksums match (same as in

the working copy). We also compare the MD5 checksums as they are always

available and offer a quick mismatch test.

Lastly, if the SHA1 is not available, we actually compare the reconstructed

fulltexts - but only if the caller requires a strict equality test with no

false negatives. The FS API currently calls the internal functionality in

non-strict, i.e. "quick check" mode.

Property lists use a similar checking scheme. However, we limit the test to

MD5 (FSFS, FSX only) and use a fulltext comparison in strict mode only if

MD5s are not available. As a side-effect of the extra accuracy, the commit

conflict detection / merge code in non-BDB now allows for equal directory

property lists to be committed to the same node in concurrent transactions

without creating a conflict.

The BDB implementation is the most straightforward of the three backends

because the respective function are directly at the vtable level. We simply

add checksum and fulltext comparison as needed.

In FSFS, the actual comparison lies deeper in the caller hierarchy and is

being used by other functions as well. We need to replace the generic "is

the rep equal" test by two tests, one for each kind of representation. They

will then perform similar tests as in BDB but with more callers to update.

The prop comparison will also use the MD5 checksums when available.

The FSX code has the same structure as FSFS but it does need to cater for

legacy data. Therefore, the file contents check is much simpler and can

always use the MD5 + SHA1 checksums.

* subversion/include/private/svn_fs_util.h

(svn_fs__prop_lists_equal): Declare new private contents comparison API.

* subversion/libsvn_fs_util/fs-util.c

(svn_fs__prop_lists_equal): Implement it.

* subversion/libsvn_fs_base/dag.c

(svn_fs_base__things_different): Ignore uniquifier since we are only

interested in actual content differences.

* subversion/libsvn_fs_base/tree.c

(things_changed_args): Add the STRICT option to our parameter set.

(txn_body_props_changed,

txn_body_contents_changed): Add more comparisons to eliminate false

positives as described above.

(base_props_changed,

base_contents_changed): FS API implementation is currently non-strict.

* subversion/libsvn_fs_fs/fs_fs.h

(svn_fs_fs__noderev_same_rep_key): Drop old test function.

(svn_fs_fs__file_text_rep_equal,

svn_fs_fs__prop_rep_equal): Introduce separate APIs for different types

of representations; provide more context

such that we may query missing information.

* subversion/libsvn_fs_fs/fs_fs.c

(svn_fs_fs__noderev_same_rep_key): Drop old test function.

(svn_fs_fs__file_text_rep_equal,

svn_fs_fs__prop_rep_equal): Implement.

* subversion/libsvn_fs_fs/dag.h

(svn_fs_fs__dag_things_different): Add STRICT option and provide a pool

for FS queries as needed.

* subversion/libsvn_fs_fs/dag.c

(svn_fs_fs__dag_things_different): Update implementation to call the new

comparison functions.

* subversion/libsvn_fs_fs/tree.c

(fs_props_changed,

fs_contents_changed): Update callers and use non-strict mode for these

FS API functions.

(merge): Adapt to API change and force strict prop comparison to prevent

unnecessary conflicts.

* subversion/libsvn_fs_x/fs_x.h

(svn_fs_x__noderev_same_rep_key): Drop old test function.

(svn_fs_x__file_text_rep_equal): Similar to FSFS but with a simpler

signature because there is no need to

query for addition data.

svn_fs_x__prop_rep_equal): Similar to FSFS.

* subversion/libsvn_fs_x/fs_x.c

(svn_fs_x__noderev_same_rep_key): Drop old test function.

(svn_fs_x__file_text_rep_equal,

svn_fs_x__prop_rep_equal): Implement.

* subversion/libsvn_fs_x/dag.h

(svn_fs_x__dag_things_different): Change similarly as FSFS.

* subversion/libsvn_fs_x/dag.c

(svn_fs_x__dag_things_different): Ditto.

* subversion/libsvn_fs_x/tree.c

(x_props_changed,

merge,

x_contents_changed): Ditto.

  1. … 13 more files in changeset.
Just remove svn_fs_base__key_compare().

The function has different semantics than strcmp, but this doesn't matter for

how we use it. Leaving the macro around essentially means we need to document

strcmp again which is silly.

* subversion/libsvn_fs_base/key-gen.h

(svn_fs_base__key_compare): Remove.

* subversion/libsvn_fs_base/revs-txns.c

(delete_txn_tree): Update callers to use strcmp directly.

* subversion/libsvn_fs_base/tree.c

(get_copy_inheritance, txn_body_copied_from, txn_body_history_prev): ...

  1. … 2 more files in changeset.
Provide a path-based counterpart to svn_fs_base__id_compare.

Most code can now compare nodes directly (next commit) using

fewer LOCs and being faster for non-BDB repositories.

It also introduces improvements over the id-based API: An enum

replaces the various magic return values and nodes from different

repositories are reported as "unrelated" instead of yielding an

undefined result.

* subversion/include/svn_fs.h

(svn_fs_node_relation_t,

svn_fs_node_relation): Declare the new API.

* subversion/libsvn_fs/fs-loader.h

(root_vtable_t): Add the corresponding vtable entry.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_node_relation): Implement as forwarding to the FS vtable.

* subversion/libsvn_fs_base/tree.c

(base_node_relation): Naive implementation of the new API;

basically what the users did in the past.

(root_vtable): Update.

* subversion/libsvn_fs_fs/tree.c

(fs_node_relation): Optimized code based on fs_node_id() and

svn_fs_fs__id_compare() using as few object

copies as possible. Since all logic is in

one place now, it will be easier to refine

in the future.

(root_vtable): Update.

* subversion/libsvn_fs_x/tree.c

(x_node_relation): Implement similarly to FSFS.

(root_vtable): Update.

  1. … 5 more files in changeset.
In preparation for committing over RA with a specified svn:date,

change the FS implementation from a flag in svn_fs_commit_txn2 to

a flag passed to svn_fs_begin_txn2.

* subversion/include/svn_fs.h

(SVN_FS_TXN_CLIENT_DATE): New.

(svn_fs_commit_txn2): Remove.

(svn_fs_commit_txn): Remove deprecation.

* subversion/libsvn_fs/fs-loader.h

(struct txn_vtable_t): Remove set_timestamp parameter from commit.

(SVN_FS__PROP_TXN_CLIENT_DATE): New.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_commit_txn2): Remove.

(svn_fs_change_txn_prop, svn_fs_change_txn_props): Drop changes to the

internal property.

* subversion/libsvn_fs/editor.c

(svn_fs__editor_commit): Use svn_fs_commit_txn.

* subversion/libsvn_fs_fs/transaction.h

(svn_fs_fs__commit): Remove set_timestamp parameter.

* subversion/libsvn_fs_fs/transaction.c

(svn_fs_fs__change_txn_props): Record svn:date change.

(write_final_revprop): Remove set_timestamp parameter.

(struct commit_baton): Remove set_timestamp member.

(commit_body): Update call.

(svn_fs_fs__commit): Remove set_timestamp parameter.

(svn_fs_fs__begin_txn): Set new temporary property.

* subversion/libsvn_fs_fs/tree.h

(svn_fs_fs__commit_txn): Remove set_timestamp parameter.

* subversion/libsvn_fs_fs/tree.c

(svn_fs_fs__commit_txn): Remove set_timestamp parameter.

* subversion/libsvn_fs_base/dag.h

(svn_fs_base__dag_commit_txn): Remove set_timestamp parameter.

* subversion/libsvn_fs_base/dag.c

(svn_fs_base__dag_commit_txn): Remove set_timestamp parameter.

* subversion/libsvn_fs_base/revs-txns.c

(svn_fs_base__set_txn_prop): Record svn:date change.

(txn_body_begin_txn): Set new temporary property.

* subversion/libsvn_fs_base/tree.h

(svn_fs_base__commit_txn): Remove set_timestamp parameter.

* subversion/libsvn_fs_base/tree.c

(struct commit_args): Remove set_timestamp member.

(txn_body_commit): Update call.

(svn_fs_base__commit_txn): Remove set_timestamp parameter.

* subversion/libsvn_fs_x/transaction.h

(svn_fs_x__commit): Remove set_timestamp parameter.

* subversion/libsvn_fs_x/transaction.c

(change_txn_props): Record svn:date change.

(write_final_revprop): Remove set_timestamp parameter.

(struct commit_baton): Remove set_timestamp member.

(commit_body): Update call.

(svn_fs_x__commit): Remove set_timestamp parameter.

(svn_fs_x__begin_txn): Set new temporary property.

* subversion/libsvn_fs_x/tree.h

(svn_fs_x__commit_txn): Remove set_timestamp parameter.

* subversion/libsvn_fs_x/tree.c

(svn_fs_x__commit_txn): Remove set_timestamp parameter.

* subversion/libsvn_repos/fs-wrap.c

(svn_repos_fs_commit_txn): Use svn_fs_commit_txn.

* subversion/libsvn_repos/load-fs-vtable.c

(new_revision_record): Set SVN_FS_TXN_CLIENT_DATE.

(close_revision): Use svn_fs_commit_txn.

* subversion/tests/libsvn_fs/fs-test.c

(commit_timestamp): Set SVN_FS_TXN_CLIENT_DATE, use svn_fs_commit_txn,

test setting internal property.

* subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c

(upgrade_txns_to_log_addressing): Use svn_fs_commit_txn.

* subversion/tests/libsvn_repos/repos-test.c

(test_config_pool): Use svn_fs_commit_txn.

  1. … 21 more files in changeset.
[Reverted in r1597989]

Add svn_fs_move() to the FS API and support it in all backends.

Once at it, slightly reorder the FS vtable.

* subversion/include/svn_fs.h

(svn_fs_move): declare new API

* subversion/libsvn_fs/fs-loader.h

(root_vtable_t): add move() entry; shift generic copy functions

up to the generic node operations section

* subversion/libsvn_fs/fs-loader.c

(svn_fs_move): implement by forwarding to the vtable

* subversion/libsvn_fs_base/tree.c

(root_vtable): update vtable

* subversion/libsvn_fs_fs/tree.c

(root_vtable): update vtable

* subversion/libsvn_fs_x/tree.c

(root_vtable): update vtable

  1. … 5 more files in changeset.
[Reverted in r1597989]

Add rudimentary MOVe support to BDB by simply recording add-with-history

instead of true moves. In combination with the auto-move feature (see

later commits), this will still result in most of these adds being treated

as if they were proper moves.

* subversion/libsvn_fs_base/tree.c

(base_revision_link): implement future API function

Merged branches/fsfs-improvements into /trunk (clean merge).

Removed BRANCH-README.

  1. … 47 more files in changeset.
Fix the #include order such that svn_private_config.h is always

included first before any other svn header - if we also include

svn_hash.h.

* subversion/bindings/javahl/native/org_apache_subversion_javahl_ConfigImpl_Category.cpp,

subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c,

subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c,

subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c,

subversion/libsvn_auth_gnome_keyring/gnome_keyring.c,

subversion/libsvn_client/add.c,

subversion/libsvn_client/cat.c,

subversion/libsvn_client/changelist.c,

subversion/libsvn_client/cleanup.c,

subversion/libsvn_client/commit.c,

subversion/libsvn_client/commit_util.c,

subversion/libsvn_client/copy.c,

subversion/libsvn_client/copy_foreign.c,

subversion/libsvn_client/ctx.c,

subversion/libsvn_client/delete.c,

subversion/libsvn_client/deprecated.c,

subversion/libsvn_client/diff.c,

subversion/libsvn_client/diff_local.c,

subversion/libsvn_client/diff_summarize.c,

subversion/libsvn_client/export.c,

subversion/libsvn_client/externals.c,

subversion/libsvn_client/import.c,

subversion/libsvn_client/info.c,

subversion/libsvn_client/iprops.c,

subversion/libsvn_client/list.c,

subversion/libsvn_client/locking_commands.c,

subversion/libsvn_client/log.c,

subversion/libsvn_client/merge.c,

subversion/libsvn_client/mergeinfo.c,

subversion/libsvn_client/patch.c,

subversion/libsvn_client/prop_commands.c,

subversion/libsvn_client/ra.c,

subversion/libsvn_client/repos_diff.c,

subversion/libsvn_client/resolved.c,

subversion/libsvn_client/revert.c,

subversion/libsvn_client/status.c,

subversion/libsvn_client/switch.c,

subversion/libsvn_client/update.c,

subversion/libsvn_client/util.c,

subversion/libsvn_delta/compat.c,

subversion/libsvn_delta/xdelta.c,

subversion/libsvn_diff/parse-diff.c,

subversion/libsvn_diff/util.c,

subversion/libsvn_fs/access.c,

subversion/libsvn_fs_base/bdb/changes-table.c,

subversion/libsvn_fs_base/bdb/env.c,

subversion/libsvn_fs_base/dag.c,

subversion/libsvn_fs_base/fs.c,

subversion/libsvn_fs_base/lock.c,

subversion/libsvn_fs_base/revs-txns.c,

subversion/libsvn_fs_base/tree.c,

subversion/libsvn_fs_fs/caching.c,

subversion/libsvn_fs_fs/fs_fs.c,

subversion/libsvn_fs/fs-loader.c,

subversion/libsvn_fs_fs/lock.c,

subversion/libsvn_fs_fs/temp_serializer.c,

subversion/libsvn_fs_fs/tree.c,

subversion/libsvn_fs_util/fs-util.c,

subversion/libsvn_ra/compat.c,

subversion/libsvn_ra/deprecated.c,

subversion/libsvn_ra_local/ra_plugin.c,

subversion/libsvn_ra/ra_loader.c,

subversion/libsvn_ra_serf/blame.c,

subversion/libsvn_ra_serf/blncache.c,

subversion/libsvn_ra_serf/commit.c,

subversion/libsvn_ra_serf/getlocations.c,

subversion/libsvn_ra_serf/getlocationsegments.c,

subversion/libsvn_ra_serf/getlocks.c,

subversion/libsvn_ra_serf/inherited_props.c,

subversion/libsvn_ra_serf/log.c,

subversion/libsvn_ra_serf/merge.c,

subversion/libsvn_ra_serf/mergeinfo.c,

subversion/libsvn_ra_serf/options.c,

subversion/libsvn_ra_serf/property.c,

subversion/libsvn_ra_serf/replay.c,

subversion/libsvn_ra_serf/serf.c,

subversion/libsvn_ra_serf/update.c,

subversion/libsvn_ra_serf/util.c,

subversion/libsvn_ra_serf/xml.c,

subversion/libsvn_ra_svn/client.c,

subversion/libsvn_ra_svn/editorp.c,

subversion/libsvn_ra_svn/marshal.c,

subversion/libsvn_repos/authz.c,

subversion/libsvn_repos/commit.c,

subversion/libsvn_repos/delta.c,

subversion/libsvn_repos/deprecated.c,

subversion/libsvn_repos/fs-wrap.c,

subversion/libsvn_repos/hooks.c,

subversion/libsvn_repos/log.c,

subversion/libsvn_repos/replay.c,

subversion/libsvn_repos/reporter.c,

subversion/libsvn_repos/repos.c,

subversion/libsvn_repos/rev_hunt.c,

subversion/libsvn_subr/auth.c,

subversion/libsvn_subr/cmdline.c,

subversion/libsvn_subr/compat.c,

subversion/libsvn_subr/config_auth.c,

subversion/libsvn_subr/config.c,

subversion/libsvn_subr/deprecated.c,

subversion/libsvn_subr/dso.c,

subversion/libsvn_subr/hash.c,

subversion/libsvn_subr/io.c,

subversion/libsvn_subr/mergeinfo.c,

subversion/libsvn_subr/opt.c,

subversion/libsvn_subr/properties.c,

subversion/libsvn_subr/simple_providers.c,

subversion/libsvn_subr/sorts.c,

subversion/libsvn_subr/ssl_client_cert_providers.c,

subversion/libsvn_subr/ssl_client_cert_pw_providers.c,

subversion/libsvn_subr/ssl_server_trust_providers.c,

subversion/libsvn_subr/subst.c,

subversion/libsvn_subr/types.c,

subversion/libsvn_subr/username_providers.c,

subversion/libsvn_subr/utf.c,

subversion/libsvn_subr/win32_crypto.c,

subversion/libsvn_wc/adm_crawler.c,

subversion/libsvn_wc/adm_files.c,

subversion/libsvn_wc/adm_ops.c,

subversion/libsvn_wc/conflicts.c,

subversion/libsvn_wc/copy.c,

subversion/libsvn_wc/deprecated.c,

subversion/libsvn_wc/diff_editor.c,

subversion/libsvn_wc/diff_local.c,

subversion/libsvn_wc/entries.c,

subversion/libsvn_wc/externals.c,

subversion/libsvn_wc/info.c,

subversion/libsvn_wc/lock.c,

subversion/libsvn_wc/node.c,

subversion/libsvn_wc/old-and-busted.c,

subversion/libsvn_wc/props.c,

subversion/libsvn_wc/revert.c,

subversion/libsvn_wc/status.c,

subversion/libsvn_wc/translate.c,

subversion/libsvn_wc/update_editor.c,

subversion/libsvn_wc/upgrade.c,

subversion/libsvn_wc/wc_db.c,

subversion/libsvn_wc/wc_db_update_move.c,

subversion/libsvn_wc/wc_db_wcroot.c,

subversion/libsvn_wc/workqueue.c,

subversion/mod_dav_svn/activity.c,

subversion/mod_dav_svn/deadprops.c,

subversion/mod_dav_svn/lock.c,

subversion/mod_dav_svn/merge.c,

subversion/mod_dav_svn/mod_dav_svn.c,

subversion/mod_dav_svn/reports/update.c,

subversion/mod_dav_svn/repos.c,

subversion/mod_dav_svn/version.c,

subversion/svnadmin/svnadmin.c,

subversion/svnauth/svnauth.c,

subversion/svn/cl-conflicts.c,

subversion/svn/commit-cmd.c,

subversion/svn/conflict-callbacks.c,

subversion/svn/diff-cmd.c,

subversion/svn/help-cmd.c,

subversion/svnlook/svnlook.c,

subversion/svnmucc/svnmucc.c,

subversion/svn/notify.c,

subversion/svn/propedit-cmd.c,

subversion/svn/propget-cmd.c,

subversion/svn/props.c,

subversion/svnrdump/dump_editor.c,

subversion/svnrdump/svnrdump.c,

subversion/svnrdump/util.c,

subversion/svnserve/serve.c,

subversion/svn/status.c,

subversion/svn/status-cmd.c,

subversion/svn/svn.c,

subversion/svnsync/svnsync.c,

subversion/svnsync/sync.c,

subversion/svn/util.c,

subversion/tests/libsvn_fs/fs-test.c,

subversion/tests/libsvn_repos/repos-test.c,

subversion/tests/libsvn_subr/hashdump-test.c,

subversion/tests/libsvn_subr/mergeinfo-test.c,

subversion/tests/libsvn_subr/subst_translate-test.c,

subversion/tests/libsvn_wc/conflict-data-test.c,

subversion/tests/libsvn_wc/op-depth-test.c,

subversion/tests/libsvn_wc/wc-test.c,

subversion/tests/svn_test_fs.c,

tools/dev/fsfs-reorg.c,

tools/server-side/fsfs-stats.c): #include svn_private_config.h first

  1. … 180 more files in changeset.
Make svnadmin load really atomic by adding option to

svn_fs_commit_txn2 to disable updating 'svn:date' revision property after

committing transaction.

* subversion/include/svn_fs.h

(svn_fs_commit_txn2): New. Revv svn_fs_commit_txn() and add new

SET_TIMESTAMP argument to disable setting 'svn:date' in FS layer.

* subversion/libsvn_fs/fs-loader.h

* subversion/libsvn_fs/fs-loader.c

(svn_fs_commit_txn2): Revv svn_fs_commit_txn() and pass set_timestamp

argument to commit vtable method.

(svn_fs_commit_txn): Call svn_fs_commit_txn2() with SET_TIMESTAMP=TRUE.

* subversion/libsvn_fs_base/dag.h

* subversion/libsvn_fs_base/dag.c

(svn_fs_base__dag_commit_txn): Add SET_TIMESTAMP argument and update

'svn:date' revision property only if SET_TIMESTAMP is non-zero.

* subversion/libsvn_fs_base/tree.c

* subversion/libsvn_fs_base/tree.h

(commit_args): Add SET_TIMESTAMP member.

(txn_body_commit): Pass SET_TIMESTAMP to svn_fs_base__dag_commit_txn().

(svn_fs_base__commit_txn): Add SET_TIMESTAMP argument and store it in

commit baton.

* subversion/libsvn_fs_fs/fs_fs.h

* subversion/libsvn_fs_fs/fs_fs.c

(commit_baton): Add SET_TIMESTAMP member.

(commit_body): Update 'svn:date' revision property only if SET_TIMESTAMP

is non-zero.

(svn_fs_fs__commit): Add SET_TIMESTAMP argument and store it in commit

baton.

* subversion/libsvn_fs_fs/tree.c

* subversion/libsvn_fs_fs/tree.h

(svn_fs_fs__commit_txn): Add SET_TIMESTAMP argument and pass it to

svn_fs_fs__commit().

* subversion/libsvn_repos/load-fs-vtable.c

(close_revision): Use svn_fs_commit_txn2() and do not fix-up 'svn:date'

property after commit.

  1. … 11 more files in changeset.
Attempt a similar fix to BDB as r1494913 provided for FSFS.

* subversion/libsvn_fs_base/tree.c

(base_node_origin_rev): add efficient shortcut for the root folder

Revert the "just-for-symmetry" changes made in r1483532 and keep only

those used for log and merge info in tight loops.

* subversion/libsvn_client/add.c

(svn_client__get_all_auto_props): switch back to svn_hash_[g|s]ets

* subversion/libsvn_client/commit_util.c

(svn_client__ensure_revprop_table): same

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_single): same

* subversion/libsvn_client/list.c

(svn_client__ra_stat_compatible): same

* subversion/libsvn_client/log.c

(pre_15_receiver): same

* subversion/libsvn_client/merge.c

(prepare_merge_props_changed, merge_file_added, merge_dir_added,

merge_dir_deleted): same

* subversion/libsvn_client/mergeinfo.c

(svn_client__get_wc_or_repos_mergeinfo_catalogue): same

* subversion/libsvn_fs_base/tree.c

(txn_body_get_mergeinfo_data_and_entries,

txn_body_get_mergeinfo_for_path): same

* subversion/libsvn_fs_fs/fs_fs.c

(write_revision_zero): same

* subversion/libsvn_fs_fs/tree.c

(get_mergeinfo_for_path_internal): same

* subversion/libsvn_ra/deprecated.c

(svn_ra_get_commit_editor2): same

* subversion/libsvn_ra_local/ra_plugin.c

(svn_ra_local__get_commit_editor, svn_ra_local__get_commit_ev2): same

* subversion/libsvn_ra_svn/client.c

(ra_svn_commit): same

* subversion/libsvn_repos/commit.c

(svn_repos__get_commit_ev2): same

* subversion/libsvn_repos/delta.c

(delta_proplists): same

* subversion/libsvn_repos/deprecated.c

(svn_repos_get_commit_editor4): same

* subversion/libsvn_repos/dump.c

(dump_node, write_revision_record): same

* subversion/libsvn_repos/fs-wrap.c

(svn_repos_fs_begin_txn_for_commit2, svn_repos_fs_begin_txn_for_commit,

svn_repos_fs_revision_proplist): same

* subversion/libsvn_repos/reporter.c

(get_revision_info): same

* subversion/libsvn_wc/status.c

(collect_ignore_patterns): same

* subversion/mod_dav_svn/activity.c

(dav_svn__create_txn): same

* subversion/mod_dav_svn/lock.c

(append_locks): same

* subversion/svndumpfilter/svndumpfilter.c

(output_revision): same

* subversion/svnmucc/svnmucc.c

(execute, sanitize_log_sources): same

* subversion/svnrdump/load_editor.c

(new_node_record): same

* subversion/svnserve/serve.c

(commit): same

* subversion/svnsync/svnsync.c

(replay_rev_started): same

  1. … 26 more files in changeset.
We frequently use property name constants in conjunction with hash containers.

Provide new wrappers around apr_hash_get and apr_hash_set that accept such

string constants and statically determine their size. That minimizes the

hash access costs.

Mass change hash get and set calls for SVN_PROP_* constants.

* subversion/include/svn_hash.h

(svn_hash_gets,

svn_hash_sets): Doxygen-ize the docstring

(svn_hash_gets_fixed_key,

svn_hash_sets_fixed_key): define new apr_hash_* wrapper

* subversion/libsvn_client/add.c

(svn_client__get_all_auto_props): use faster hash wrappers with SVN_PROP_*

* subversion/libsvn_client/commit_util.c

(svn_client__ensure_revprop_table): ditto

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_single): ditto

* subversion/libsvn_client/list.c

(svn_client__ra_stat_compatible): ditto

* subversion/libsvn_client/log.c

(pre_15_receiver): ditto

* subversion/libsvn_client/merge.c

(prepare_merge_props_changed, merge_file_added, merge_dir_added,

merge_dir_deleted): ditto

* subversion/libsvn_client/mergeinfo.c

(svn_client__get_wc_or_repos_mergeinfo_catalog): ditto

* subversion/libsvn_fs_base/tree.c

(txn_body_get_mergeinfo_data_and_entries,

txn_body_get_mergeinfo_for_path): same

* subversion/libsvn_fs_fs/fs_fs.c

(write_revision_zero): same

* subversion/libsvn_fs_fs/tree.c

(crawl_directory_dag_for_mergeinfo, get_mergeinfo_for_path_internal): same

* subversion/libsvn_ra/deprecated.c

(svn_ra_get_commit_editor2): same

* subversion/libsvn_ra_local/ra_plugin.c

(svn_ra_local__get_commit_editor, svn_ra_local__get_commit_ev2): same

* subversion/libsvn_ra_svn/client.c

(ra_svn_commit, ra_svn_log): same

* subversion/libsvn_repos/commit.c

(svn_repos__get_commit_ev2): same

* subversion/libsvn_repos/delta.c

(delta_proplists): same

* subversion/libsvn_repos/deprecated.c

(svn_repos_get_commit_editor4): same

* subversion/libsvn_repos/dump.c

(dump_node, write_revision_record):

* subversion/libsvn_repos/fs-wrap.c

(svn_repos_fs_begin_txn_for_commit2, svn_repos_fs_begin_txn_for_commit,

svn_repos_fs_revision_proplist): same

* subversion/libsvn_repos/log.c

(fill_log_entry): same

* subversion/libsvn_repos/reporter.c

(get_revision_info): same

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_get_committed_info): same

* subversion/libsvn_subr/compat.c

(svn_compat_log_revprops_clear, svn_compat_log_revprops_out): same

* subversion/libsvn_wc/status.c

(collect_ignore_patterns): same

* subversion/mod_dav_svn/activity.c

(dav_svn__create_txn): same

* subversion/mod_dav_svn/lock.c

(append_locks): same

* subversion/svndumpfilter/svndumpfilter.c

(output_revision): same

* subversion/svnmucc/svnmucc.c

(execute, sanitize_log_sources): same

* subversion/svnrdump/load_editor.c

(new_node_record): same

* subversion/svnserve/serve.c

(commit): same

* subversion/svnsync/svnsync.c

(replay_rev_started): same

[Most of this got reverted in r1483610]

[Remainder reverted in r1484181]

  1. … 30 more files in changeset.
Fix a SEGV triggered by commiting a change to a repository file

without a checksum (one created by svn_fs_make_file without a

subseqent svn_fs_apply_textdelta).

* subversion/libsvn_fs_base/tree.c

(txn_body_apply_textdelta): Allow retreived checksum to be NULL.

Use svn_hash_gets and svn_hash_sets.

* subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c

* subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c

* subversion/libsvn_auth_gnome_keyring/gnome_keyring.c

* subversion/libsvn_client/commit.c

* subversion/libsvn_delta/compat.c

* subversion/libsvn_delta/editor.c

* subversion/libsvn_diff/parse-diff.c

* subversion/libsvn_diff/util.c

* subversion/libsvn_fs/access.c

* subversion/libsvn_fs_base/bdb/changes-table.c

* subversion/libsvn_fs_base/dag.c

* subversion/libsvn_fs_base/fs.c

* subversion/libsvn_fs_base/lock.c

* subversion/libsvn_fs_base/revs-txns.c

* subversion/libsvn_fs_base/tree.c

* subversion/libsvn_fs_fs/fs_fs.c

* subversion/libsvn_fs_fs/lock.c

* subversion/libsvn_fs_fs/temp_serializer.c

* subversion/libsvn_fs_fs/tree.c

* subversion/libsvn_fs_util/fs-util.c

* subversion/libsvn_ra/compat.c

* subversion/libsvn_ra/deprecated.c

* subversion/libsvn_ra/ra_loader.c

* subversion/libsvn_ra_local/ra_plugin.c

* subversion/libsvn_ra_serf/blame.c

* subversion/libsvn_ra_serf/blncache.c

* subversion/libsvn_ra_serf/commit.c

* subversion/libsvn_ra_serf/getlocations.c

* subversion/libsvn_ra_serf/getlocationsegments.c

* subversion/libsvn_ra_serf/getlocks.c

* subversion/libsvn_ra_serf/inherited_props.c

* subversion/libsvn_ra_serf/log.c

* subversion/libsvn_ra_serf/merge.c

* subversion/libsvn_ra_serf/mergeinfo.c

* subversion/libsvn_ra_serf/options.c

* subversion/libsvn_ra_serf/property.c

* subversion/libsvn_ra_serf/serf.c

* subversion/libsvn_ra_serf/update.c

* subversion/libsvn_ra_serf/util.c

* subversion/libsvn_ra_serf/xml.c

* subversion/libsvn_ra_svn/client.c

* subversion/libsvn_ra_svn/editorp.c

* subversion/libsvn_ra_svn/marshal.c

* subversion/mod_dav_svn/activity.c

* subversion/mod_dav_svn/lock.c

* subversion/mod_dav_svn/merge.c

* subversion/mod_dav_svn/reports/update.c

* subversion/mod_dav_svn/repos.c

* subversion/mod_dav_svn/version.c

* subversion/svn/cl-conflicts.c

* subversion/svn/commit-cmd.c

* subversion/svn/conflict-callbacks.c

* subversion/svn/help-cmd.c

* subversion/svn/propedit-cmd.c

* subversion/svn/propget-cmd.c

* subversion/svn/status-cmd.c

* subversion/svn/status.c

* subversion/svn/svn.c

* subversion/svn/util.c

* subversion/svnadmin/svnadmin.c

* subversion/svndumpfilter/svndumpfilter.c

* subversion/svnlook/svnlook.c

* subversion/svnmucc/svnmucc.c

* subversion/svnrdump/dump_editor.c

* subversion/svnrdump/load_editor.c

* subversion/svnrdump/svnrdump.c

* subversion/svnrdump/util.c

* subversion/svnserve/serve.c

* subversion/svnsync/svnsync.c

* subversion/svnsync/sync.c

  1. … 70 more files in changeset.
Fix deprecation warnings in BDB FS code.

* subversion/libsvn_fs_base/reps-strings.c

(svn_fs_base__rep_deltify): use the new svn_txdelta_to_svndiff3 and

svn_txdelta2 instead of their predecessors

* subversion/libsvn_fs_base/tree.c

(base_get_file_delta_stream): use the new svn_txdelta2

  1. … 1 more file in changeset.