You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/01/07 18:18:22 UTC
svn commit: r1429907 - in /subversion/trunk/subversion: svn/tree-conflicts.c
tests/cmdline/info_tests.py tests/cmdline/stat_tests.py
tests/cmdline/switch_tests.py tests/cmdline/tree_conflict_tests.py
tests/cmdline/update_tests.py
Author: stsp
Date: Mon Jan 7 17:18:21 2013
New Revision: 1429907
URL: http://svn.apache.org/viewvc?rev=1429907&view=rev
Log:
Show node kinds in human-readable tree conflict description string.
This clarifies what an 'edit' action refers to (a file vs. a dir).
It also makes it easier to spot mistakes where Subversion records
the wrong node kind information.
* subversion/svn/tree-conflicts.c
(svn_cl__get_human_readable_tree_conflict_description): Show the
node kinds involved in the tree conflict.
* subversion/tests/cmdline/info_tests.py
(info_with_tree_conflicts): Adjust test expectations.
* subversion/tests/cmdline/stat_tests.py
(status_with_tree_conflicts): Adjust test expectations.
* subversion/tests/cmdline/switch_tests.py
(obstructed_switch, forced_switch_failures,
tree_conflicts_on_switch_1_1, tree_conflicts_on_switch_1_2,
tree_conflicts_on_switch_2_1, tree_conflicts_on_switch_2_2,
tree_conflicts_on_switch_3): Adjust test expectations.
* subversion/tests/cmdline/tree_conflict_tests.py
(actual_only_node_behaviour): Adjust test expectations.
* subversion/tests/cmdline/update_tests.py
(tree_conflicts_on_update_1_1, tree_conflicts_on_update_1_2,
tree_conflicts_on_update_2_1, tree_conflicts_on_update_2_2,
tree_conflicts_on_update_3): Adjust test expectations.
Modified:
subversion/trunk/subversion/svn/tree-conflicts.c
subversion/trunk/subversion/tests/cmdline/info_tests.py
subversion/trunk/subversion/tests/cmdline/stat_tests.py
subversion/trunk/subversion/tests/cmdline/switch_tests.py
subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py
subversion/trunk/subversion/tests/cmdline/update_tests.py
Modified: subversion/trunk/subversion/svn/tree-conflicts.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/tree-conflicts.c?rev=1429907&r1=1429906&r2=1429907&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/tree-conflicts.c (original)
+++ subversion/trunk/subversion/svn/tree-conflicts.c Mon Jan 7 17:18:21 2013
@@ -104,12 +104,39 @@ svn_cl__get_human_readable_tree_conflict
apr_pool_t *pool)
{
const char *action, *reason, *operation;
+ svn_node_kind_t incoming_kind;
+
reason = reason_str(conflict);
action = action_str(conflict);
operation = svn_cl__operation_str_human_readable(conflict->operation, pool);
+
+ /* Determine the node kind of the incoming change. */
+ incoming_kind = svn_node_unknown;
+ if (conflict->action == svn_wc_conflict_action_edit ||
+ conflict->action == svn_wc_conflict_action_delete)
+ {
+ /* Change is acting on 'src_left' version of the node. */
+ if (conflict->src_left_version)
+ incoming_kind = conflict->src_left_version->node_kind;
+ }
+ else if (conflict->action == svn_wc_conflict_action_add ||
+ conflict->action == svn_wc_conflict_action_replace)
+ {
+ /* Change is acting on 'src_right' version of the node.
+ *
+ * ### For 'replace', the node kind is ambiguous. However, src_left
+ * ### is NULL for replace, so we must use src_right. */
+ if (conflict->src_right_version)
+ incoming_kind = conflict->src_right_version->node_kind;
+ }
+
SVN_ERR_ASSERT(action && reason);
- *desc = apr_psprintf(pool, _("local %s, incoming %s upon %s"),
- reason, action, operation);
+ *desc = apr_psprintf(pool, _("local %s %s, incoming %s %s upon %s"),
+ svn_node_kind_to_word(conflict->node_kind),
+ reason,
+ svn_node_kind_to_word(incoming_kind),
+ action,
+ operation);
return SVN_NO_ERROR;
}
Modified: subversion/trunk/subversion/tests/cmdline/info_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/info_tests.py?rev=1429907&r1=1429906&r2=1429907&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/info_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/info_tests.py Mon Jan 7 17:18:21 2013
@@ -173,7 +173,7 @@ def info_with_tree_conflicts(sbox):
path = os.path.join(G, fname)
# check plain info
- expected_str1 = ".*local %s, incoming %s.*" % (reason, action)
+ expected_str1 = ".*local file %s, incoming file %s.*" % (reason, action)
expected_info = { 'Tree conflict' : expected_str1 }
svntest.actions.run_and_verify_info([expected_info], path)
@@ -197,7 +197,7 @@ def info_with_tree_conflicts(sbox):
expected_infos = [{ 'Path' : re.escape(G) }]
for fname, action, reason in scenarios:
path = os.path.join(G, fname)
- tree_conflict_re = ".*local %s, incoming %s.*" % (reason, action)
+ tree_conflict_re = ".*local file %s, incoming file %s.*" % (reason, action)
expected_infos.append({ 'Path' : re.escape(path),
'Tree conflict' : tree_conflict_re })
expected_infos.sort(key=lambda info: info['Path'])
Modified: subversion/trunk/subversion/tests/cmdline/stat_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/stat_tests.py?rev=1429907&r1=1429906&r2=1429907&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/stat_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/stat_tests.py Mon Jan 7 17:18:21 2013
@@ -1740,11 +1740,11 @@ def status_with_tree_conflicts(sbox):
# check status of G
expected = svntest.verify.UnorderedOutput(
["A + C %s\n" % rho,
- " > local edit, incoming delete upon update\n",
+ " > local file edit, incoming file delete upon update\n",
"D C %s\n" % pi,
- " > local delete, incoming edit upon update\n",
+ " > local file delete, incoming file edit upon update\n",
"! C %s\n" % tau,
- " > local delete, incoming delete upon update\n",
+ " > local file delete, incoming file delete upon update\n",
"Summary of conflicts:\n",
" Tree conflicts: 3\n",
])
@@ -1758,11 +1758,11 @@ def status_with_tree_conflicts(sbox):
expected = svntest.verify.UnorderedOutput(
[" 2 2 jrandom %s\n" % G,
"D C 2 2 jrandom %s\n" % pi,
- " > local delete, incoming edit upon update\n",
+ " > local file delete, incoming file edit upon update\n",
"A + C - 1 jrandom %s\n" % rho,
- " > local edit, incoming delete upon update\n",
+ " > local file edit, incoming file delete upon update\n",
"! C %s\n" % tau,
- " > local delete, incoming delete upon update\n",
+ " > local file delete, incoming file delete upon update\n",
"Summary of conflicts:\n",
" Tree conflicts: 3\n",
])
Modified: subversion/trunk/subversion/tests/cmdline/switch_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/switch_tests.py?rev=1429907&r1=1429906&r2=1429907&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/switch_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/switch_tests.py Mon Jan 7 17:18:21 2013
@@ -891,7 +891,7 @@ def obstructed_switch(sbox):
# svn info A/B/E/alpha
expected_stdout = verify.RegexOutput(
- ".*local unversioned, incoming add upon switch",
+ ".*local file unversioned, incoming file add upon switch",
match_all=False)
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'info',
A_B_E_alpha)
@@ -1285,7 +1285,7 @@ def forced_switch_failures(sbox):
# svn info A/B/F/pi
expected_stdout = verify.ExpectedOutput(
- 'Tree conflict: local unversioned, incoming add upon switch\n',
+ 'Tree conflict: local file unversioned, incoming file add upon switch\n',
match_all=False)
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'info',
@@ -2349,37 +2349,37 @@ def tree_conflicts_on_switch_1_1(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local file delete, incoming file edit upon switch'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .file.*/F/alpha@3$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .dir.*/DF/D1@3$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .dir.*/DDF/D1@3$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .dir.*/D/D1@3$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .dir.*/DD/D1@3$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .dir.*/DDD/D1@3$',
},
@@ -2447,37 +2447,37 @@ def tree_conflicts_on_switch_1_2(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local file delete, incoming file delete upon switch'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .dir.*/DF/D1@3$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .dir.*/DDF/D1@3$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .dir.*/DD/D1@3$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon switch'
+ '^local dir delete, incoming dir edit upon switch'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .dir.*/DDD/D1@3$',
},
@@ -2530,37 +2530,37 @@ def tree_conflicts_on_switch_2_1(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local file edit, incoming file delete upon switch'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local dir edit, incoming dir delete upon switch'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local dir edit, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local dir edit, incoming dir delete upon switch'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local dir edit, incoming dir delete upon switch'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon switch'
+ '^local dir edit, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .none.*(/DDD/D1@3)?$',
},
@@ -2629,37 +2629,37 @@ def tree_conflicts_on_switch_2_2(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local file delete, incoming file delete upon switch'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .none.*(/DDD/D1@3)?$',
},
@@ -2718,37 +2718,37 @@ def tree_conflicts_on_switch_3(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local file delete, incoming file delete upon switch'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon switch'
+ '^local dir delete, incoming dir delete upon switch'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .none.*(/DDD/D1@3)?$',
},
Modified: subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py?rev=1429907&r1=1429906&r2=1429907&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py Mon Jan 7 17:18:21 2013
@@ -1223,7 +1223,7 @@ def actual_only_node_behaviour(sbox):
# info
expected_info = {
- 'Tree conflict': 'local missing, incoming edit upon merge.*',
+ 'Tree conflict': 'local file missing, incoming file edit upon merge.*',
'Name': 'foo',
'Schedule': 'normal',
'Node Kind': 'none',
Modified: subversion/trunk/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/update_tests.py?rev=1429907&r1=1429906&r2=1429907&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/update_tests.py Mon Jan 7 17:18:21 2013
@@ -4243,37 +4243,37 @@ def tree_conflicts_on_update_1_1(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local file delete, incoming file edit upon update'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .file.*/F/alpha@3$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .dir.*/DF/D1@3$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .dir.*/DDF/D1@3$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .dir.*/D/D1@3$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .dir.*/DD/D1@3$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .dir.*/DDD/D1@3$',
},
@@ -4340,37 +4340,37 @@ def tree_conflicts_on_update_1_2(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local file delete, incoming file delete upon update'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .dir.*/DF/D1@3$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .dir.*/DDF/D1@3$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .dir.*/DD/D1@3$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming edit upon update'
+ '^local dir delete, incoming dir edit upon update'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .dir.*/DDD/D1@3$',
},
@@ -4423,37 +4423,37 @@ def tree_conflicts_on_update_2_1(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local file edit, incoming file delete upon update'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local dir edit, incoming dir delete upon update'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local dir edit, incoming dir delete upon update'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local dir edit, incoming dir delete upon update'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local dir edit, incoming dir delete upon update'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local edit, incoming delete upon update'
+ '^local dir edit, incoming dir delete upon update'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .none.*(/DDD/D1@3)?$',
},
@@ -4531,37 +4531,37 @@ def tree_conflicts_on_update_2_2(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local file delete, incoming file delete upon update'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .none.*(/DDD/D1@3)?$',
},
@@ -4693,37 +4693,37 @@ def tree_conflicts_on_update_3(sbox):
expected_info = {
'F/alpha' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local file delete, incoming file delete upon update'
+ ' Source left: .file.*/F/alpha@2'
+ ' Source right: .none.*(/F/alpha@3)?$',
},
'DF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DF/D1@2'
+ ' Source right: .none.*(/DF/D1@3)?$',
},
'DDF/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DDF/D1@2'
+ ' Source right: .none.*(/DDF/D1@3)?$',
},
'D/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/D/D1@2'
+ ' Source right: .none.*(/D/D1@3)?$',
},
'DD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DD/D1@2'
+ ' Source right: .none.*(/DD/D1@3)?$',
},
'DDD/D1' : {
'Tree conflict' :
- '^local delete, incoming delete upon update'
+ '^local dir delete, incoming dir delete upon update'
+ ' Source left: .dir.*/DDD/D1@2'
+ ' Source right: .none.*(/DDD/D1@3)?$',
},