Checkout Tools
  • last updated 4 hours ago
Constraints
Constraints: committers
 
Constraints: files
Constraints: dates
* subversion/libsvn_repos/rev_hunt.c

(get_merged_mergeinfo): Switch to using the new svn_fs_paths_changed3 API.

Note that there is no early out anymore; we scan

all changes directly instead of fetching them first.

Optimize 'svn blame' a bit.

* subversion/libsvn_repos/rev_hunt.c

(send_path_revision): Use svn_fs_props_changed() to find whether properties

may have changed and retrieving new properties worth the effort. Otherwise

just use LAST_PROPS.

Following up on r1709388, undo the behavior change of the calling sites of

svn_fs_contents_different() and svn_fs_props_different() that is not required

nor justified in the context of fixing issue #4598, "No-op changes no longer

dumped by 'svnadmin dump' in 1.9".

This commit also restores the hack required for blame -g for old clients

(see r1686478, r1686888) in rev_hunt.c:send_path_revision(). Perhaps there

is a better replacement for it, since we now have the original behavior of

svn_fs_contents_changed() available, but this can be handled separately.

* subversion/libsvn_fs_fs/dag.c

(svn_fs_fs__dag_things_different): Tweak the related comment within this

function.

* subversion/libsvn_fs_fs/tree.c

(merge): Compare the property lists based on their contents.

* subversion/libsvn_repos/delta.c

(delta_proplists): Use svn_fs_props_different() when comparing property

lists.

(svn_repos__compare_files): Call svn_fs_contents_different() instead of

reimplementing the content comparison in this function.

(delta_files): Call svn_fs_contents_different(), as we were doing prior

to r1709388.

* subversion/libsvn_repos/reporter.c

(delta_proplists): Use svn_fs_props_different() when comparing property

lists.

* subversion/libsvn_repos/rev_hunt.c

(send_path_revision): Call svn_fs_contents_different(). Restore the

blame -g compatibility hack.

* subversion/include/svn_ra.h

(svn_ra_get_file_revs2): Restore the original @note in the docstring.

* subversion/include/svn_repos.h

(svn_repos_get_file_revs2): Restore the original @note in the docstring.

  1. … 6 more files in changeset.
Restore the 1.8 behavior of svn_fs_contents_changed() and _props_changed()

API. Switch all calling sites of the new API, svn_fs_contents_different()

and _props_different(), back to using the old functions.

There are no user-visible problems associated with the old code. The new

API doesn't improve any real use cases in the current code, but is causing

problems:

- We had a problem with misbehaving svn blame -g

