Rework the path library to accept and return "" as the only canonical empty path. Make sure the client canonicalizes all paths passed to the libraries. The path library now assumes that its inputs are canonical. Remove the use of explicit "." except for a few special cases.
(svn_path_internal_style, svn_path_local_style, svn_path_join, svn_path_is_empty, svn_path_is_empty_nts, svn_path_compare_paths, svn_path_compare_paths_nts, svn_path_is_child, svn_path_is_single_path_component): Change to use new macros, or to use explicit '/', or to assert canonical input.
* subversion/clients/cmdline/util.c (svn_cl__args_to_target_array): Add canonicalization of paths. Move svn_path_basename call after UTF-8 and canonicalization. (svn_cl__edit_externally): Convert "" to "." to satisfy APR.
* subversion/tests/libsvn_subr/path-test.c (SVN_EMPTY_PATH): New macro.
(test_path_split): Remove non-canonical inputs. Add new tests. Test svn_path_split_nts as well.
(test_join, test_basename): Remove non-canonical inputs. Add new tests.
(test_canonicalize): New test.
* subversion/libsvn_subr/io.c (svn_io_remove_dir, svn_io_stat, svn_io_dir_open, apr_dir_is_empty): Convert "" to "." to satisfy APR.
Fix some screwy `svn status' stuff. Tandem code-churnin' and bug-bustin' with Karl.
The problem was that 'svn status' had regressed: it no longer printed `!' for missing objects and `~' for objects whose kind has changed (file to dir, or dir to file). The reproduction recipes are given in the two regression tests mentioned in stat_tests.py below.
* subversion/include/svn_wc.h (svn_wc_statuses): Remove 'strict'. Update this docstring.
* subversion/libsvn_wc/status.c (assemble_status): Remove 'strict'. Add 'path_kind' argument. Also, make a few formatting changes. (add_unversioned_items): Update call to add_status_structure. (add_status_structure): Remove 'strict'. Add 'path_kind' argument. Update call to assemble_status(). (svn_wc_statuses): Remove 'strict'. Update call to add_status_structure(), and the recursive call. Protect against trying to read a subdir entry when none should/can be read. Remove/modify some "todo" comments which are either "to-done" or "to-be-done-differently".
* subversion/libsvn_client/status.c (svn_client_status): Update call to svn_wc_statuses().
* subversion/tests/clients/cmdline/stat_tests.py (status_missing_file, status_type_change): Verify status output. (test_list): No longer expect failure for 'status_missing_file' and 'status_type_change'.
* subversion/libsvn_client/delete.c (svn_client__can_delete): Update call to svn_wc_statuses().