Checkout Tools
  • last updated 38 mins ago
Constraints: committers
Constraints: files
Constraints: dates

Changeset 1353676 is being indexed.

Teach the get_wc_content() RA callback and supporting code to handle

MD5 checksums as content indexes, too. This *should* result in the

benefits of this enhancement extending to users of all 1.8 clients

irrespective of the server's pedigree, as MD5s have been in the server

streams since ... like ... forever.

* subversion/include/svn_ra.h

(svn_ra_get_wc_contents_func_t): Rename 'sha1_checksum' to merely

'checksum', and relax the requirement that SHA1 be the checksum

algorithm used to call up cached pristine contents.

* subversion/libsvn_client/ra.c

(get_wc_contents): Rename 'sha1_checksum' to 'checksum'.

* subversion/libsvn_ra_serf/update.c

(fetch_file): If we don't have a SHA1 checksum to use, that's okay

-- try the MD5 instead (which we definitely should have for all

extant servers).

* subversion/include/private/svn_wc_private.h

(svn_wc__get_pristine_contents_by_checksum): Rename 'sha1_checksum'

to 'checksum'.

* subversion/libsvn_wc/adm_ops.c

(get_pristine_lazyopen_baton_t): Rename 'sha1_checksum' to 'checksum'.

(get_pristine_lazyopen_func): If the reference checksum isn't a

SHA1, try to lookup the SHA1 based on what we have.

(svn_wc__get_pristine_contents_by_checksum): Rename 'sha1_checksum'

to 'checksum'.

Suggested by: gstein

  1. … 4 more files in changeset.
Add a blank line between declarations and statements where r1352068 didn't.

* subversion/libsvn_client/deprecated.c,











Add blank lines.

  1. … 10 more files in changeset.
Do not use non-constant initializers in struct variables, since this

violates C'89 and C'90. Although most compilers used for Subversion support

non-constant initializers, some do not, such as Solaris SunPRO.

Patch by: Daniel Richard G. <skunk{_AT_}iSKUNK.ORG>

(tweaked by me: added a similar change in auth.c)

* subversion/libsvn_client/deprecated.c

(svn_client_propset3, svn_client_status4): Initialize struct variable

fields separately when they are non-constant.

* subversion/libsvn_client/info.c

(svn_client_info3): Same.

* subversion/libsvn_client/merge.c

(merge_locked, do_symmetric_merge_locked): Same.

* subversion/libsvn_diff/diff_file.c

(svn_diff_file_options_parse): Same.

* subversion/libsvn_fs_fs/fs_fs.c

(set_cached_window, svn_fs_fs__set_entry): Same.

* subversion/libsvn_fs_fs/lock.c

(walk_locks): Same.

* subversion/libsvn_subr/auth.c

(svn_auth_get_platform_specific_provider): Same.

* subversion/libsvn_subr/sqlite.c

(wrapped_func): Same.

* subversion/libsvn_wc/adm_ops.c

(svn_wc_get_changelists): Same.

* subversion/libsvn_wc/props.c

(svn_wc__prop_list_recursive, svn_wc_prop_set4): Same.

* subversion/libsvn_wc/upgrade.c

(svn_wc__upgrade_sdb): Same.

* subversion/libsvn_wc/wc_db.c

(svn_wc__db_op_set_changelist, svn_wc__db_revert_list_read, read_url,

svn_wc__db_revision_status): Same.

* subversion/libsvn_wc/wc_db_util.c

(svn_wc__db_with_txn): Same.

* subversion/svn/merge-cmd.c

(merge_reintegrate): Same.

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

(proc_found, run_procs): Same.

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

(wc_update, check_db_rows, copy_subtest_t, wc_wc_copies, repo_wc_copies):


  1. … 15 more files in changeset.
Make svn_wc__db_read_kind() handle processing 'hidden', just like

svn_wc_read_kind(). This allows making the lock processing to disallow

locking hidden directories, which in turn fixes the

update_with_parents_and_exclude() test.

* subversion/libsvn_wc/adm_crawler.c

(svn_wc__internal_transmit_prop_deltas): Update caller.