(http://svn.haxx.se/dev/archive-2015-06/0069.shtml, "Blame behaviour

change in 1.9").

- We have an issue with repositories behaving differently in client-side

operations like 'svn log' after dump/load

(http://svn.haxx.se/dev/archive-2015-09/0269.shtml, "No-op changes no

longer dumped by 'svnadmin dump' in 1.9"; also see issue #4598 in

https://issues.apache.org/jira/browse/SVN-4598).

- We could experience same problems originating from other callers of the

new API, because the low level behavior change associated with switching

to it propagates up to higher levels like svn_repos or svn_ra and alters

the behavior of many different callers like svn_ra_get_file_revs2() or

the update reporter. Third-party API callers could not be ready for it

as well, because public API functions like svn_ra_get_file_revs2() didn't

receive an erratum or a bump.

See the discussion in http://svn.haxx.se/dev/archive-2015-10/0022.shtml

("Re: No-op changes no longer dumped by 'svnadmin dump' in 1.9").

* subversion/libsvn_fs_base/dag.c

(svn_fs_base__things_different): Compare the uniquifiers, as we did in 1.8.

* subversion/libsvn_fs_base/fs.h

(node_revision_t.data_key_uniquifier): Remove the comment about not using

this field.

* subversion/libsvn_fs_fs/fs_fs.c

(svn_fs_fs__noderev_same_rep_key): Reintroduce this helper function.

(svn_fs_fs__file_text_rep_equal, svn_fs_fs__prop_rep_equal): Always

assume the strict mode in these helpers.

* subversion/libsvn_fs_fs/fs_fs.h

(svn_fs_fs__noderev_same_rep_key): Declare this re-added helper.

(svn_fs_fs__file_text_rep_equal, svn_fs_fs__prop_rep_equal): Update the

docstrings for these helper functions.

* subversion/libsvn_fs_fs/dag.c

(svn_fs_fs__dag_things_different): Preserve the current comparison behavior

in strict mode. Restore the 1.8 way of comparing the representation keys

in non-strict mode.

* subversion/libsvn_fs_fs/tree.c

(merge): Restore the 1.8 way of comparing property lists.

* subversion/libsvn_fs_fs/fs.h

(representation_t.uniquifier): Remove the comment about not using this

field.

* subversion/libsvn_repos/delta.c

(delta_proplists): Switch back to using svn_fs_props_changed().

(svn_repos__compare_files): Restore this function to its 1.8 state.

(delta_files): Restore the 1.8 way of comparing files.

* subversion/libsvn_repos/dump.c

(dump_node): Switch back to using svn_fs_contents_changed() and

svn_fs_props_changed().

* subversion/libsvn_repos/reporter.c

(delta_proplists): Switch back to using svn_fs_props_changed().

* subversion/libsvn_repos/rev_hunt.c

(send_path_revision): Switch back to using svn_fs_contents_changed().

Remove the no longer necessary hack for svn blame -g with older clients.

* subversion/include/svn_ra.h

(svn_ra_get_file_revs2): Update @note in the docstring.

* subversion/include/svn_repos.h

(svn_repos_get_file_revs2): Update @note in the docstring.

* subversion/tests/cmdline/svnadmin_tests.py

(dump_no_op_change): No longer fails with fsfs and bdb.

  1. … 13 more files in changeset.
Follow-up to r1708003: Accidentally didn't set the "refresh" option.

* subversion/libsvn_repos/fs-wrap.c

(svn_repos_fs_change_rev_prop4,

svn_repos_fs_revision_prop,

svn_repos_fs_revision_proplist): Always return the latest revprop data.

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

(close_revision,

revprops_close_revision): Same.

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_get_committed_info): Same.

Found by: rhuijben

  1. … 2 more files in changeset.
Switch the remaining FS API calls in lib_repos to the latest FS API.

* subversion/libsvn_repos/commit.c

(invoke_commit_cb): There is no point enabling revprop caching here

because it could only speed up a 3rd access while

we have only two.

* subversion/libsvn_repos/fs-wrap.c

(svn_repos_fs_change_rev_prop4,

svn_repos_fs_revision_prop,

svn_repos_fs_revision_proplist): These queries perform only a single

revprop read and that needs to return

the latest data.

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_get_committed_info): Same.

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

(close_revision): Same.

(revprops_close_revision): This one needs to read the latest data.

  1. … 3 more files in changeset.
Speed up revprop access in svn_repos_get_file_revs2() by using the latest

FS API.

* subversion/libsvn_repos/rev_hunt.c

(send_path_revision): Read revprops from the FS cache if we can.

(svn_repos_get_file_revs2): Refresh the revprops only once, at the start

of the operation. This is the only public

function that calls the above.

Therefore, we still fulfill the visibility

guarantees for revprop changes.

Follow-up to r1707997: Fix build.

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_dated_revision): Call the function by its correct name.

Speed up revprop access in svn_repos_dated_revision() by using the latest

FS API.

* subversion/libsvn_repos/rev_hunt.c

(get_time): Read revprops from the FS cache if we can.

(svn_repos_dated_revision): Refresh the revprops only once, at the start

of the operation. This is the only public

function that, indirectly, calls the above.

Therefore, we still fulfill the visibility

guarantees for revprop changes.

Fix some typos in comments, mostly of the 's/then/than' variety.

Found by "grep -i '\([a-z]er\|more\|less\) then'".

  1. … 9 more files in changeset.
Fix CVE-2015-3187: Adjust when svn_repos_trace_node_locations() makes the authz checks.

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_trace_node_locations): Check authz later.

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

(struct authz_read_baton_t): New.

(mkdir_delete_copy, authz_read_func, verify_locations,

set_expected): New helpers.

(trace_node_locations_authz): New test.

(test_funcs): Add new test.

* subversion/tests/cmdline/authz_tests.py

(authz_log_and_tracing_test): Expect different error for cat, and

different behaviour for diff.

  1. … 2 more files in changeset.
* subversion/libsvn_repos/rev_hunt.c (send_path_revision):

Mark todo comment with our traditional ### triple hash.

No functional change.

Improve upon r1686478:

We only need to apply the path comparison hack for 'svn blame' in -g mode;

standard blame does the Right Thing even when mixing renames and changes.

Therefore, inform the hack when it needs to be applied and when not.

* subversion/libsvn_repos/rev_hunt.c

(send_baton): Add a flag for the -g mode.

(send_path_revision): Only apply the hack in -g mode.

(get_file_revs_backwards,

svn_repos_get_file_revs2): Initialize the new baton field.

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

