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

Changeset 853705 is being indexed.

Merge the functionalities of svn_fs_attach_lock() and svn_fs_lock()

into a single function (svn_fs_lock).

* subversion/include/svn_fs.h

(svn_fs_lock): Add (optional) 'token' parameter, and move the

'force' parameter closer to the end.

(svn_fs_attach_lock): Remove.

* subversion/libsvn_fs/fs-loader.h

(fs_vtable_t): Lose 'attach_lock'. Tweak 'lock' param list to match


* subversion/libsvn_fs/fs-loader.c

(svn_fs_lock): Add 'token' parameter, and move the 'force' parameter

closer to the end. Update call to vtable functions.

(svn_fs_attach_lock): Remove.

* subversion/libsvn_fs_fs/fs.c

(fs_vtable): Lose reference to svn_fs_fs__attach_lock().

* subversion/libsvn_fs_fs/lock.h

(svn_fs_fs__lock): Add 'token' parameter, and move the 'force'

parameter closer to the end.

(svn_fs_fs__attach_lock): Remove.

* subversion/libsvn_fs_fs/lock.c

(generate_new_lock): Remove.

(svn_fs_fs__lock): Add 'token' parameter, and move the 'force'

parameter closer to the end. Eat up generate_new_lock's

functionality. Also, leave a big TODO here for verifying the

legitimacy of a non-NULL input token.

(svn_fs_fs__attach_lock): Remove.

* subversion/libsvn_fs_base/fs.c

(fs_vtable): Lose reference to svn_fs_base__attach_lock().

* subversion/libsvn_fs_base/lock.h

(svn_fs_base__lock): Add 'token' parameter, and move the 'force'

parameter closer to the end.

(svn_fs_base__attach_lock): Remove.

* subversion/libsvn_fs_base/lock.c

(generate_new_lock): Remove.

(struct lock_args): Add 'token' member.

(txn_body_lock): If present, use baton's token as the lock token.

(svn_fs_base__lock): Add 'token' parameter, and move the 'force'

parameter closer to the end. Populate new 'token' baton member.

(struct attach_lock_args, txn_body_attach_lock,

svn_fs_base__attach_lock): Remove.

* subversion/include/svn_repos.h

(svn_repos_fs_attach_lock): Remove.

(svn_repos_fs_lock): Add 'token' parameter, and move the 'force'

parameter closer to the end.

* subversion/libsvn_repos/fs-wrap.c

(svn_repos_fs_lock): Add 'token' parameter, and move the 'force'

parameter closer to the end.

(svn_repos_fs_attach_lock): Remove.

* subversion/libsvn_ra_local/ra_plugin.c

(svn_ra_local__lock): Update call to svn_repos_fs_lock().

* subversion/svnserve/serve.c

(lock): Update call to svn_repos_fs_lock().

* subversion/mod_dav_svn/lock.c

(dav_svn_append_locks, dav_svn_refresh_locks): Use

svn_repos_fs_lock() instead of svn_repos_fs_attach_lock(). Also,

fix a bug where a lock timeout was being used as an expiration date.

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

(lock_only, lookup_lock_by_path, get_locks, basic_lock,

lock_credentials, final_lock_check, lock_dir_propchange,

lock_name_reservation, directory_locks_kinda, lock_expiration,

lock_break_steal_refresh, lock_out_of_date): Update calls to

svn_fs_lock(), and use it instead of svn_fs_attach_lock(). Also,

use TRUE/FALSE instead of 1/0 for the boolean 'force' flag.

(attach_lock): Use svn_fs_lock() instead of svn_fs_attach_lock().

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

(rmlocks): Update calls to svn_fs_lock().

  1. … 15 more files in changeset.
Merge locking branch to trunk, by comparing trunkURL with branchURL.

This is not a test. This is an actual addition of a very large feature.

This merge passes 'make check' over all three RA implementations.

To see commit logs for this feature, examine /branches/locking, r11749:13570.

  1. … 183 more files in changeset.
Yet more buildsystem/testsystem simplification. Dispose of run-*, and

just run the appropriate tests directly. Incidentally, re-enable changes-test,

which was erroneously not being run.

* build.conf: Remove the run-* script references, and un-skip the

previously contained tests.

* subversion/tests/libsvn_fs_base/

* subversion/tests/libsvn_repos/

* subversion/tests/python-libs:

Delete, no longer required.

  1. … 3 more files in changeset.
Remove an unused test helper program.

* subversion/tests/libsvn_repos/md5args.c: Delete.

* build.conf: Remove references.

  1. … 1 more file in changeset.
CAN-2004-0749: path-based authz fixes for /trunk.

For a description of the metadata leak, see:

This change is the combination of six security patches applied to the

1.1.x branch. Specifically:







See those revisions' log messages for details.

  1. … 17 more files in changeset.
* subversion/tests/libsvn_repos/repos-test.c

(check_locations_info): Make variable unsigned and so avoid a gcc

compiler warning about mixing signed and unsigned.

Fix bug that caused tests to fail introduced in r9965.

* subversion/tests/libsvn_repos/repos-test.c (node_locations): Add forgotten

