Log Message: |
Fix a very ugly case in 'svn status' where 'svn status wc' and
'svn status wc/path' could show a different status for path.
This also makes 'svn status' always describe the highest moved_to when
there are multiple moves from a single location.
(This behavior was undefined before, but identical to what you would get with
the usual index usage in sqlite)
This patch has the nice side effect that it resolves the most common crash
report in the current AnkhSVN version: an assertion caused by an invalid
move stored in wc.db.
* subversion/libsvn_wc/status.c
(read_info): Move this function into wc_db.c to allow using a lock and
access to private apis.
(assemble_status): Update caller. Update moved_to usage.
(get_dir_status,
get_child_status,
svn_wc__internal_walk_status): Update caller.
* subversion/libsvn_wc/wc-queries.sql
(STMT_SELECT_MOVED_TO_NODE): New query.
* subversion/libsvn_wc/wc_db.c
(read_children_info): Set moved_here as documented: only for op-roots.
Don't duplicate name for every higher layer.
Hook moved_to information in a linked list, to provide users all move
information.
(read_single_info,
svn_wc__db_read_single_info): New function. Based on status' read_info,
but reports more accurage results on shadowed nodes.
* subversion/libsvn_wc/wc_db.h
(svn_wc__db_moved_to_info_t): New struct.
(svn_wc__db_info_t): Describe all moved_tos.
(svn_wc__db_read_single_info): New function.
* subversion/tests/cmdline/stat_tests.py
(status_move_missing_direct): Remove XFail marker.
|