(handle_rev): Adapt - reverting the r1686478 change here.

  1. … 1 more file in changeset.
Workaround for 'svn blame' -g with old clients.

Old clients rely on receiving a callback whenever the path changes, e.g.

when switching from one branch to another. So, for now, we unconditionally

send a text delta in that case. Future releases should make that backward

compatibility behavior an option that will be controlled be e.g. client

capabilities.

Found by: philip

* subversion/libsvn_repos/rev_hunt.c

(send_path_revision): Always send a text delta when the path changes.

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

(handle_rev): Update the expectations.

  1. … 1 more file in changeset.
Add a few more boundary revision checks on the ra_revision_errors test.

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_node_location_segments): Make sanity checks more explicit,

instead of relying on later fs calls to produce similar results.

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

(stub_log_receiver,

stub_segment_receiver): New function.

(ra_revision_errors): Extend function.

  1. … 1 more file in changeset.
Simplify code a bit.

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_trace_node_locations): Use svn_sort__array() helper to sort

APR array.

Rename local variable. No functional changes intended.

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_deleted_rev): Rename SUBPOOL to ITERPOOL.

Follow-up to r1554807: Fix unbounded memory usage.

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_deleted_rev): Reduce scope of COPY_ROOT and COPY_PATH local

variables to make code more clear about their lifetime. Use SUBPOOL

for temporary allocations in the loop: it restores pre r1554807

memory usage characteristics.

Make svn_ra_get_file_revs2() capable of handling SVN_INVALID_REVNUM as head

revision.

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_get_file_revs2): Convert invalid revisions to HEAD.

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

(handle_rev): Support bigger range.

(test_file_revs_both_ways): Extend test.

  1. … 1 more file in changeset.
Extend regression tests around svn_ra_get_file_revs2, and walking through

history with it. Add additional boolean to JavaHL api for this function.

* subversion/bindings/javahl/native/RemoteSession.cpp

(callback): Pass information on whether there is a delta.

(call): Pass boolean.

* subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java

(FileRevision.FileRevision): Add textDelta argument. Fill field.

(FileRevision.hasTextDelta): New function.

(FileRevision.textDelta): New field.

* subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java

(testGetFileRevisions): Extend test.

* subversion/libsvn_repos/rev_hunt.c

(send_path_revision): Avoid doing work that is ignored.

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

(handle_rev_baton): New struct.

(handle_rev,

test_file_revs_both_ways): New function.

(test_funcs): Add test_file_revs_both_ways.

  1. … 4 more files in changeset.
Add comments.

* subversion/libsvn_repos/rev_hunt.c

(path_revision,

get_merged_mergeinfo): Explain what the mergeinfo 'difference' really is.

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.
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.
Add svn_sort__array() -- simple wrapper around qsort() to sort APR array

and use where applicable.

* subversion/include/private/svn_sorts_private.h

(svn_sort__array): New declaration.

* subversion/libsvn_subr/sorts.c

(svn_sort__array): New.

* subversion/libsvn_client/add.c

(): Include svn_sorts_private.h.

(mkdir_urls): Use svn_sort__array().

* subversion/libsvn_client/commit.c

(): Include svn_sorts_private.h.

(determine_lock_targets): Use svn_sort__array().

* subversion/libsvn_client/commit_util.c

(): Remove stdlib.h and include svn_sorts_private.h.

(svn_client__condense_commit_items): Use svn_sort__array().

* subversion/libsvn_client/ra.c

(): Include svn_sorts_private.h.

(svn_client__repos_location_segments): Use svn_sort__array().

* subversion/libsvn_client/resolved.c

(): Remove stdlib.h and include svn_sorts_private.h.

(svn_client__resolve_conflicts): Use svn_sort__array().

* subversion/libsvn_delta/path_driver.c

(): Include svn_sorts_private.h.

(svn_delta_path_driver2): Use svn_sort__array().

* subversion/libsvn_diff/parse-diff.c

(): Include svn_sorts_private.h.

(svn_diff_parse_next_patch): Use svn_sort__array().

* subversion/libsvn_fs_fs/cached_data.c

(read_dir_entries): Use svn_sort__array().

* subversion/libsvn_fs_fs/transaction.c

(verify_locks): Use svn_sort__array().

* subversion/libsvn_ra/compat.c

(svn_ra__locations_from_log): Use svn_sort__array().

* subversion/libsvn_repos/log.c

(): Include svn_sorts_private.h.

(turn_unique_copies_into_moves, combine_mergeinfo_path_lists,

handle_merged_revisions): Use svn_sort__array().