terminator to array of structs.

Add a repository function to get the revisions of a path@peg_revision in other


Patch by: Shlomi Fish <>


* include/svn_repos.h (svn_repos_trace_node_locations): New function.

* libsvn_repos/rev_hunt.c (compare_revnums, check_ancestry_of_peg_path,

svn_repos_trace_node_locations): New function.

* tests/libsvn_repos/repos-test.c (struct locations_info,

check_locations_info, check_locations, node_locations): New functions.

(test_funcs): Added node_locations.

  1. … 2 more files in changeset.
Eliminate all uses of SVN_REVNUM_T_FMT in every C source file that used it.

Replace every occurence with 'ld' and concatenate string constants


Approved by brane.

  1. … 55 more files in changeset.
Add '*.exe' to svn:ignore property.

* subversion/tests/libsvn_fs

* subversion/tests/libsvn_diff

* subversion/tests/libsvn_wc

* subversion/tests/libsvn_subr

* subversion/tests/libsvn_ra_local

* subversion/tests/libsvn_repos

* subversion/tests/libsvn_delta

  1. … 6 more files in changeset.
Fix typos in tests. The meaning is not changed. Although the missing commas

caused the third field to be uninitialised (and therefore NULL) instead of the

intended empty string, that field is not used when the first field is 'd'.

* subversion/tests/libsvn_fs/fs-test.c (check_all_revisions):

* subversion/tests/libsvn_repos/repos-test.c (dir_deltas):

Insert missing commas between array initialisers.

  1. … 1 more file in changeset.
For consistency, use "" instead of NULL for a no-op target.

Patch by Greg Hudson, see 1.0-cand issue #999.

* libsvn_wc/update_editor.c, include/svn_wc.h (svn_wc_get_actual_target):

Set target to empty (not NULL) when anchor is subject.

* include/svn_repos.h (svn_repos_begin_report, svn_repos_dir_delta),

