Fix issue #4390, "parallel nested checkout not possible with wc-ng".
Change the meaning of the enforce_empty_wq flag in svn_wc__db_t such that the flag is checked only when the DB is locked for writing, rather than when the DB is merely opened. This allows nested checkouts to proceed in parallel to enclosing checkouts, and should also fix some other issues for multi-process clients (according to Bert).
Suggested by: rhuijben
* subversion/libsvn_wc/wc_db.c (svn_wc__db_init, svn_wc__db_upgrade_begin): Update callers of svn_wc__db_pdh_create_wcroot(). (svn_wc__db_wclock_obtain): Verify that no work items are queued up if db->enforce_empty_wq is set.
* subversion/libsvn_wc/wc_db_wcroot.c (verify_no_work): Rename to ... (svn_wc__db_verify_no_work): ... this and make this function re-usable within libsvn_wc. (svn_wc__db_pdh_create_wcroot): Remove enforce_empty_wq parameter, and ignore that flag for the purpose of checking for empty work queue items. As before, this function still checks the work queue during upgrades. (svn_wc__db_wcroot_parse_local_abspath: Update caller of svn_wc__db_pdh_create_wcroot().
* subversion/tests/cmdline/wc_tests.py (checkout_within_locked_wc): Adjust expected output and remove XFail marker.
* subversion/libsvn_wc/wc_db_wcroot.c (svn_wc__db_wcroot_parse_local_abspath): If a WCROOT was discovered via a symlink, cache it only under the symlink path, not under both the symlink path and the symlink target path. This function is supposed to maintain a 1:1 mapping between WCROOT objects and paths.