Fix update/switch to skip all tree conflict victims and their descendants. Skip both newly-discovered and existing tree conflicts.
Create only one tree conflict at the root of each conflicted tree, not a tree conflict in every directory.
Notify the user just once about any given tree conflict if the target contains a tree conflict, is itself tree-conflicted, or is inside a tree conflict.
Tweak test expectations to reflect these new features. Add tests that run update/switch in trees that already contain tree conflict victims. Add tests that chdir into conflicted trees and attempt to update/switch.
* subversion/libsvn_wc/update_editor.c (edit_baton): Add field current_tree_conflict. (make_editor): Initialize new field. (dir_baton): Remove unused field tree_conflicted. (make_dir_baton): Track field removal. (open_root): TODO comment, for now. (check_tree_conflict): Thin out the comments a bit. Remove useless checks for entry validity. Remove the redundant (delete:obstructed) and (delete:missing) conflicts. (already_in_a_tree_conflict): New function. (do_entry_deletion add_directory, open_directory, add_file, open_file): Skip the operation if there is an existing or new tree conflict. Notify the user once per tree conflict. (close_directory): Unset current_tree_conflict when returning to the victim dir. Don't notify about tree conflicts. (complete_directory): Do nothing if inside a tree conflict.
* subversion/tests/cmdline/update_tests.py (update_deleted_missing_dir, another_hudson_problem): Don't treat a missing item as a tree conflict. (update_delete_modified_files, tree_conflicts_on_update_1_1, tree_conflicts_on_update_1_2, tree_conflicts_on_update_2_1, tree_conflicts_on_update_2_2, tree_conflicts_on_update_3): Tweak expected output and disk to reflect the consistent skipping. (tree_conflicts_on_update_2_3): New test function. (test_list): Add the new test function, make it XFail().
* subversion/tests/cmdline/switch_tests.py (failed_anchor_is_target, switch_with_obstructing_local_adds, tree_conflicts_on_switch_1_1, tree_conflicts_on_switch_1_2, tree_conflicts_on_switch_2_1, tree_conflicts_on_switch_2_2, tree_conflicts_on_switch_3): Tweak expected output and disk to reflect the consistent skipping. (test_list): XFail 3 tests due to problems with 'svn status': forced_switch_failures tree_conflicts_on_switch_2_1 tree_conflicts_on_switch_3
* subversion/tests/cmdline/svntest/actions.py (deep_trees_conflict_output): Tweak expected output. (deep_trees_conflict_output_skipped, deep_trees_status_local_tree_del, deep_trees_status_local_leaf_edit): New. (deep_trees_run_tests_scheme_for_update): Allow status check to be optional. (deep_trees_skipping_on_update): New function.
* subversion/tests/cmdline/revert_tests.py (revert_tree_conflicts_in_updated_files): Tweak expected output and disk to reflect the consistent skipping.
* subversion/tests/cmdline/stat_tests.py (status_with_tree_conflicts): Tweak expected output and disk to reflect the consistent skipping.
* subversion/tests/cmdline/commit_tests.py (tree_conflicts_resolved): Tweak expected output and disk to reflect the consistent skipping.
* subversion/tests/cmdline/info_tests.py (test_list): Remove XFail from info_with_tree_conflicts.
* subversion/tests/cmdline/tree_conflict_tests.py (test_list): Remove XFail from up_sw_file_add_onto_add.
* subversion/tests/cmdline/svntest/tree.py (build_tree_from_checkout): Correct a comment.