include/svn_wc.h (svn_wc_get_status_editor, svn_wc_get_update_editor,


include/svn_ra.h (do_update, do_switch, do_status, do_diff):

Expect target to be empty (not NULL) when anchor is subject.

* libsvn_wc/diff.c (directory_elements_diff),

libsvn_wc/status.c (delete_entry, close_directory):

libsvn_wc/update_editor.c (make_dir_baton, complete_directory,

open_root, close_edit),

libsvn_client/diff.c (diff_wc_wc, diff_repos_wc),

libsvn_client/commit.c (adjust_rel_targets, svn_client_commit),

mod_dav_svn (dav_svn__update_report),

clients/cmdline/commit-cmd.c (svn_cl__commit),

libsvn_repos/delta.c (svn_repos_dir_delta),

libsvn_ra_dav/fetch.c (end_element, make_reporter):

Test for emptiness of target, rather than nullity.

* libsvn_client/switch.c (svn_client_switch),

libsvn_client/export.c (svn_client_export),

libsvn_client/diff.c (do_merge, diff_repos_repos, diff_repos_wc),

mod_dav_svn (dav_svn__update_report),

tests/libsvn_repos/repos-test.c (dir_deltas):

Pass empty target (not NULL) when anchor is subject.

* libsvn_wc/diff.c (svn_wc_diff),

libsvn_wc/update_editor.c (do_entry_deletion),

mod_dav_svn/update.c (dav_svn__update_report),

libsvn_ra_dav/fetch.c (start_element),

libsvn_repos/reporter.c (svn_repos_set_path, svn_repos_link_path,

svn_repos_delete_path, finish_report,


Simplify code by assuming that target is not NULL.

* libsvn_ra_svn/client.c (ra_svn_update, ra_svn_switch, ra_svn_status,


svnserve/serve.c (update, switch_cmd, status, diff):

Stop translating NULL to "" and back over the wire.

  1. … 17 more files in changeset.
Update copyright notices for 2004, resolving issue #1651.

(See also revision 8019, which fixed a couple of missed spots.)

  1. … 358 more files in changeset.
Fix typos in comments.

  1. … 45 more files in changeset.
Fix a bug where pool memory was used after the pool was cleared.

* subversion/tests/libsvn_repos/repos-test.c (dir_deltas): Get a new

revision root for r4 rather than reusing the one obtained for r3.

Follow up to r7628:

A few spots didn't get converted to use APR_MD5_DIGESTSIZE instead of

MD5_DIGESTSIZE; fix them.

  1. … 2 more files in changeset.
* subversion/tests/libsvn_repos/ Set svn:executable.

Merge /branches/partial-authz-dev to /trunk, r7571:7672.

See the branch for full log messages.

Here's my nutshell summary of the new 'partial read-authz feature':

If a client checks out or updates a tree, a server authz system now

has the ability to selectively deny read-access on arbitrary files and

dirs by supplying a authz_read_func to svn_repos_dir_delta(). In this

situation, dir_delta() will call new absent_[file|dir]() editor

functions instead of the usual [open|add] functions. The DAV layer

now marshals these messages over the network, and libsvn_wc marks the

appropriate wc entries as 'absent'. Entries marked 'absent' are

essentially treated like 'deleted' ones; most client commands can't

see them at all. (But 'svn up' *does* report them to the server, in

case read-access is re-granted.)

(There are still a couple of small wc bugs, specifically triggered by

repeated granting/ungranting of read-access to files. They'll be

fixed RSN.)

Final note: this change upgrades working copies from format 2 to

format 3 'in place'. Format 1 wc's are no longer supported.

  1. … 26 more files in changeset.
More libsvn_fs API cleanup. Make the svn_fs_txn_t objects adhere to

the object lifetime policies employed elsewhere in Subversion.

* subversion/include/svn_fs.h

(svn_fs_txn_fs, svn_fs_txn_pool, svn_fs_close_txn): Remove.

(svn_fs_abort_txn, svn_fs_commit_txn): Add 'pool' parameter.

* subversion/include/svn_repos.h

(svn_repos_fs_commit_txn): Add 'pool' parameter.

* subversion/libsvn_fs/txn.h

(svn_fs__txn_id, svn_fs__txn_fs, svn_fs__txn_pool): Remove.

(svn_fs_txn_t): Move here from txn.c.

* subversion/libsvn_fs/txn.c

(svn_fs_txn_t): Move from here to txn.h.

(struct svn_fs_txn_t): Remove the 'pool' member.

(make_txn): Track distinct lack of a pool member for txn object.

(svn_fs_begin_txn): Remove unnecessary level of braces.

(txn_body_abort_txn): Expect the txn object as the baton, and don't

call a stupid function just to find the name of the thing.

(struct abort_txn_args, svn_fs_txn_fs, svn_fs_txn_pool,

svn_fs__txn_id, svn_fs__txn_fs, svn_fs__txn_pool,

svn_fs_close_txn): Remove.

(svn_fs_list_transactions): Just some whitespace mods.

* subversion/libsvn_repos/fs-wrap.c

(svn_repos_fs_commit_txn): Add 'pool' parameter, and stop calling

now-defunct FS API functions. Update call to svn_fs_commit_txn().

(svn_repos_fs_begin_txn_for_commit, svn_repos_fs_begin_txn_for_update):

Remove an unnecessary level of braces.

* subversion/libsvn_fs/tree.c

(txn_body_txn_root, svn_fs_txn_root, txn_body_merge,

txn_body_commit): Access txn object fields directly.

(svn_fs_commit_txn): Add 'pool' parameter, and access txn object

fields directly.

* subversion/libsvn_fs/revs-txns.c

(svn_fs_txn_proplist, svn_fs_change_txn_prop, svn_fs_txn_prop):

Access txn object fields directly.

In the following locations, track all the function changes and

removals described in this log message:

* subversion/libsvn_repos/commit.c (close_edit, abort_edit)

* subversion/libsvn_repos/delta.c (svn_repos_dir_delta)

* subversion/libsvn_repos/load.c (close_revision)

* subversion/libsvn_repos/reporter.c (svn_repos_abort_report)

* subversion/svnadmin/main.c (subcommand_rmtxns)

* subversion/mod_dav_svn/activity.c (dav_svn_delete_activity)

* subversion/mod_dav_svn/version.c

(dav_svn_uncheckout, dav_svn_checkin, dav_svn_merge)

In the following files (whose list of modified functions is just far

too great to list), track all the function changes and removals

described in this log message, and introduce subpools in some places

to better control the lifetime of txn objects:

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

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

  1. … 15 more files in changeset.
Big ol' libsvn_fs cleanups. And it ain't even Spring.

* svn-trunk/subversion/include/svn_fs.h

(svn_fs_delete): Was svn_fs_delete_tree().

(svn_fs_rename, svn_fs_delete_tree): Removed.

* svn-trunk/subversion/libsvn_fs/tree.c

(merge): Remove speculative comment about using the now-absent

svn_fs__dag_link(). We're a couple of years into this thing, and

haven't needed the change yet. Let's trust our memories and our

version control tool in case we every find a relevant problem with

this code. Oh, and use explicit node-kind checks (with

svn_fs__dag_node_kind()) instead of using svn_fs__dag_is_directory()

(which is now also gone). Oh, and track the rename of

svn_fs__dag_delete_tree() to just svn_fs__dag_delete().

(struct delete_args): Remove 'delete_tree' flag.

(txn_body_delete): Unconditionally call svn_fs__dag_delete() (which

used to be svn_fs__dag_delete_tree()). Also, move the really

cheap root-type sanity check to prior to the not-so-cheap

open_path(). And track the rename of svn_fs__dag_delete_tree() to

just svn_fs__dag_delete().

(svn_fs_delete): Was svn_fs_delete_tree(). Stop populating the

now-absent 'delete_tree' baton flag.

(svn_fs_delete_tree, svn_fs_rename): Removed.

* svn-trunk/subversion/libsvn_fs/dag.c

(svn_fs__dag_link, svn_fs__dag_is_file, svn_fs__dag_is_directory): Buh-bye.

(delete_entry): Removed, moving all its code into


(svn_fs__dag_delete): Was svn_fs__dag_delete_tree(). Now contains

all the guts from delete_entry(), except that the logic for

requiring that a directory target be empty is gone. Also, check

the node kind explicitly instead of using svn_fs__dag_is_directory().

(svn_fs__dag_delete_tree): Removed.

(svn_fs__dag_get_contents, svn_fs__dag_file_length,

svn_fs__dag_file_checksum, svn_fs__dag_get_edit_stream,

svn_fs__dag_finalize_edits, make_entry, svn_fs__dag_set_entry,

svn_fs__dag_delete_if_mutable): Explicitly compare the node's kind

field against the desired node kind -- svn_fs__dag_is_file() and

svn_fs__dag_is_directory() are no more.

* svn-trunk/subversion/libsvn_fs/dag.h

(svn_fs__dag_delete): Was svn_fs__dag_delete_tree().

(svn_fs__dag_link, svn_fs__dag_delete_tree, svn_fs__dag_is_file,

svn_fs__dag_is_directory): Removed.

* svn-trunk/subversion/libsvn_repos/commit.c

(delete_entry): Track the rename of svn_fs__dag_delete_tree() to

just svn_fs__dag_delete().

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

Track the rename of svn_fs_delete_tree() to svn_fs_delete()

throughout, but also...

(delete_mutables): Remove internal tests "3" and "7", and renumber


(delete): Don't expect failure from svn_fs_delete() any more -- it

ain't the same deletion routine you're Mama told you about.

* svn-trunk/subversion/libsvn_repos/load.c

* svn-trunk/subversion/libsvn_repos/reporter.c

* svn-trunk/subversion/mod_dav_svn/repos.c

* svn-trunk/subversion/tests/fs-helpers.c

* svn-trunk/subversion/tests/libsvn_repos/dir-delta-editor.c

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

Track the rename of svn_fs_delete_tree() to svn_fs_delete()


  1. … 10 more files in changeset.
More error leaks revealed by SVN_DEBUG_ERROR.

* subversion/libsvn_client/commit.c

(svn_client_commit): Clear any abort_edit error.

* subversion/libsvn_repos/commit.c

(close_edit): Clear any svn_fs_abort_txn error, clear commit error

if returning a later error.

* subversion/mod_dav_svn/version.c

(dav_svn_uncheckout, dav_svn_checkin, dav_svn_merge): Clear any

svn_fs_abort_txn error.

* subversion/libsvn_repos/load.c

(close_revision): Clear any svn_fs_abort_txn error.

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

(dir_deltas): Clear any svn_fs_abort_txn error.

* subversion/tests/svn_tests_main.c

(do_test_num): Clear error after handling it.

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

(parse_invalid_atoms): Return when failing! Clear expected error.

* subversion/tests/libsvn_fs/strings-reps-test.c

(delete_rep, test_strings, abort_string): Clear expected error.

  1. … 7 more files in changeset.
I'm really tired of copy-n-pasting the complex loop (complex because

of the pool games I had to play) in what used to be

svn_repos_revisions_changed(). Replace/rename

svn_repos_revisions_changed() with a new function,

svn_repos_history(), that does this work and uses callbacks so that

users of this interface can do whatever they want with the history

data without reproducing so much darned code.

Also, kill 'svnadmin lscr' (since its functionality is encompassed by

the new 'svnlook history').

* subversion/include/svn_repos.h

(svn_repos_history_func_t): New.

(svn_repos_history): Was svn_repos_revisions_changed(). Now takes a

'history_func' and 'history_baton' instead of populating a 'revs' array.

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_history): Was svn_repos_revisions_changed(). Now takes

and call a 'history_func' and 'history_baton' instead of

populating a 'revs' array.

* subversion/libsvn_repos/log.c

(history_to_revs_array): New.

(svn_repos_get_logs): Update calls to svn_repos_history().

* subversion/svnadmin/main.c

(struct svnadmin_opt_state): Remove 'follow_copies' member.

(cmd_table): Kill the 'lscr' subcommand.

(options_table, main): Remove support for --copies option.

(svnadmin__follow_copies, subcommand_lscr): Buh-bye.

* subversion/svnlook/main.c

(struct print_history_baton, print_history): New.

(do_history): Now just call svn_repos_history(). Oh, and compose

the docstring I forgot to write when I introduced this function.

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

(history_to_revs_array): New.

(revisions_changed): Update test message, and update call to


* subversion/doc/book/book/ch05.xml

* subversion/doc/book/book/ch08.xml

Kill mentions of 'svnadmin lscr'. (Oh, and add reference stuff for

the new 'svnlook history'.

  1. … 7 more files in changeset.



## ##

## This commit makes an incompatible change to the Subversion ##

## repository filesystem schema. Repositories created with ##

## Subversion code prior to this change will unable to operate ##

## with this new code. To maintain the ability to use said ##

## repositories, you must use a version 'svnadmin dump' prior to ##

## this change to dump your repository to a dumpfile, then use ##

## this new Subversion code to create, and load your dumpfile ##

## a new repository using 'svnadmin load'. And don't forgot to ##

## copy over any custom configuration/hooks from the old to the ##

## new repository. ##

## ##


Merge the net changes from of the 'fs-schema-changes' branch to the

trunk. This completes the following issues:

issue #1003 - svn_fs_revisions_changed() needs some fixes

issue #1248 - 'svn log --strict' on a copy doesn't show all mods

issue #1438 - performance decreases with number of revisions


* subversion/libsvn_fs/structure

Update NODE-REVISION skel description(s) to include CREATED-PATH.


PRED-COUNT (just to conserve space, really).

* subversion/svnadmin/main.c

(subcommand_lscr): Call new svn_repos_revisions_changed() instead of


* subversion/include/svn_fs.h

(svn_fs_revisions_changed): So long, you miserable hunk of clunky junk.

(svn_fs_history_t): New typedef.

(svn_fs_history_location, svn_fs_history_prev, svn_fs_node_history): New.

* subversion/include/svn_repos.h

* subversion/libsvn_repos/rev_hunt.c

(svn_repos_revisions_changed): New.

* subversion/libsvn_fs/key-gen.h

* subversion/libsvn_fs/key-gen.c

(svn_fs__prev_key): New.

* subversion/libsvn_fs/dag.h

(svn_fs__dag_clone_child, svn_fs__dag_make_file,

svn_fs__dag_make_dir): Add 'parent_path' argument.

(svn_fs__dag_get_created_path): New.

* subversion/libsvn_fs/dag.c

(struct dag_node_t): Add 'parent_path' member.

(svn_fs__dag_get_created_path): New.

(svn_fs__dag_get_node, svn_fs__dag_dup): Initialize the created_rev member.

(svn_fs__dag_clone_child, svn_fs__dag_make_file,

svn_fs__dag_make_dir, make_entry): Add 'parent_path' argument.

(txn_body_dag_init_fs, copy_node_revision): Initialize the new node's


* subversion/libsvn_fs/bdb/copies-table.h

* subversion/libsvn_fs/bdb/copies-table.c

(svn_fs__bdb_next_copy_id): New, gutted from svn_fs__bdb_reserve_copy_id().

* subversion/libsvn_fs/revs-txns.h

(svn_fs__txn_get_revision): New.

(svn_fs__set_txn_base): Consistify layout (no real code changes).

* subversion/libsvn_fs/revs-txns.c

(svn_fs__txn_get_revision): New.

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

(key_test): Was next_key(). Now tests svn_fs__prev_key(), too.

(test_funcs): Update reference to key_test().

* subversion/libsvn_fs/util/fs_skels.c

(svn_fs__parse_node_revision_skel, svn_fs__unparse_node_revision_skel,

is_valid_node_revision_header_skel): Update to handle new CREATED-PATH

atom in the NODE-REVISION skel.

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

(revisions_changed, print_chrevs): Move to repos-test.c.

(test_funcs): Add revisions_changed.

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

(print_chrevs): Was fs-test.c:print_chrevs().

(revisions_changed): Was fs-test.c:revisions_changed(), and contains

a few tweaks for the differing test setups and function calls.

(test_funcs): Add revisions_changed.

* subversion/libsvn_repos/log.c

(svn_repos_get_logs): Call new svn_repos_revisions_changed() instead

of svn_fs_revisions_changed().

* subversion/libsvn_fs/fs.h

(svn_fs__node_revision_t): Add 'created_path' member.

(svn_fs__copy_t): Update a comment to be, well, correct.

* subversion/libsvn_fs/tree.c

(svn_fs_history_t): New type.

(assemble_history, struct history_prev_args, txn_body_history_prev,

svn_fs_history_location, svn_fs_history_prev, svn_fs_node_history,

sort_keys, find_youngest_copy): New.

(get_id_path, struct revisions_changed_args, txn_body_revisions_changed,

svn_fs_revisions_changed): Removed.

(parent_path_t): Add 'copy_inherit', 'copy_src_path' members.

(parent_path_path): Just a relocation...nothing to see here.

(get_copy_inheritance): Was choose_copy_id(). Move up so open_path()

can use it.

(open_path): Use new get_copy_inheritance().

(make_path_mutable): No more choose_copy_id() -- just use the

pre-determined data in the parent_path.

(txn_body_copy): Change the unsupported feature error to, well,


(make_path_mutable): Update call to svn_fs__dag_clone_child().

(txn_body_make_dir): Update call to svn_fs__dag_make_dir().

(txn_body_make_file): Update call to svn_fs__dag_make_file().

  1. … 19 more files in changeset.
More pickiness from the C-Mike regarding test strings.

* subversion/tests/clients/cmdline/svntest/

(TestCase._check_name): Disallow test strings that are capitalized.

* subversion/tests/svn_tests_main.c

(do_test_num): Do the same nifty test-string validation for the C

tests that we do for the Python tests (50 characters or fewer, no

terminating periods, no capitalized first characters, please).

* subversion/tests/libsvn_diff/diff-diff3-test.c

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

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

* subversion/tests/libsvn_fs/strings-reps-test.c

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

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

Cleanup test descriptions.

  1. … 7 more files in changeset.
Finish issue #1089 ('svnlook dirs-change' delete child in moved

directory) because, by golly, it was right in line with changes I'm

making elsewhere.

* subversion/include/svn_repos.h

(svn_repos_node_t): Add 'parent' member.

* subversion/libsvn_repos/node_tree.c

(create_node): Add 'parent' parameter.

(create_sibling_node, create_child_node, open_root): Update call to


(find_real_base_path): New.

(delete_entry): Use find_real_base_path() to determine the kind of a

deleted node.

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

(node_tree_delete_under_copy): New test.

(test_funcs): Reference the new test.

  1. … 2 more files in changeset.
Finally, I can reveal the *real* reason why I wrote the path-based

editor driver. Ladies and gents, meet svn_repos_replay(). A

replacement not so much for svn_repos_dir_delta, but for at least a

whole class of functionality that svn_repos_dir_delta was never

intended to handle.

I should note that, to my great joy, not only does this code solve

issue #1290 (an svnadmin dump edge-case), but it also seems to greatly

increase the speed of that operation. On a 2.4 GHz machine with a

copy of the repository as of revision 6084, svnadmin

dump used to take 9 1/2 minutes to dump all 6084 revisions. Now, it

takes 5 1/2 minutes. I also saw about 20% in speed improvement

running 'svnlook changed' over the 6084 revisions of that repository,


Enjoy. :-)

