Continuing issue #749. Make svn_wc_adm_access_t optionally
hierarchical. Lock entire tree before starting a commit. Revert
r2504 as it's no longer needed.
This got more complicated than I would have liked. I am still
concerned about which directories get locked, and in which order they
get locked.
* subversion/include/svn_error_codes.h (SVN_ERR_WC_INVALID_LOCK): New
error code.
* subversion/include/svn_wc.h
(svn_wc_adm_open): Add parent_access and tree_lock parameters.
(svn_wc_adm_retrieve): New function.
(svn_wc_adm_close): Document new behavior.
* subversion/libsvn_wc/adm_ops.c
(svn_wc_process_committed, svn_wc_remove_from_revision_control):
Replace svn_wc_adm_open with svn_wc_adm_retrieve and delete
svn_wc_adm_close.
(svn_wc_delete, svn_wc_revert): Pass new parameters to svn_wc_adm_open.
* subversion/libsvn_wc/log.c
(log_do_delete_entry): Replace svn_wc_adm_open with svn_wc_adm_retrieve.
(log_do_committed): Replace svn_wc_adm_open with svn_wc_adm_retrieve
and delete svn_wc_adm_close.
* subversion/libsvn_wc/props.c (svn_wc_merge_prop_diffs): Pass new
parameters to svn_wc_adm_open.
* subversion/libsvn_wc/adm_files.c (init_adm): Pass new parameters to
svn_wc_adm_open.
* subversion/libsvn_client/commit.c
(svn_client_commit): Revert r2504. Return an error if the hash lookup
for an access baton fails.
* subversion/libsvn_client/commit_util.c
(lock_dir): Lookup parent baton. Pass new parameters to svn_wc_adm_open.
(harvest_committables): New lock_subdirs parameter. Lock all
sub-directories when locking a directory.
(svn_client__harvest_committables, svn_client__get_copy_committables): Pass
new parameter to harvest_committables.
* subversion/libsvn_wc/update_editor.c
(delete_entry): Pass new parameters to svn_wc_adm_open to lock
entire tree.
(close_directory, svn_wc_install_file): Pass new parameters to
svn_wc_adm_open.
* subversion/libsvn_client/externals.c (relegate_external,
handle_external_item_change): Pass new parameters to svn_wc_adm_open.
* subversion/libsvn_wc/wc.h
(enum svn_wc__adm_access_type): Renamed from enum svn_wc_adm_access_type.
(svn_wc__adm_access_unlocked, svn_wc__adm_access_read_lock,
svn_wc__adm_access_write_lock): Renamed enum identifiers.
(svn_wc__adm_access_closed): New enum identifier.
(struct svn_wc_adm_access_t): Added parent and children members.
* subversion/libsvn_wc/lock.c
(svn_wc__adm_access_pool_cleanup, svn_wc__adm_access_pool_cleanup_child,
svn_wc__adm_access_alloc, svn_wc_adm_retrieve): New functions.
(svn_wc__adm_steal_write_lock): Use svn_wc__adm_access_alloc.
(svn_wc_adm_open): Add parent_access and tree_lock parameters and
processing. Use svn_wc__adm_access_alloc. For read locks check path
is a directory. Register pool cleanup handler.
(svn_wc__do_adm_close): Renamed from svn_wc_adm_close and made
static. New parameter to preserver lock file. Close children. Kill
pool cleanup handler. Reset state to svn_wc__adm_access_closed.
(svn_wc_adm_close): Now a simple wrapper that calls svn_wc__do_adm_close.
(svn_wc_adm_write_check): enum svn_wc__adm_access_type name change.
* subversion/tests/clients/cmdline/copy_tests.py (copy_modify_commit): New
test.
git-svn-id: https://svn.apache.org/repos/asf/subversion/branches/issue-749-dev@842628 13f79535-47bb-0310-9956-ffa450edef68
13 files changed