Replace the very wc-1.0 style svn_wc__internal_remove_from_revision_control function with an atomic wc-ng function. This makes operations like reducing the depth of a working copy or removing externals from a wc atomic by performing a db operation and installing workqueue items.
* subversion/libsvn_client/externals.c (relegate_dir_external): Obtain lock here that was obtained in the caller. Properly handle working copy renames. (switch_dir_external): Remove function that has been moved to the callee.
* subversion/libsvn_wc/crop.c (includes): Include workqueue.h. (IGNORE_LOCAL_MOD): Remove now unused macro. (crop_children): Use db operation directly. (svn_wc_exclude): Use db operation directly. Avoid second db operation by passing absent information. (svn_wc_crop_tree2): Update caller. Run workqueue.
* subversion/libsvn_wc/externals.c (svn_wc__external_remove): If we leave an external, leave the whole external by using the fail early mode.
* subversion/libsvn_wc/wc-queries.sql (STMT_SELECT_WORKING_PRESENT, STMT_DELETE_NODE_RECURSIVE, STMT_DELETE_NODE): New queries.
* subversion/libsvn_wc/wc_db.c (remove_node_baton): Add fields for new options. (remove_node_txn): Add code to create workqueue items for nodes that exist on disk. Provide cancellation checking when checking for changes. Allow setting excluded and not-present. (svn_wc__db_op_remove_node): Update caller.
* subversion/libsvn_wc/wc_db.h (svn_wc__db_op_remove_node): Update prototype and documentation.