subversion

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

Changeset 1351117 is being indexed.

* subversion/bindings/swig/core.i

(python typemap: char *buffer, apr_size_t *len): Accept either a

PyInt or a PyLong buffer length argument. swig 2.0.5+ handles this

differently to previous releases.

Accept dump format v3, except for property deltas, in svndumpfilter.

Replace the hardcoded version number ("2") with a parser callback for

the dump file format version number. Used by svndumpfilter only (so

far).

Add an API option to treat text-deltas as text instead of applying

them. TRUE for svndumpfilter only.

* subversion/tests/cmdline/svndumpfilter_tests.py

(with_deltas): New test.

(test_list): Add the test.

* subversion/tests/cmdline/svndumpfilter_tests_data/simple_v3.dump

New file.

* subversion/include/svn_repos.h

(magic_header_record): New callback declaration.

(svn_repos_parse_fns3_t): Add the new callback declaration.

(svn_repos_parse_dumpstream3): Add the text-delta option.

* subversion/libsvn_repos/load.c

(parse_format_version): While we're here, put the "output" argument

first.

(svn_repos_parse_dumpstream3): Implement the text-delta-as-text option.

Pass the format version to the new callback. Don't reject v3 dumpfiles

anymore.

* subversion/svndumpfilter/main.c

(magic_header_record): New callback.

(svn_repos_parse_fns3_t): Add the new callback.

(parse_baton_initialize): Remove the hard-coded format-version output.

(do_filter): Treat text-deltas as text.

* subversion/svnrdump/load_editor.c

(magic_header_record): New callback.

(svn_rdump__load_dumpstream): Use the new callback.

* subversion/libsvn_repos/deprecated.c

(fns3_from_fns2): Set the new callback.

(svn_repos_get_fs_build_parser3): Add the text-delta option.

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

(magic_header_record): New callback.

(svn_repos_get_fs_build_parser4): Use the new callback.

(svn_repos_load_fs4): Add the text-delta option.

Make the conflict resolver send a conflict summary to the caller, before

invoking the conflict callback.

This will eventually allow 'svn' to print the conflict summary before the

interactive conflict resolution callback is invoked. This summary is currently

printed after the callback was invoked on each conflict, which isn't helpful.

This commit has no visible behaviour change yet, as this would require all

operations to delay conflict callback invocation, which has currently been

implemented only for 'update'.

* subversion/include/svn_wc.h

(svn_wc_notify_action_t): Add svn_wc_notify_conflict_summary action.

This currently sends the number of text, property, and tree conflicts in

the working copy. We might extend this later, but for now the goal is to

move the current 'svn' conflict stats collecting into the conflict resolver.

(svn_wc_notify_t): Add text_conflicts, prop_conflicts, and tree_conflicts

counters for use during an svn_wc_notify_conflict_summary notification.

* subversion/libsvn_wc/conflicts.c

(conflict_status_walker_baton): Remove.

(conflict_status_walker): Replaced by ...

(gather_conflict_stats): ... this function, which only gathers conflict

statistics and the list of conflicted paths.

(gather_conflict_stats_baton): New baton for above status walker callback.

(resolve_conflicts_on_node): New function, contains the guts of the former

conflict_status_walker() callback.

(svn_wc__resolve_conflicts): Gather conflict stats via the status walker,

send a conflict summary via the notification mechanism, and then invoke

the interactive conflict callback on each conflicted path found during

the status walk.

* subversion/svn/notify.c

(notify): Handle the new conflict summary notification. For now, this only

saves the resolver's conflict stats in the notify baton for later use.

In the future, when all operations delay invocation of the conflict callback,

we can rid of svn_cl__print_conflict_stats() and print the stats here.

I noticed my system had /tmp/default-perms.tmp, /tmp/default-perms.2.tmp

and /tmp/default-perms.3.tmp which meant that every process had to try

four names to get the default permissions. To reduce the chances of that

use a sort-of-random name and delete the file as soon as possible.

* subversion/libsvn_subr/io.c

(get_default_file_perms): Try to avoid a fixed name and explicitly

delete the file to reduce its lifetime.

Invoke the interactive conflict resolution callback after an update operation,

instead of during an update operation.

* subversion/libsvn_client/update.c

(svn_client_update4): If the caller passes in a ctx->conflict_func2, remove

it from the context to force postponed conflicts during the update, and

