On the 1.6.x-issue3469 branch, fix issue #3469 "tree conflict inside of
directory external causes assertion to fail".

In addition to fixing the assertion failure, make 'svn revert' and
'svn resolved' actually work for tree conflicted externals.

* subversion/libsvn_wc/adm_ops.c
  (revert_internal): Do not error out if directories cannot be locked as
   part of the current access baton set. Just ignore such directories.
   The attempt to revert tree-conflicted externals led to an "Unable to
   lock <external>" error which we never saw before because the assertion
   failure described in issue #3469 prevented us from entering this situation.

* subversion/libsvn_wc/entries.c
  (svn_wc__walk_entries_and_tc): Don't give up right away if a directory
   cannot be locked. Try retrieving a lock for the parent directory instead,
   and only give up if that fails, too. Prevents 'svn resolved -R' from
   silently skipping tree-conflicted externals.

* subversion/libsvn_wc/tree_conflicts.c
  (svn_wc__del_tree_conflict): If the tree conflict victim's parent is not
   already locked as part of the current access baton set, try to
   independently lock the parent (just like svn_wc__get_tree_conflict()
   already does). This makes it possible to revert or resolve tree-conflicted
   externals, since the operation needs to be carried out in the external's
   parent working copy where the tree conflict is actually recorded, rather
   than within the external itself. This part is what fixes the assertion
   failure described in issue #3469.


git-svn-id: https://svn.apache.org/repos/asf/subversion/branches/1.6.x-issue3469@945708 13f79535-47bb-0310-9956-ffa450edef68
3 files changed