sussman in subversion

* STATUS: nominate svnsync bugfix for 1.6.x.
* STATUS: nominate svnsync bugfix for 1.5.x.
Re-add new error code for 1.7, as gstein suggested.

* subversion/include/svn_error_codes.h:

(SVN_ERR_RA_SVN_EDIT_ABORTED): re-add this new error code for 1.7.

* subversion/libsvn_ra_svn/client.c

(ra_svn_replay_range): use the new error code.

Make r38686 api-promise compatible with 1.6.5 and and 1.5.x backport.

* subversion/include/svn_error_codes.h:

(SVN_ERR_RA_SVN_EDIT_ABORTED): remove the new error code.

* subversion/libsvn_ra_svn/client.c

(ra_svn_replay_range): use SVN_ERR_RA_SVN_IO_ERROR.

Fix two serious bugs in libsvn_ra_svn and svnsync.

Working together, these bugs cause a situation whereby if 'svnsync

sync' from svnserve to apache ever encounters an error, a half-written

transaction is committed anyway. And then subsequent calls to

'svnsync sync' continue to snowball this behavior.

* subversion/svnsync/main.c

(get_sync_editor): put abort_edit() into the vtable.

(abort_edit): new function which calls wrapped editor's abort_edit().

* subversion/libsvn_ra_svn/client.c

(ra_svn_replay_range): notice when drive_editor2() aborts the commit.

When it does, BAIL instead of calling close_edit().

* subversion/include/svn_error_codes.h:

(SVN_ERR_RA_SVN_EDIT_ABORTED): new error code.

* COMMITTERS: oops, rassilon and kon were partial committers.
* COMMITTERS: bring 'dormant' full-committers list up to date; put it in a more visible place, right after the active ones.
Fix race condition in ra_serf which can cause infinite-loop during a commit.

Diagnosis and patch by Jon Trowbridge <>.

After initializing the parser, we were attempting to make it parse

response data. Apparently up till now, the server response was always

"fast enough" such that 100% of the response was waiting in the

buffer, ready to be parsed, and so __handle_xml_parser() always


But if you introduce latency into the server's response then parsing

might fail (the data may not be available yet), which means

'parser.done' doesn't get set. But then we *never* re-enter the

initialization block on subsequent calls, which means 'done' never

gets set, which means we're in an infinite loop waiting for 'done'.

* subversion/libsvn_ra_serf/util.c

(svn_ra_serf__handle_multistatus_only): separate parser

initialization from the "is parser done?" check. And actually examine

the status result of __handle_xml_parser()!

* www/svn_1.6_releasenotes.html: document new public historical URI syntax.
* CHANGES: make some tweaks for increased clarity.

- clarify what we mean by 'tree conflicts'

- put new switches together in a clump

- use $Header$ to remind people what a keyword is

- move features out of the bugfix section into features section

- clarify that 'pack' is an svnadmin command, and what it does

- mention new public URI syntax for (rev,path) pairs

* subversion/tests/cmdline/README: mention how to test with serf instead of neon.
HTTP protocol v2: send version-name header in PUT and PROPPATCH

requests, and have mod_dav_svn's get_resource() do an immediate OOD

check with it.

(Unable to actually test this new OOD check, since serf is still

sending a CHECKOUT before each PUT/PROPPATCH, which does its own OOD

check. But hey, it doesn't break neon tests.)

Patch started by cmpilato, continued by sussman.

* subversion/mod_dav_svn/repos.c

(do_out_of_date_check): new helper func.

(get_resource): call new helper func.

* subversion/libsvn_ra_serf/commit.c

(struct proppatch_context_t): add new base_revision field.

(setup_proppatch_headers): put version-name header in PROPPATCH request.

(setup_put_headers): put version-name header in PUT request.

(open_root, close_directory,

svn_ra_serf__change_rev_prop): fill out new field.

Teach mod_dav_svn to handle propchanges on our new 'txn','txr', 'rev' objects. theory. :-) Not tested, but at least it doesn't break the test suite.

* subversion/mod_dav_svn/deadprops.c

(save_value): refactor logic to understand both protocol v1 and v2 resources.

* subversion/mod_dav_svn/repos.c

(prep_private): set exists flag, so that dav_method_proppatch won't

reject new 'txn' objects.

On the 'http-protocol-v2' branch: Teach mod_dav_svn to parse and prep

our new 'txn' and 'txr' objects.

Next up: make sure methods like PROPPATCH/PROPFIND work against 'txn'

and methods like PUT work against 'txr'.

* subversion/mod_dav_svn/repos.c

(special_subdirs): Add 'txn' and 'txr' parse patterns.

(parse_txnstub_uri): New function to parse 'txn/txn_name'.

(parse_txnroot_uri): New function to parse 'txr/txn_name/path'.

(prep_working): Make this func to handle both DeltaV 'wrk' and

new-style 'txr' objects... they're basically the same.

(prep_private): Make this func prep our new private 'txn' objects.

* subversion/mod_dav_svn/dav_svn.h

(dav_svn_root): Tweak docstring.

Begin teaching mod_dav_svn code to accept POST on 'me' resource.

* subversion/mod_dav_svn/dav_svn.h

(dav_svn__method_post): declare new POST handler.