invoke the callback via the conflict resolver after the update has completed.

Behaviour for callers passing a 1.5-style ctx->conflict_func is unchanged

for now because there is currently no way of invoking the resolver with

the old conflict callback type.

* subversion/tests/cmdline/update_tests.py

(update_accept_conflicts): Adjust expected output. Conflicts are now shown

in update output even if auto-resolved via the --accept option.

(eof_in_interactive_conflict_resolver): Adjust expected output/status/disk.

The file 'iota' is now already in conflicted state when the conflict

callback fails because of EOF.

Refactor svn_client__get_diff_editor() implementation a bit: move fetching

of directory pristine props to close_directory() callback instead of

open_root()/add_directory()/open_directory().

* subversion/libsvn_client/repos_diff.c

(dir_baton): Remove pristine_props member. Add base_revision.

(make_dir_baton): Initialize base_revision member.

(open_root, open_directory): Do not fetch pristine props and save

base_revison in directory baton.

(add_directory): Update to use new make_dir_baton() signature.

(close_directory): Fetch pristine props if needed.

Move a constant to avoid hard-coding it twice.

* subversion/libsvn_ra_serf/update.c

(MAX_NR_OF_CONNS): Move to...

* subversion/libsvn_ra_serf/ra_serf.h

(MAX_NR_OF_CONNS): ...here.

(struct svn_ra_serf__session_t): Make conns a known size array.

* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__open): Don't allocate svn_ra_serf__connection_t.conns.

* publish/roadmap.html

(task table): mark performance branch review as 'completed'

* COMMITTERS

(vmpn): Add myself as a partial committer for JavaHL

Properly handle directories with changed properties in Ev2 replay.

* subversion/libsvn_repos/replay.c

(fetch_props_func): New.

(svn_repos_replay2): When using the Ev2 wrapper, use the proper fetch props

func.

(replay_node): Make sure we call alter_directory when we have prop mods.

* subversion/libsvn_repos/replay.c

(svn_repos__replay_ev2): Abort the editor on errors.

ra_serf: Do not fetch file from server if we already have the file with

same sha1 checksum in our pristine storage.

* subversion/libsvn_ra_serf/ra_serf.h

(type_and_checksum_props): New.

* subversion/libsvn_ra_serf/update.c

(try_get_wc_contents): New helper for svn_ra_serf__get_file().

(svn_ra_serf__get_file): Fetch sha1 checksum property if caller requested

file contents and try to fetch content from pristine storage using

WC_CONTENTS callback.

Rename a subpool used in a loop to the more idiomatic 'iterpool'.

* subversion/libsvn_client/update.c

(svn_client_update4): subpool -> iterpool

* subversion/libsvn_repos/replay.c

(replay_node): Attempt to properly handle replacements.

Make a small change in that should have been part of r1350545.

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

(svn_repos_load_fs4): Upgrade a local variable to a new type.

* subversion/libsvn_repos/replay.c

(replay_node): Relpath-ify a copyfrom_path.

Add sha1 checksum property to PROPFIND response for files.

* subversion/mod_dav_svn/liveprops.c

(props): Add SVN_PROPID_sha1_checksum.

(insert_prop_internal): Handle SVN_PROPID_sha1_checksum.

Factor out common code.

* subversion/libsvn_client/merge.c

(get_log): New. Wrapper around svn_ra_get_log2().

(remove_noop_merge_ranges, get_operative_immediate_children,

remove_noop_subtree_ranges, find_unsynced_ranges): Use get_log().

Prepare to handle dump format v3 in svndumpfilter.

This revision sets up the boilerplate for backward compatibility.

Later revisions will add a new parser callback for the version number,

and a new option to allow treating text-deltas as text (instead of

applying them immediately).

* subversion/include/svn_repos.h

(svn_repos_parse_fns3_t): New struct. Tweak the callback declarations

to reflect the usual ordering in dump files.

(svn_repos_parse_dumpstream3): New API using the new struct. No

real changes yet.

(svn_repos_get_fs_build_parser4): Modify this new-in-1.8 function to

use the new struct.

(svn_repos_parse_fns2_t,

svn_repos_parse_dumpstream2,

svn_repos_get_fs_build_parser3): Deprecate.

(svn_repos_get_fs_build_parser2): Move below below the newly-

deprecated svn_repos_parse_fns2_t declaration.

* subversion/svndumpfilter/main.c