* subversion/include/svn_repos.h

(svn_repos_replay): New hotness. (For "Old n' busted", see


* subversion/libsvn_repos/replay.c

New file.

* subversion/libsvn_repos/dump.c

(svn_repos_dump_fs): Use the new svn_repos_replay() for every

revision except the first of a non-incremental dump. Update call

to svn_repos_dir_delta(), which is still called in that one case

that the new function is not.

* subversion/svnlook/main.c

(generate_delta_tree): Use the new svn_repos_replay() instead of


* subversion/libsvn_repos/delta.c

(svn_repos_dir_delta): Remove 'use_copy_history' parameter.

(struct context): Remove 'use_copy_history' member.

(add_file_or_dir): Remove support for use_copy_history stuffs.

* subversion/libsvn_repos/reporter.c

(svn_repos_finish_report): Update call to svn_repos_dir_delta().

* subversion/mod_dav_svn/merge.c

(dav_svn__merge_response): Update call to svn_repos_dir_delta().

* subversion/mod_dav_svn/update.c

(dav_svn__update_report): Update call to svn_repos_dir_delta().

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

(dir_deltas): Update call to svn_repos_dir_delta().

  1. … 8 more files in changeset.
Teach svn_repos_dir_delta() that sometimes it's okay to just do pure

diffs, ignorant of ancestry. This is something I've wanted to do for

a long time, but I decided it was worthwhile once I started looking at

some of the outstanding diff and merge issues in our database. And it

turns out to fix at least one unreported merge bug that I ran across

while testing. 'Make check' still passes on all three RA layers, too.

This change adds a new --ignore-ancestry flag to both 'svn diff' and

'svn merge'. The discussion about defaultness of that state can be

held elsewhere -- I'm leaning towards 'default to ancestry ignorance',

but didn't want to change existing behaviors without list discussion.

Oh, and it also changes the ra-svn protocol. Am I recalling correctly

that ghudson doesn't care about compatibility concerns at this stage?

Oh, and some Python scripts changed, too, so folks using

will need to remember to upgrade their bindings and installations of

that script.

Enjoy. :-)