* subversion/libsvn_repos/replay.c

(): Include svn_sorts_private.h.

(svn_repos__replay_ev2): Use svn_sort__array().

* subversion/libsvn_repos/rev_hunt.c

(): Include svn_sorts_private.h.

(find_merged_revisions): Use svn_sort__array().

* subversion/libsvn_subr/mergeinfo.c

(combine_with_lastrange, parse_revision_line, svn_mergeinfo_sort): Use

svn_sort__array().

* subversion/libsvn_wc/revert.c

(): Include svn_sorts_private.h.

(revert_restore_handle_copied_dirs): Use svn_sort__array().

* subversion/svndumpfilter/svndumpfilter.c

(): Include svn_sorts_private.h.

(do_filter): Use svn_sort__array().

  1. … 17 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.
In libsvn_repos, simplify hash iteration code a little by using key and

value accessor functions rather than apr_hash_this(), as we already do in

many other places.

Though I lament the length of those svn__apr_hash_index_* identifiers (which

I created), at least it's a step closer to readable. We can shorten them

later to apr_hash_this_* by adding configury, now that APR 1.5 has those.

* subversion/libsvn_repos/delta.c

(delta_dirs): As above.

* subversion/libsvn_repos/fs-wrap.c

(svn_repos_fs_commit_txn): As above.

* subversion/libsvn_repos/hooks.c

(lock_token_content): As above.

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

(prefix_mergeinfo_paths,

renumber_mergeinfo_revs,

remove_node_props): As above.

* subversion/libsvn_repos/log.c

(svn_repos_check_revision_access,

turn_moves_into_copies,

turn_unique_copies_into_moves,

detect_changed,

fs_mergeinfo_changed,

get_combined_mergeinfo_changes,

send_log,

combine_mergeinfo_path_lists): As above.

* subversion/libsvn_repos/replay.c

(add_subdir,

svn_repos_replay2,

svn_repos__replay_ev2): As above.

* subversion/libsvn_repos/reporter.c

(delta_proplists): As above.

* subversion/libsvn_repos/rev_hunt.c

(find_merged_revisions): As above.

  1. … 7 more files in changeset.
Follow-up to r1572363: Instead of using a "STRICT" parameter, split the

contents comparison functions into the old approximate ones and a new

exact ones.

There seems to be no point in having the boolean option as other code

would always set it to TRUE. Even svn_*_get_file_revs2 will now always

operate in "strict" mode because there is little point in not doing so.

(Adding a "strict" flag svn_*_get_file_revs2 would cause major code churn

just to have the only client-side user, blame(), set it fixed to TRUE).

* subversion/include/svn_fs.h

(svn_fs_props_changed2): Rename to ...

(svn_fs_props_different): ... this and drop the STRICT parameter.

(svn_fs_props_changed): De-deprecate.

(svn_fs_contents_changed2): Rename to ...

(svn_fs_contents_different): ... this and drop the STRICT parameter.

(svn_fs_contents_changed): De-deprecate.

* subversion/include/svn_ra.h

(svn_ra_get_file_revs2): Document that we won't send random empty

deltas anymore.

* subversion/include/svn_repos.h

(svn_ra_get_file_revs2): Ditto.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_props_changed2,

svn_fs_props_different,

svn_fs_contents_changed2,

svn_fs_contents_different): Reflect to API change.

* subversion/libsvn_repos/delta.c

(delta_proplists,

svn_repos__compare_files,

delta_files): Use the newly renamed strict API functions.

* subversion/libsvn_repos/dump.c

(dump_node): Same.

* subversion/libsvn_repos/reporter.c

(delta_proplists): Same.

* subversion/libsvn_repos/rev_hunt.c

(send_path_revision): Same. This enables the new, predictable / strict

behavior of svn_*_get_file_revs2.

  1. … 7 more files in changeset.
* subversion/tests/libsvn_repos/rev_hunt.c

(send_path_revision): Tweak a comment about false-positive detection

of changes, following r1572363.

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.
Factor out some repeated code.

* subversion/include/private/svn_fs_private.h,

subversion/libsvn_fs/fs-loader.c

(svn_fs__get_mergeinfo_for_path): New, semi-public and modified version of

a function that was in rev_hunt.c.

* subversion/libsvn_repos/log.c

(fs_mergeinfo_changed,

get_combined_mergeinfo_changes): Use it to simplify code.

* subversion/libsvn_repos/rev_hunt.c

(get_path_mergeinfo): Delete this version of the repeated code.

(get_merged_mergeinfo): Adjust to use the new version.

  1. … 3 more files in changeset.