You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2013/02/07 00:29:02 UTC
svn commit: r1443275 - in /subversion/trunk/subversion:
libsvn_client/merge.c tests/cmdline/merge_tree_conflict_tests.py
Author: rhuijben
Date: Wed Feb 6 23:29:02 2013
New Revision: 1443275
URL: http://svn.apache.org/viewvc?rev=1443275&view=rev
Log:
When merging a replacement, don't try the add part if the delete part failed
with a tree conflict. This resolves issue #4011.
* subversion/libsvn_client/merge.c
(merge_file_opened,
merge_dir_opened): Update action earlier to avoid recording edit on adds.
Skip adds when the matching delete was a tree conflict.
* subversion/tests/cmdline/merge_tree_conflict_tests.py
(merge_replace_on_del_fails): Remove XFail marker.
Modified:
subversion/trunk/subversion/libsvn_client/merge.c
subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py
Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1443275&r1=1443274&r2=1443275&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Wed Feb 6 23:29:02 2013
@@ -1924,6 +1924,9 @@ merge_file_opened(void **new_file_baton,
svn_boolean_t excluded;
svn_depth_t parent_depth;
+ if (! right_source)
+ fb->tree_conflict_action = svn_wc_conflict_action_delete;
+
{
svn_wc_notify_state_t obstr_state;
@@ -2021,12 +2024,22 @@ merge_file_opened(void **new_file_baton,
&& contains_path(pdb->pending_deletes, local_abspath))
{
fb->add_is_replace = TRUE;
+ fb->tree_conflict_action = svn_wc_conflict_action_replace;
apr_hash_set(pdb->pending_deletes, local_abspath,
APR_HASH_KEY_STRING, NULL);
}
- if (! (merge_b->dry_run && ((pdb && pdb->added) || fb->add_is_replace)))
+ if (contains_path(merge_b->tree_conflicted_abspaths, local_abspath))
+ {
+ *skip = TRUE;
+
+ /* ### TODO: Update the tree conflict to store that this is a replace */
+
+ return SVN_NO_ERROR;
+ }
+ else if (! (merge_b->dry_run
+ && ((pdb && pdb->added) || fb->add_is_replace)))
{
svn_wc_notify_state_t obstr_state;
svn_node_kind_t kind;
@@ -2641,6 +2654,9 @@ merge_dir_opened(void **new_dir_baton,
svn_boolean_t excluded;
svn_depth_t parent_depth;
+ if (! right_source)
+ db->tree_conflict_action = svn_wc_conflict_action_delete;
+
/* Check for an obstructed or missing node on disk. */
{
svn_wc_notify_state_t obstr_state;
@@ -2782,12 +2798,23 @@ merge_dir_opened(void **new_dir_baton,
&& contains_path(pdb->pending_deletes, local_abspath))
{
db->add_is_replace = TRUE;
+ db->tree_conflict_action = svn_wc_conflict_action_replace;
apr_hash_set(pdb->pending_deletes, local_abspath,
APR_HASH_KEY_STRING, NULL);
}
- if (! (merge_b->dry_run && ((pdb && pdb->added) || db->add_is_replace)))
+ if (contains_path(merge_b->tree_conflicted_abspaths, local_abspath))
+ {
+ *skip = TRUE;
+ *skip_children = TRUE;
+
+ /* ### TODO: Update the tree conflict to store that this is a replace */
+
+ return SVN_NO_ERROR;
+ }
+ else if (! (merge_b->dry_run
+ && ((pdb && pdb->added) || db->add_is_replace)))
{
svn_wc_notify_state_t obstr_state;
svn_node_kind_t kind;
Modified: subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1443275&r1=1443274&r2=1443275&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py Wed Feb 6 23:29:02 2013
@@ -1876,7 +1876,6 @@ def merge_replace_causes_tree_conflict2(
# Test for issue #4011 'merge of replacement on local delete fails'
@SkipUnless(server_has_mergeinfo)
@Issue(4011)
-@XFail()
def merge_replace_on_del_fails(sbox):
"merge replace on local delete fails"