* subversion/include/svn_repos.h

(svn_repos_dir_delta, svn_repos_begin_report): Add 'ignore_ancestry'


* subversion/include/svn_ra.h

(svn_ra_plugin_t): Add 'ignore_ancestry' to the do_diff() vtable entry.

* subversion/include/svn_client.h

(svn_client_merge, svn_client_diff): Add 'ignore_ancestry' parameter.

* subversion/libsvn_repos/delta.c

(struct context): Add 'ignore_ancestry' member.

(svn_repos_dir_delta): Add and use 'ignore_ancestry' parameter.

(delta_dirs): Use new 'ignore_ancestry' parameter.

* subversion/libsvn_repos/dump.c

(svn_repos_dump_fs): Update call to svn_repos_dir_delta().

* subversion/libsvn_repos/reporter.c

(svn_repos_report_baton_t): Add 'ignore_ancestry' member.

(svn_repos_finish_report): Update call to svn_repos_dir_delta().

(svn_repos_begin_report): Add and use 'ignore_ancestry' parameter.

* subversion/mod_dav_svn/merge.c

(dav_svn__merge_response): Update call to svn_repos_dir_delta().

* subversion/mod_dav_svn/update.c

(dav_svn__update_report): Parse a new 'ignore-ancestry' XML item,