(enum dav_svn_private_restype): two new enums for txn stubs.

* subversion/mod_dav_svn/mod_dav_svn.c

(register_hooks): hook in a new generic request handler.

(dav_svn__handler): our new generic request handler.

* subversion/mod_dav_svn/repos.c

(dav_svn__method_post): beginning of POST handler.

Teach mod_dav_svn to parse new rootstub and revstub.

* subversion/mod_dav_svn/dav_svn.h

(enum dav_svn_private_restype): add types for root-stub and rev-stub.

* subversion/mod_dav_svn/repos.c

(parse_rootstub_uri, parse_revstub_uri): new parsing functions.

(special_subdirs[]): list the new parsing functions.

* subversion/mod_dav_svn/reports/update.c

(dav_svn__update_report): allow a root-stub URI on an update

REPORT, in addition to the VCC URI.

* BRANCH-README: update.

    • ?
Catch up to trunk.
    • ?
  1. … 121 more files in changeset.
Make serf's public get_youngest_rev() *not* use cached HEAD.

Create an internal helper func to used cached HEAD instead.

* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__get_latest_revnum): don't use the cached HEAD.

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__get_youngest_rev): declare new helper func.

* subversion/libsvn_ra_serf/property.c

(svn_ra_serf__get_youngest_rev): new internal helper func. tries

to use cached HEAD value first.

(svn_ra_serf__get_baseline_info): cache HEAD when we discover it.

* subversion/mod_dav_svn/reports/get-locations.c: fix source description.
Merge trunk to my branch.
    • ?
  1. … 162 more files in changeset.
On the 'http-protocol-v2' branch:

Bugfix spotted by gstein.

* subversion/libsvn_ra_serf/options.c

(capabilities_headers_iterator_callback): compare first 3 chars of key with "SVN".

On the 'http-protocol-v2' branch:

Make serf notice and hold onto the v2 "stubs" in its session_t.

This should happen right in the initial ra_open() call, when the RA

session kicks off.

* subversion/libsvn_ra_serf/options.c

(capabilities_headers_iterator_callback): notice the new v2 stub

headers, and save the values in the master session_t.

* subversion/libsvn_ra_serf/ra_serf.h

(struct svn_ra_serf__session_t): add (cached) youngest_rev field.

* subversion/libsvn_ra_serf/serf.c

(svn_ra_serf__open): initialize session's youngest_rev field.

(svn_ra_serf__get_latest_revnum): try to return cached youngest_rev first!

Sync my branch with trunk.
    • ?
    • ?
    • ?
  1. … 99 more files in changeset.
On the 'http-protocol-v2' branch:

Unify all serf OPTIONS requests to go through svn_ra_serf__create_options_req():

- always send a request body

- always fill in the session->capabilities hash

- pave the way for always receiving & storing protocol v2 "stubs"

* subversion/libsvn_ra_serf/ra_serf.h


SERF_CAPABILITY_SERVER_YES): new constants shared by serf.c and options.c,

to replace 'static char *' vars.

* subversion/libsvn_ra_serf/options.c

(struct options_response_ctx_t): add pool field.

(options_response_handler): fill in pool field.

(capabilities_headers_iterator_callback): moved here from serf.c

-- slightly tweaked to use new baton.

(options_response_handler): parse the capabilities headers.

* subversion/libsvn_ra_serf/serf.c

(capability_yes, capability_no, capability_server_yes): removed.

(struct capabilities_response_baton): removed.

(capabilities_headers_iterator_callback): removed.

(capabilities_response_handler): removed.

(exchange_capabilities): simplify! just call __create_options_req().

On the 'http-protocol-v2' branch:

Getting ready to unify serf's OPTIONS code.

No new functionality, but at least dumb wrapper doesn't break tests. :-)

* subversion/libsvn_ra_serf/options.c

(struct options_response_ctx_t,

options_response_handler): new response handler for __create_options_req()

(svn_ra_serf__create_options_req): use new response handler.

* subversion/libsvn_ra_serf/ra_serf.h

(struct svn_ra_serf__session_t): add 5 new url 'stubs' for v2 protocol.

On the 'http-protocol-v2' branch:

* subversion/mod_dav_svn/mod_dav_svn.c

(dav_svn__get_root_stub): oops, forgot to implement

On the 'http-protocol-v2' branch:

Followup to r34386 (http protocol v2 OPTIONS stubs), based on gstein's review.

* subversion/include/svn_dav.h



remove the "X-" prefix on these headers.

* subversion/mod_dav_svn/dav_svn.h

(DAV_SVN__*_STUB): delete these constants...

(dav_svn__get_*_stub): create these five accessor functions instead.

* subversion/mod_dav_svn/mod_dav_svn.c

(dav_svn__get_*_stub): implement the five accessor functions here,

in terms of the configurable 'special' uri.

* subversion/mod_dav_svn/version.c

(get_option): use %ld instead of deprecated SVN_REVNUM_T_FMT.

update calls to new accessors.

Catch up with ^/trunk
    • ?
  1. … 17 more files in changeset.
Weekly sync with trunk.
  1. … 82 more files in changeset.
A periodic 'svn merge ^/trunk' to this feature branch.
    • ?
    • ?
  1. … 90 more files in changeset.