Resolve long standing open parts of issues #3150 'tree conflicts with
directories as victims' and issue #2282 by making the merge of a directory
delete validate if the delete target matches what the merge expects.

This was one of the major reasons to refactor the diff interface more than
absolutely necessary.

These issues might be completed by this patch, but the descriptions are
to vague to call them closed at this time.

* subversion/libsvn_client/merge.c
  (dir_delete_baton_t): Add struct.
  (mark_dir_edited,
   mark_file_edited): If handling a parent-delete, just note the edited state
    in the delete baton instead of notifying.

  (merge_file_opened): If handling a parent-delete and we already detected an
    edit: skip further processing on this node.

  (merge_file_deleted): Store comparision in parent delete baton when
    available. Just call the wc delete if we don't use a single feature of the
    libsvn_client wrapper.

  (merge_dir_opened): Remove the global skip of descendants of deletes, but
    still apply it if we find a reason to skip the current node. Continue or
    start comparison mode on non force-delete deletes.

  (verify_touched_by_del_check): New function.

  (merge_dir_deleted): Compare properties to see if we are different than
    expected to be deleted. Store result in baton.

    For the root: If no differences were collected, verify if we walked
    all existing descendants (including not-ignored local files) and only
    if so delete the directory. Otherwise mark tree conflict.

* subversion/tests/cmdline/merge_tree_conflict_tests.py
  (tree_conflicts_on_merge_local_ci_5_2): Remove XFail.
    Update expected status.

* subversion/tests/cmdline/tree_conflict_tests.py
  (merge_dir_del_onto_not_same): Remove XFail.


git-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1443112 13f79535-47bb-0310-9956-ffa450edef68