and update calls to svn_repos_dir_delta() and svn_repos_begin_report().

* subversion/libsvn_ra_local/ra_plugin.c

(make_reporter): Add 'ignore_ancestry' parameter, and update call to


(svn_ra_local__do_update, svn_ra_local__do_switch,

svn_ra_local__do_status): Update call to make_reporter().

(svn_ra_local__do_diff): Add 'ignore_ancestry' parameter, and update

call to make_reporter().

* subversion/svnserve/serve.c

(update, switch_cmd, status): Update call to svn_repos_begin_report()

(diff): Parse new ignore_ancestry param, and update call to


* subversion/libsvn_ra_dav/ra_dav.h

(svn_ra_dav__do_diff): Add 'ignore_ancestry' parameter.

* subversion/libsvn_ra_dav/fetch.c

(make_reporter): Add 'ignore_ancestry' parameter, and use it to

optionally add the '<S:ignore-ancestry> XML element to the REPORT body.

(svn_ra_dav__do_update, svn_ra_dav__do_status, svn_ra_dav__do_switch,

svn_ra_dav__do_diff): Update call to make_reporter().

* subversion/libsvn_ra_svn/client.c

(ra_svn_diff): Add 'ignore_ancestry' parameter.

* subversion/libsvn_client/diff.c