(filtering_vtable,

do_filter): Use the new API.

* subversion/svnrdump/load_editor.c

(svn_rdump__load_dumpstream): Use the new API.

* subversion/libsvn_repos/deprecated.c

(fns2_from_fns3,

fns3_from_fns2): New functions.

(svn_repos_get_fs_build_parser3): Use the new API.

* subversion/libsvn_repos/load.c

(parse_property_block,

parse_text_block,

svn_repos_parse_dumpstream3): Use the new API.

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

(svn_repos_get_fs_build_parser4,

svn_repos_load_fs4): Use the new API.

Fix a problem with trying to fetch the Location: header when checking

out a node. The code was examining HANDLER->DONE before it would

extract the Location: header, but that was simply wrong. The Location:

header is always set before an ra_serf response handler is invoked, so

there is no need to check DONE. Further, when the DONE flag gets set,

the response handler might never get called(!).

However, the handle_checkout() response handler is really just a cover

for expect_empty_body() with an "override" to capture the Location:

header. But the core ra_serf response processing *already* captures

the Location: header whenever it is present.

So... this is run synchronously, we can just examine the handler's

LOCATION field after the request completes. And we can use

expect_empty_body() directly.

* subversion/libsvn_ra_serf/commit.c:

(checkout_context_t): not needed. removed.

(create_checkout_body): the baton is now the activity_url.

(handle_checkout): not needed. removed.

(checkout_node): no longer set up a checkout_context_t, and just

pass the activity_url as the BODY_DELEGATE_BATON. go ahead and use

svn_ra_serf__expect_empty_body for the response handler. examine

HANDLER.LOCATION after the request completes.

Further reduce memory pressure by forcing the xmlctx's scratch_pool to be

cleared as soon as we are done with the XML parser.

* subversion/libsvn_ra_serf/xml.c

(svn_ra_serf__xml_context_destroy): Implement.

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__xml_context_destroy): Declare.

* subversion/libsvn_ra_serf/util.c

(expat_response_handler): Explicitly destroy the xmlctx too.

Implement a fetch kind func for the replay Ev2 wrapper.

* subversion/libsvn_repos/replay.c

(fetch_kind_func): New.

(svn_repos_replay2): Use.

(replay_node): Relpath-ify the copyfrom path when doing a copy.

Relieve some memory pressure by delaying XML parser creation until we start

to receive a response. Otherwise, we'd create the parser as soon as we

queue the request meaning we could have up to 1,000 parsers created at a

time sitting around waiting for serf to give us data.

* subversion/libsvn_ra_serf/util.c

(expat_response_handler): Create parser when needed on first one.

(svn_ra_serf__create_expat_handler): Delay parser and actually use

cleanup_pool.

* subversion/libsvn_client/merge.c

(find_unsynced_ranges): Following up on r1350409, apply the same optimization

here.

Start and complete the editor in our Ev2 replay implementation.

* subversion/libsvn_repos/replay.c

(svn_repos_replay2): Call the provided start callback.

(svn_repos__replay_ev2): Complete the editor.

Small optimization in merge code.

* subversion/libsvn_client/merge.c

(get_operative_immediate_children): Do not request all revision properties,

since we're looking only for changed paths.

Another checkpoint commit of the Ev2 implementation of replay. This compiles,

and will dump a simple (very simple) repository.

* subversion/libsvn_repos/replay.c

(add_subdir): New Ev2 implementation.

(replay_node): Continue updating for Ev2.

(svn_repos__replay_ev2): Sort the changed paths to be sure we handle adds

in the correct order.

Allow downstream caches to cache our versioned resources.

* subversion/mod_dav_svn/repos.c

(set_headers): Uncomment caching block and allow versioned regular

non-collections to be cached.

* tools/buildbot/slaves/win32-SharpSvn/svntest-test.cmd

Prepare for the eventual removal of the --http-library argument, which

hwright will probably commit soon ;-)

* win-tests.py

(): Set http_library variable to 'serf' instead of 'neon' by default,

so the variable is consistent with the actual ra_dav client being used

when you don't pass the --http-library option.

This fixes basic_tests.py#52 (because it specifically tests for

"ra_$http_library" in output of 'svn --version') and

merge_tree_conflict_tests.py#22 (because it's marked

XFail(svntest.main.is_ra_type_dav_serf), which uses the http_library

variable), when you're not passing --http-library to win-tests.py.