Checkout
Julian Foad
committed
on 13 Nov 08
Merge the "tc-resolve" branch to trunk. This makes "resolved" handle tree
conflicts per victim rather than per parent.

Below are all the pe… Show more
Merge the "tc-resolve" branch to trunk. This makes "resolved" handle tree

conflicts per victim rather than per parent.

Below are all the pertinent parts of log messages on the branch, partially

edited for grouping and to remove some irrelevant details of intermediate

steps.

-------------------------------------------------------------------

* subversion/libsvn_wc/adm_ops.c

 (resolve_conflict_on_entry): Do not clear tree conflicts that are recorded

   in this entry. Do not send a notification, but instead report (through a

   new boolean output parameter) whether something was resolved.

 (resolve_found_entry_callback): Resolve any tree conflict for this victim.

   Send a notification if any conflict was resolved.

 (svn_wc_resolved_conflict4): Use an entries-walker function that visits

   unversioned tree conflict victims as well as ordinary entries.

-------------------------------------------------------------------

Allow sched-deleted nodes to be resolved (fixes update_tests.py 15).

* subversion/libsvn_wc/adm_ops.c

 (resolve_found_entry_callback):

   Allow sched-deleted nodes to be resolved.

* subversion/libsvn_wc/entries.c

 (visit_tc_too_found_entry):

   Only try to retrieve the ADM_ACCESS in presence of tree-conflicts.

 (visit_tc_too_error_handler):

   Get the ADM_ACCESS on the parent instead of on the node itself, thus

   avoid an error upon an unversioned tree-conflict victim.

   ### TODO: check for greater subdir depths.

Fix a crash in del_tree_conflict().

* subversion/libsvn_wc/tree_conflicts.c

 (svn_wc__del_tree_conflict):

   Only write and run the log if LOG_ACCUM is not NULL.

-------------------------------------------------------------------

Fix per-victim "resolved" on directory tree-conflict victims.

* subversion/libsvn_client/resolved.c

 (svn_client_resolve):

   Get the ADM_ACCESS on the target's parent directory to be able to resolve

   tree-conflicted directories. Extend the ADM_LOCK_LEVEL to still be able

   to lock the target node for text/prop conflicts.

* subversion/include/svn_client.h

 (svn_client_resolve): Comment.

* subversion/libsvn_wc/adm_ops.c

 (resolve_found_entry_callback):

   Completely split tree-conflict resolution from text and prop conflicts,

   because tree-conflicts need a different ADM_ACCESS when handling

   directories. Change use of RESOLVED to already reflect the sanity-check,

   and sanity-check separately for tree-conflicts. Clarify some conditions.

   Also remove the debugging conditions that exited prematurely.

* subversion/libsvn_wc/tree_conflicts.c

 (svn_wc__loggy_del_tree_conflict):

   Extend an assertion by a NULL check. Add another assertion to make sure

   the VICTIM_PATH is a child node of the ADM_ACCESS' path.

* subversion/libsvn_wc/tree_conflicts.h

 (svn_wc__loggy_add_tree_conflict,

  svn_wc__loggy_del_tree_conflict,

  svn_wc__del_tree_conflict,

  svn_wc__write_tree_conflicts_to_entry,

  svn_wc__tree_conflict_exists):

   Comments, add "@since New in 1.6.".

-------------------------------------------------------------------

Make the tree-conflict-enabled WC walker cope with an unversioned target.

* subversion/libsvn_wc/entries.c,

 subversion/libsvn_wc/wc.h

 (svn_wc__walk_entries_and_tc): Allow the target to be unversioned, and

   allow adm_access to be null.

-------------------------------------------------------------------

Fix the behaviour of "resolved" that descends into unversioned

tree-conflicts even if the depth doesn't allow that.

* subversion/libsvn_wc/entries.c

 (visit_tc_too_baton_t): Add TARGET and DEPTH fields.

 (visit_tc_too_found_entry):

   Use new TARGET and DEPTH fields in the baton to determine whether to

   descend into unversioned tree-conflicted children of a directory.

 (svn_wc__walk_entries_and_tc): Supply TARGET and DEPTH to the baton.

-------------------------------------------------------------------

Tests.

* subversion/tests/cmdline/commit_tests.py

 (tree_conflicts_resolved): Adjust for resolving per victim.

* subversion/tests/cmdline/depth_tests.py

 (tree_conflicts_resolved_depth_empty, tree_conflicts_resolved_depth_files,

  tree_conflicts_resolved_depth_immediates,

  tree_conflicts_resolved_depth_infinity, make_depth_tree_conflicts):

   Four new tests and a helper. The tests are XFAIL because the helper

   make_depth_tree_conflicts() exposes an error in update code that

   is not related to "resolved". Separate trials suggest that these

   tests will pass as soon as the update issue is resolved. See

   inline comment in make_depth_tree_conflicts() marked "##".

 (test_list): Add the new tests.

* subversion/tests/cmdline/log_tests.py

 (merge_history_repos): Resolve the victim, not the parent.

* subversion/tests/cmdline/tree_conflict_tests.py

 (ensure_tree_conflict): Resolve the victim, not the parent.

   Make a "resolved" test also try run "resolved" on the victim's

   parent first, to make sure it doesn't resolve its children.

   Remove comment about not supporting "resolved" per victim.

* subversion/tests/cmdline/update_tests.py

 (another_hudson_problem): Resolve the victim, not the parent.

Show less