(do_merge, do_diff): Add 'ignore_ancestry' parameter, and update

call to RA->do_diff().

(svn_client_diff): Add 'ignore_ancestry' parameter, and update call

to do_diff().

(svn_client_merge): Add 'ignore_ancestry' parameter, and update call

to do_merge().

* subversion/svnlook/main.c

(generate_delta_tree): Update call to svn_repos_dir_delta().

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

(dir_deltas): Update call to svn_repos_dir_delta().

* subversion/clients/cmdline/diff-cmd.c

(svn_cl__diff): Update calls to svn_client_diff().

* subversion/clients/cmdline/merge-cmd.c

(svn_cl__merge): Update call to svn_client_merge().

* subversion/clients/cmdline/cl.h

(svn_cl__ignore_ancestry_opt): New.

(svn_cl__opt_state_t): Add 'ignore_ancestry' member.

* subversion/clients/cmdline/main.c

(svn_cl__options): Add a definition for the new "--ignore-ancestry" option.

(svn_cl__cmd_table): Bless the 'diff' and 'merge' subcommands with

the new "--ignore-ancestry" option.

* tools/examples/

Update uses of the repos.svn_repos_dir_delta() binding interface.

(DiffEditor.add_file): Make a use of 'pool' into the more

... available 'file_pool'.

(DiffEditor._do_diff): Sheesh. Catch up on a rather old interface

change to our fs.FileDiff object.

* tools/hook-scripts/

Update uses of the repos.svn_repos_dir_delta() binding interface.

  1. … 21 more files in changeset.
Feedback from the list indicates that the auto-generated .dsp files

seem to work okay. There still needs to be a bit of polish around

Windows builds using the generated .dsp files, but this puts us nearly

there. Indications are that mod_dav_svn doesn't build with the

currently-generated .dsp file.

* INSTALL: add a comment about the (new) installation/build changes


- rename the VERSION_CHECK var to RELEASE_MODE (since that is what

it is really about)

- add SKIP_DEPS for processing the -s switch (functionality which

got lost a ways back)

- add additional gen-make steps for the dsp files to replace the

ones which we blew away. for now, this only runs during the

release process when we are guaranteed to have apr(-util) as a


- tweak the gen-make error detection logic a bit since we now run it

a couple times