* subversion/libsvn_wc/adm_ops.c

(svn_wc__process_committed_internal): Update caller.

* subversion/libsvn_wc/deprecated.c

(svn_wc_add3): Update caller.

* subversion/libsvn_wc/diff_local.c

(svn_wc_diff6): Update caller.

* subversion/libsvn_wc/lock.c


svn_wc_adm_probe_retrieve): Update caller.

(svn_wc__acquire_write_lock): Update caller. This fixes the update test.

* subversion/libsvn_wc/util.c

(svn_wc__fetch_kind_func): Update caller.

* subversion/libsvn_wc/wc_db.c

(svn_wc__db_read_kind): Add argument and retrieve and process status if hidden

nodes shouldn't show up as files or directories.

* subversion/libsvn_wc/wc_db.h

(svn_wc__db_read_kind): Update prototype and argument documentation.

  1. … 7 more files in changeset.
Revert should not change permissions of files with svn:needs-lock in

copied directories.

* subversion/libsvn_wc/adm_ops.c

(revert_restore): Only handle svn:needs-lock if status is normal.

* subversion/tests/cmdline/

(revert_permissions_only: Extend.

Found by: Fergus Slorach <>

  1. … 1 more file in changeset.
Follow-up to r1335566:

* subversion/include/svn_io.h,

* subversion/libsvn_subr/stream.c

(svn_stream_lazyopen_create): Tweak function signature and behavior

to just return the stream directly (rather than an error).

* subversion/libsvn_wc/adm_ops.c

(svn_wc__get_pristine_contents_by_checksum): Update call to


Suggested by: gstein

  1. … 2 more files in changeset.
Avoid opening pristine store file handles until they are actually


* subversion/libsvn_wc/adm_ops.c

(get_pristine_lazyopen_baton_t): New private callback baton type.

(get_pristine_lazyopen_func): Callback implementation.

(svn_wc__get_pristine_contents_by_checksum): Use the new lazyopen

stream mechanics to avoid opening a file handle to the pristine

contents until it's first really needed.

Suggested by: gstein

Follow-up to r1333936, with some tweaks which follow from post-commit


* subversion/include/private/svn_wc_private.h,

* subversion/libsvn_wc/adm_ops.c

(svn_wc__get_pristine_contents_by_checksum): Replace 'wcroot_abspath'

with 'wri_abspath'.

* subversion/libsvn_client/ra.c

(callback_baton_t): Lose unused 'wcroot_abspath' member. Add a new,

temporary (hopefully) 'base_dir_isversioned' member (with

explanation regarding its purpose and temporariness).

(get_wc_contents): Use the baton's 'base_dir_abspath' and

'base_dir_isversioned' members now instead of the (now removed)

'wcroot_abspath'. Also, constify the input checksum.

(svn_client__open_ra_session_internal): Don't calculate a

wcroot_abspath. Instead, remember whether the provided

base_dir_abspath is actually versioned (which will help the

get_wc_contents() callback avoid assuming that it is later).

* subversion/include/svn_ra.h

(svn_ra_get_wc_contents_func_t): Constify 'sha1_checksum'.

* subversion/libsvn_ra_serf/update.c

(local_fetch): Use svn_txdelta_send_stream() instead of a custom

window-building loop. Also, fix error message to mention the

correct request type (HEAD).

Suggested (mostly) by: gstein

  1. … 4 more files in changeset.
Teach libsvn_ra_serf to make use of the server-provided SHA1 checksums

I introduced in 1.7 (iff they are provided, of course) to avoid

downloading server content that's already locally available.

* subversion/include/private/svn_wc_private.h,

* subversion/libsvn_wc/adm_ops.c

(svn_wc__get_pristine_contents_by_checksum): New function.

* subversion/include/svn_ra.h

(svn_ra_get_wc_contents_func_t): New callback type.

(svn_ra_callbacks2_t): Add get_wc_contents vtable member.

* subversion/libsvn_client/ra.c

(callback_baton_t): Add 'wcroot_abspath' member.

(get_wc_contents): New function.

(svn_client__open_ra_session_internal): Initialize new

'get_wc_contents' baton member.

* subversion/libsvn_ra_serf/update.c

(report_ctx_t): Add 'cached_contents' member.

(local_fetch, handle_local_fetch): New functions.

(fetch_file): Use the 'get_wc_contents' RA callback to check for a

local copy of the file contents whose SHA1 checksum we are about to

fetch from the server. If we've got those contents already, read

them (via the callback-returned stream) instead of from the network.

  1. … 4 more files in changeset.
Move private API declarations from svn_hash_private.h to

svn_subr_private.h. Also, fix serf build.

* subversion/include/private/svn_hash_pivate.h


* subversion/include/private/svn_subr_pivate.h

(svn_hash__clear, svn_hash__get_cstring, svn_hash__get_bool,

svn_hash__make, svn_hash__make_fast): move here

* subversion/libsvn_client/merge.c,











include subversion/include/private/svn_subr_pivate.h

Suggested by: gstein

Found by: gstein

  1. … 12 more files in changeset.
Move private svn_hash API to a private header.

* subversion/include/svn_hash.h

(svn_hash__clear, svn_hash__get_cstring, svn_hash__get_bool):

move from here ...

* subversion/include/private/svn_hash_private.h

... to here; new file

* subversion/libsvn_client/merge.c,








subversion/svnrdump/dump_editor.c: include new private header

  1. … 10 more files in changeset.
Purge trailing whitespace, in the spirit of r1138109.

  1. … 97 more files in changeset.
When deleting multiple targets don't use the conflict status of the last

target to determine whether to remove conflict files for other targets.

* subversion/libsvn_wc/adm_ops.c

(svn_wc__delete_many): Reduce scope of variable.

* subversion/tests/cmdline/

(verify_file_deleted): Qualify name.

(delete_conflicts_one_of_many): New test.

(test_list): Add new test.

  1. … 1 more file in changeset.
* subversion/libsvn_wc/adm_ops.c

(svn_wc__delete_many): Initialize a couple of variables, which could have

theoretically been referenced in an uninitialized state.

For issues #4102 and #4120, fix a symlink problem in 'svn revert'.

If the reverted node is a symlink pointing to a directory external,

the symlink would be re-created as a directory. Also, svn would abort

with a "disk I/O error" error, leaving the external working copy locked

so it required cleanup.

* subversion/libsvn_wc/adm_ops.c

(revert_restore): Preserve symlinks pointing at directories.

Fix an 'svn revert' assert caused by accessing the wrong memory.

* subversion/libsvn_wc/adm_ops.c

(compare_revert_list_copied_children): Cast to the correct pointer type.

Allow deletion of multiple, potentially non-nested, targets from a working

copy within a single sqlite transaction. Should improve performance of

'svn rm dir/*', especially on NFS.

For now, this change only adds new APIs based on existing single-target APIs.

The new APIs lack support for moves. This avoids having to update all callers

of existing APIs, as well as making a backport to 1.7 easier.

Later, we could merge the single-target APIs with these new ones.

No public APIs have been changed.

Reported by: Michael Rytting

* subversion/include/private/svn_wc_private.h

(svn_wc__delete_many): Declare.

* subversion/libsvn_wc/adm_ops.c

(svn_wc__delete_many): New. Based on svn_wc__delete_internal().

* subversion/libsvn_wc/wc_db.c

(op_delete_txn): Move most code in this function ...

(delete_node): ... to here. The difference being that delete_node() does

not clear the delete-list from the DB, so it can be called multiple

times to delete a number of nodes.

(op_delete_many_txn, op_delete_many_baton_t): New. Creates a new delete-list

in the DB and then calls delete_node() for each deletion target.

(svn_wc__db_op_delete_many): New. This function asserts that all

deletion-targets share a common working copy root, locks the entire

working copy, and calls op_delete_many_txn() within an sqlite transaction.

* subversion/libsvn_wc/wc_db.h

(svn_wc__db_op_delete_many): Delcare.

* subversion/libsvn_client/delete.c

(svn_client__wc_delete_many): New.

(delete_with_write_lock_baton): Change the PATH member to a TARGETS list.

(delete_with_write_lock_func): Adjust per above change.

(svn_client_delete4): Instead of looping over the target list and calling

the delete_with_write_lock_func() for each, group targets by wcroots

and pass the entire target list for each wcroot down to lower layers.

* subversion/libsvn_client/client.h

(svn_client__wc_delete_many): Declare.

  1. … 5 more files in changeset.
Fix issue 4042, commit of incomplete directory asserts.

* subversion/libsvn_wc/adm_ops.c

(process_committed_leaf): Allow incomplete nodes.

* subversion/libsvn_wc/wc_db.c

(commit_node): Preserve incomplete status.

* subversion/tests/libsvn_wc/wc-incomplete-tester.c: New.

* build.conf

(wc-incomplete-tester): New.

* subversion/tests/cmdline/svntest/

(wc_incomplete_tester_binary, run_wc_incomplete_tester): New.

* subversion/tests/cmdline/svntest/

(set_incomplete): New.

* subversion/tests/cmdline/

(commit_incomplete): New.

(test_list): Add new test.

  1. … 6 more files in changeset.
During updates, auto-merge newly added directories into locally moved-away


* subversion/libsvn_wc/update_editor.c

(dir_baton, make_dir_baton): Add MOVED_TO_OP_ROOT_ABSPATH.

(open_root, open_directory): Scan for the op-root of a move as well

as the moved-to abspath of the directory itself.

(add_directory): If the parent directory was moved-away, prepare to add

the incoming directory at the new location by constructing a moved-to

abspath for the incoming directory. Also remember the op-root of the move.

Use the moved-to abspath in notifications if applicable.

(close_directory): After completing an update of a moved-away directory

at the pre-move location, perform an in-DB copy of the directory meta

data to the post-move location and ensure that move information stays

present. Also make sure that it exists on disk at the post-move location.

This also handles incoming directories which are added as children

of moved-away directories.

* subversion/libsvn_wc/wc_db.c,


(svn_wc__db_op_copy_dir): Add new parameter IS_MOVE, used by

update_editor.c:close_directory() to properly copy op-roots of moves.

* subversion/libsvn_wc/adm_ops.c

(svn_wc_add4): Update caller of svn_wc__db_op_copy_dir().

  1. … 3 more files in changeset.
Followup to r1181800 by removing the svn_wc__db_kind_t type and replacing it

with the now-public svn_kind_t. This just affects the internals of libsvn_wc,

not any of the public, or quasi-public APIs.

* subversion/tests/libsvn_wc/:


  1. … 31 more files in changeset.
*** THIS CHANGE REVERTED IN r1428585 ***

Fix issue #3348, 'Provide syntax which means "include all files not in a


[ Question: why is filtering done twice, both in adm_ops.c and in status.c? ]

* subversion/libsvn_wc/adm_ops.c


Special case the empty changelist name as "not in a changelist".

* subversion/libsvn_client/status.c


Special case the empty changelist name as "not in a changelist".

* subversion/tests/cmdline/

(empty_pseudo_changelist): New test.

(test_list): Run it.

* subversion/svn/main.c


Drop a validation which is already done by

svn_client_add_to_changelist() and is now bogus.

  1. … 3 more files in changeset.
* subversion/libsvn_wc/adm_ops.c

(revert_restore): Do not use uninitialised variables if read_info() throws

a path-not-found error and we are dealing with the revert of a copy.

Should fix random failures of revert_test 19 on various buildbots.

(Thanks for testing, danielsh!)

* subversion/libsvn_wc/adm_ops.c

(revert_restore_handle_copied_dirs): Replace the output parameter NEW_KIND

with a new boolean output parameter REMOVED_SELF. This ensures that the

node kind variable the caller is using remains correct in all cases, and

makes the code a bit easier to follow.

(revert_restore): Update caller.

* subversion/libsvn_wc/adm_ops.c

(revert_restore_handle_copied_dirs): Don't ignore all errors returned by

svn_io_dir_remove_nonrecursive(). Ignore only the ones we care about.

Use svn_io_dir_remove_nonrecursive() to remove LOCAL_ABSPATH itself. This

will check for remaining children so this function doesn't need to run

the check itself.

Suggested by: rhuijben

Make 'svn revert' remove any kind of copied file, regardless of whether

the file was modified post-copy.

The rationale for this change can be found in a comment by Julian Foad

on issue #3601:


svn revert should undo the local text and prop changes, undo the scheduling,

and also undo the copying of the file into its new location on disk,

since that is (like prop changes) an operation that Subversion performed

on the user's behalf as a "local modification" of the user's working copy.

Most parts of this change are concerned with removing the pristine checksum

comparison revert_restore_handle_copied_file() was doing. A fix for a bug

in revert_list_read() uncovered by a failing test is also included.

* subversion/tests/cmdline/

(remove_conflict_file): No need to remove 'pi' after revert.

* subversion/tests/cmdline/

(revert_tree_conflicts_in_updated_files): Expect 'A/D/G/rho' to be

delete from disk after revert. No need to delete it manually.

* subversion/libsvn_wc/adm_ops.c

(revert_restore_handle_copied_file): Remove. This was wrapping the

comparison to the pristine file, which is now unnecessary.

(revert_restore_handle_copied_dirs, revert_restore): Remove all reverted

copied files from disk. Update some comments.

* subversion/libsvn_wc/wc-queries.sql

(revert_list, trigger_revert_list_nodes, STMT_SELECT_REVERT_LIST,


It isn't needed anymore.

* subversion/libsvn_wc/wc_db.c

(revert_list_read_baton): Remove PRISTINE_CHECKSUM.

(revert_list_read): Remove handling of the pristine checksum.

Fix a bug: The COPIED_HERE output parameter wasn't set correctly if a

copied node also had an entry in the ACTUAL_NODES table. E.g. a copied

node which was also a tree-conflict victim was not recognised as a copy

by the revert code, and left behind unversioned on disk. Set COPIED_HERE

correctly in this case, too.

(svn_wc__db_revert_list_read): Remove PRISTINE_CHECKSUM output parameter.

(revert_list_read_copied_children): Remove handling of the pristine checksum.

Small indentation fixes.

* subversion/libsvn_wc/wc_db.h

(svn_wc__db_revert_list_read): Remove PRISTINE_CHECKSUM output parameter.

(svn_wc__db_revert_list_copied_child_info_t): Remove PRISTINE_CHECKSUM.

  1. … 5 more files in changeset.
Remove reverted copied files and directories from disk, if they weren't

modified after being copied.

To achieve this we add more columns to rows in the revert list:

the node kind, the repos_id (which is not NULL for copies),

the op_root, and, if the node is a file, the pristine checksum.

While restoring the BASE on-disk state, process nodes in the revert list

marked as copies in a special way: Compare reverted copied files with

their pristines, and remove the ones that match from disk. Next, remove

any reverted copied directories which are left empty as a result.

This commit addresses issues #3101 and #876, and my own annoyance at

unversioned things left behind in my testing WCs (been testing 'svn move'

with subsequent 'revert' a lot lately).

We could take this further and remove copied files which were modified

post-copy (after all, we also destroy textual modifications to files which

were not copied). But that's a decision for another day.

Review by: julianfoad

* subversion/tests/cmdline/

(merge_away_subtrees_noninheritable_ranges): No longer need to remove

unversioned files after revert.

* subversion/tests/cmdline/

(excluded_path_misc_operation): No longer need to remove unversioned files

after revert.

* subversion/tests/cmdline/

(status_of_missing_dir_after_revert_replaced_with_history_dir): No longer

need to remove unversioned files. And don't expect them in status output.

* subversion/libsvn_wc/adm_ops.c

(revert_restore_handle_copied_file, revert_restore_handle_copied_dirs,

compare_revert_list_copied_children): New.

(revert_restore): When reverting copies, remove their remains from disk,

except for files which were modified after being copied, and directories

that contain unversioned files.

* subversion/libsvn_wc/wc-queries.sql

(revert_list): Add new columns OP_DEPTH, REPOS_ID, KIND, CHECKSUM.

Copy values from rows deleted from the NODES table into them.

Nothing changes for actual-only nodes.

(STMT_SELECT_REVERT_LIST): Get the new columns.

(STMT_SELECT_REVERT_LIST_COPIED_CHILDREN): New statement which returns

all copied children within a given reverted local_relpath.

* subversion/libsvn_wc/wc.h

(svn_wc__compare_file_with_pristine): Declare.

* subversion/libsvn_wc/questions.c

(compare_and_verify): Renamed to ...

(svn_wc__compare_file_with_pristine): ... this, so the revert code can

access this function. No modifications were made to the implementation.

(svn_wc__internal_file_modified_p): Track above function rename.

* subversion/libsvn_wc/wc_db.c

(revert_list_read_baton): Add COPIED_HERE, KIND, and PRISTINE_CHECKSUM.

(revert_list_read): Populate the new baton fields.

(svn_wc__db_revert_list_read): Add COPIED_HERE, KIND, and PRISTINE_CHECKSUM

output parameters.

(revert_list_read_copied_children_baton): New.

(revert_list_read_copied_children): New. Returns a list of all copied

children which existed within a reverted subtree.

(svn_wc__db_revert_list_read_copied_children): Exposes the

revert_list_read_copied_children() function, wrapping it in an sqlite


* subversion/libsvn_wc/wc_db.h

(svn_wc__db_revert_list_read): Declare new output parameters COPIED_HERE,

KIND, and PRISTINE_CHECKSUM. Update docstring.

(svn_wc__db_revert_list_copied_child_info_t): New.

(svn_wc__db_revert_list_read_copied_children): Declare.

  1. … 8 more files in changeset.
Make svn_wc__db_scan_addition() provide information about the local source

of a move for nodes with a 'moved-here' status.

Some future callers will only want to act on the op-roots involved in

a move, e.g. the commit code detecting whether both halfs of a move

are among the commit targets.

Other future callers might want to act directly on children of the op-roots,

e.g. code performing automatic tree conflict resolution.

So scan_addition() provides both the moved_from abspath and the abspath of

the operation root of the delete-half of the move. This should satisfy

either use case to some degree. It might not be the optimal solution

for all use cases but won't hurt, either.

* subversion/libsvn_wc/wc_db.c

(svn_wc__db_scan_addition, scan_addition): New output parameters


(get_moved_from_info): New helper function which computes values for

above new output parameters.

(scan_addition_baton_t): Add MOVED_FROM_ABSPATH and DELETE_OP_ROOT_ABSPATH.

(scan_addition_txn): Run get_moved_from_info() for 'moved-here' nodes.

(get_info_for_copy, read_url_txn, svn_wc__db_global_relocate): Update

scan_addition() calls.

* subversion/libsvn_wc/wc_db.h

(svn_wc__db_scan_addition): Update declaration and docstring.

* subversion/libsvn_wc/wc-queries.sql

(STMT_SELECT_MOVED_FROM_RELPATH): New query which selects the 'moved-from'

path corresponding to a 'moved-here' node.

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

(TESTING_DATA): Create another row for the delete-half of a move.

svn_wc__db_scan_addition() now treats a move without a delete-half

as if it was a normal a copy. (We've been recording delete-halfs

since r1151166.)

(test_scan_addition): Check for moved-from information scan_addition()

now returns for 'moved-here' nodes.

The remaining items list updated callers of svn_wc__db_scan_addition().

All of them pass NULL for the new output parameters.

* subversion/libsvn_wc/props.c

(svn_wc__get_pristine_props): Update svn_wc__db_scan_addition() call.

* subversion/libsvn_wc/adm_ops.c

(check_can_add_to_parent): Update svn_wc__db_scan_addition() call.

* subversion/libsvn_wc/adm_crawler.c

(svn_wc_restore, report_revisions_and_depths,

svn_wc_crawl_revisions5): Update svn_wc__db_scan_addition() calls.

* subversion/libsvn_wc/diff_local.c

(file_diff): Update svn_wc__db_scan_addition() call.

* subversion/libsvn_wc/diff_editor.c

(file_diff, report_wc_file_as_added,

close_file): Update svn_wc__db_scan_addition() calls.

* subversion/libsvn_wc/adm_files.c

(svn_wc__internal_ensure_adm): Update svn_wc__db_scan_addition() call.

* subversion/libsvn_wc/update_editor.c

(create_tree_conflict, add_directory,

add_file): Update svn_wc__db_scan_addition() calls.

* subversion/libsvn_wc/info.c

(build_info_for_node): Update svn_wc__db_scan_addition() call.

* subversion/libsvn_wc/copy.c

(copy_or_move): Update svn_wc__db_scan_addition() calls.

* subversion/libsvn_wc/status.c

(get_repos_root_url_relpath): Update svn_wc__db_scan_addition() call.

* subversion/libsvn_wc/lock.c

(child_is_disjoint): Update svn_wc__db_scan_addition() call.

* subversion/libsvn_wc/entries.c


read_one_entry): Update svn_wc__db_scan_addition() calls.

* subversion/libsvn_wc/node.c

(svn_wc__internal_get_repos_info, svn_wc__node_get_repos_relpath,

svn_wc__internal_get_copyfrom_info, svn_wc__internal_get_commit_base_rev,

svn_wc__internal_get_origin): Update svn_wc__db_scan_addition() calls.

  1. … 16 more files in changeset.
Rename the new_revert_* functions to just revert_*. It is confusing

to have functions called new_something when the old implementation

is already obsolete (as of r1088811).

* subversion/libsvn_wc/adm_ops.c

(new_revert_internal, new_revert_changelist,

new_revert_partial): Rename to ...

(revert_internal, revert_changelist, revert_partial): ... these, respectively.

(svn_wc_revert4): Update caller.

Record moved-to information at the delete-half of a move.

* subversion/include/private/svn_wc_private.h

(svn_wc__delete_internal): Declare.

* subversion/libsvn_wc/adm_ops.c

(svn_wc__delete_internal): New. This is like svn_wc_delete4() but has

one additional parameter MOVED_TO_ABSPATH. If not NULL, this indicates

that the delete is the delete-half of a move.

(svn_wc_delete4): Reimplement as a wrapper around svn_wc__delete_internal().

* subversion/libsvn_wc/wc-queries.sql

(STMT_INSERT_DELETE_FROM_NODE_RECURSIVE): Adjust to only insert children

of the node being deleted.

(STMT_INSERT_DELETE_NODE): New. This statement deletes a single node,

and allows populating the moved_to column in NODES.

* subversion/libsvn_wc/copy.c

(svn_wc_move): Call svn_wc__delete_internal() with a MOVED_TO_ABSPATH

instead of calling svn_wc_delete4().

* subversion/libsvn_wc/wc_db.c

(op_delete_baton_t): Add new field MOVED_TO_RELPATH.

(op_delete_txn): Use STMT_INSERT_DELETE_NODE to delete LOCAL_ABSPATH

itself, and possibly mark LOCAL_ABSPATH has having been moved elsewhere.


LOCAL_ABSPATH (before, this statement was also used to delete LOCAL_ABSPATH


(svn_wc__db_op_delete): New parameter MOVED_TO_ABSPATH. Convert this to

a relpath and put that into the op_delete baton.

(scan_deletion_txn): Update a comment that referred to the BASE_NODE table.

This is now called NODES_BASE in the query this code is evaluating.

* subversion/libsvn_wc/wc_db.h

(svn_wc__db_op_delete): Add MOVED_TO_ABSPATH parameter and update docstring.

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


(do_delete, add_directory): Adjust calls to svn_wc__db_op_delete().

  1. … 7 more files in changeset.
Fix issue 3972, revert always claims to revert symlinks

* subversion/libsvn_wc/adm_ops.c

(revert_restore): Move executable/read-only queries closer to the point

where the values are used, don't do executable processing for symlinks.

* subversion/tests/cmdline/

(symlink_destination_change): Extend to include a repeat revert.

  1. … 1 more file in changeset.