* everywhere/*.dsp: removed

* subversion.dsw: removed

  1. … 44 more files in changeset.
First part of issue #1100 ("imports need to do checksumming").

Move the result checksum from apply_textdelta to close_file:

* subversion/include/svn_delta.h: Include apr_md5.h.

(svn_delta_editor_t): Remove result_checksum from from

apply_textdelta, and add text_checksum to close_file.

(svn_txdelta_apply): Change result_checksum to result_digest, now

an outgoing parameter instead of incoming.

Deal with the fallout:

* subversion/libsvn_delta/text_delta.c

(struct apply_baton): Convert result_checksum to result_digest,

reflecting the corresponding change to svn_txdelta_apply.

(svn_txdelta_apply): Change result_checksum to result_digest, now

an outgoing parameter instead of incoming. Initialize accordingly

and stash in the apply_baton.

(apply_window): Don't compare the result checksum, just store it.

* subversion/libsvn_delta/cancel.c

(apply_textdelta): Lose the result_checksum argument.

(close_file): Take new text_checksum argument.

* subversion/libsvn_delta/default_editor.c

(apply_textdelta): Lose the result_checksum argument.

(close_file): Take new text_checksum argument.

(default_editor): Use close_file instead of the generic


* subversion/libsvn_repos/checkout.c: Include apr_md5.h and svn_md5.h.

(send_file_contents): Don't pass null result_checksum argument to


(walk_tree): Pass text checksum to editor->close_file.

* subversion/libsvn_repos/commit.c: Include apr_md5.h and svn_md5.h.

(apply_textdelta): Lose result_checksum argument, pass NULL for the

result_checksum to svn_fs_apply_textdelta.

(close_file): New function, just compares given checksum against

the checksum of the file in the txn.

(svn_repos_get_commit_editor): Set the editor's close_file function.

* subversion/libsvn_repos/delta.c

(send_text_delta): Lose result_checksum argument, stop passing it

to editor->apply_textdelta.

(add_file_or_dir, replace_file_or_dir): Pass text checksum to


(delta_files): Don't calculate target checksum, don't pass it to


* subversion/libsvn_repos/node_tree.c

(apply_textdelta): Lose result_checksum argument.

* subversion/libsvn_client/commit.c

(send_file_contents): Don't pass result_checksum to


(import_file): Pass null for text_checksum to editor->close_file,

and leave a comment indicating that more work will be done here.

* subversion/libsvn_client/commit_util.c

(apply_textdelta): Don't take result_checksum argument, don't pass

it to real_editor->apply_textdelta.

(close_file): Take text_checksum argument, pass it to


(do_item_commit): Pass null for the text_checksum argument when

calling editor->close_file on file batons that have no text mods.

* subversion/libsvn_client/copy.c

(repos_to_repos_copy): Pass null text_checksum to editor->close_file.

* subversion/libsvn_client/repos_diff.c

(apply_textdelta): Lose the result_checksum argument.

(close_file): Take text_checksum argument, ignore it.

* subversion/libsvn_wc/adm_crawler.c

(svn_wc_transmit_text_deltas): Don't pass result_checksum to

editor->apply_textdelta. Pass null text_checksum to

editor->close_file when no window handler, otherwise pass the

digest of the tmp_base.

* subversion/libsvn_wc/diff.c

(apply_textdelta): Lose the result_checksum argument.

(close_file): Take text_checksum argument, ignore it.

* subversion/libsvn_wc/status_editor.c

(apply_textdelta): Lose the result_checksum argument.

(close_file): Take text_checksum argument, ignore it.

* subversion/libsvn_wc/update_editor.c

(struct file_baton): Add new digest field.

(make_file_baton): Add a comment about how digest is initialized for

free by pcalloc.

(apply_textdelta): Lose the result_checksum argument, adjust call

to svn_txdelta_apply to receive a checksum instead of giving one.

(close_file): Take text_checksum argument, compare it against the

calculated checksum in the file baton.

* subversion/libsvn_ra_dav/commit.c

(struct put_baton_t): Lose the `file' field, there's no longer any

need to store the file baton here.

(struct resource_baton_t): New put_baton field.

(commit_stream_close): Remove, since this work is done in

commit_close_file now.

(commit_apply_txdelta): Lose result_checksum argument, don't

initialize a result_checksum in the baton. Don't set a close

function on the stream anymore, since commit_close_file will take

care of it.

(commit_close_file): Construct the PUT request, since this is where

we have both the base_checksum and text_checksum now.

* subversion/libsvn_ra_svn/editor.c

(ra_svn_apply_textdelta): Lose result_checksum argument, and

don't send it over the wire in the "apply-textdelta" command.

(ra_svn_close_file): Take text_checksum argument, send it over the

wire as an optional tuple.

(ra_svn_handle_apply_textdelta): Don't handle result_checksum.

(ra_svn_handle_close_file): Handle text_checksum.

* subversion/libsvn_ra_dav/fetch.c

(simple_fetch_file): Lose result_checksum parameter, and don't

pass it to editor->apply_textdelta.

(start_element): Don't pass result_checksum to simple_fetch_file.

Initialize rb->result_checksum to NULL in ELEM_open_file, and to

the found checksum or NULL in ELEM_add_file and ELEM_fetch_file.

(end_element): Pass rb->result_checksum to editor->close_file

instead of to editor->apply_textdelta.

(fetch_file): Pass checksum to editor->close_file instead of to


* subversion/mod_dav_svn/merge.c

(mr_close_file): Take new text_checksum argument, ignore it.

* subversion/mod_dav_svn/update.c

(struct item_baton_t): New text_changed boolean field.

(upd_apply_textdelta): Don't send the "fetch-file" xml here, just

store the base_checksum in the item baton and set text_changed.

(upd_close_file): Send the "fetch-file" xml here instead of in


* subversion/tests/svn_test_editor.c

(test_apply_textdelta): Lose the result_checksum argument.

(test_close_file): Take new text_checksum argument, ignore it.

* subversion/tests/libsvn_repos/dir-delta-editor.c

(test_apply_textdelta): Lose the result_checksum argument, pass NULL

for the result_checksum to svn_fs_apply_textdelta.

* subversion/bindings/swig/swigutil_py.c

(thunk_apply_textdelta): Lose the result_checksum argument.

(thunk_close_file): Take new text_checksum argument, invoke the

appropriate method manually, instead of factoring out to

close_baton like the other close functions.

  1. … 23 more files in changeset.
I hope this is _really_ the last .dsp file reorg; it's high time we

got the generator committed...

* subversion/libsvn_fs/libsvn_fs.dsp: Added uuid.c.

* subversion/libsvn_subr/libsvn_subr.dsp: Added cmdline.c.

* subversion/mod_dav_svn/mod_dav_svn.dsp: Added libsvn_fs/bdb/uuids-table.c,

libsvn_fs/uuid.c, libsvn_subr/cmdline.c.

* subversion/tests/libsvn_delta/diff_diff3_test.dsp: New, for diff-diff3-test

* subversion.dsw, Added diff-diff3-test to build and tests.

[all DSP files]: Streamlined list of system libraries and added

rpcrt4.lib for the UUID stuff.

  1. … 28 more files in changeset.