You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2013/02/04 18:00:16 UTC

svn commit: r1442177 - /subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c

Author: philip
Date: Mon Feb  4 17:00:16 2013
New Revision: 1442177

URL: http://svn.apache.org/viewvc?rev=1442177&view=rev
Log:
Layered moved-to doesn't work yet.

* subversion/tests/libsvn_wc/op-depth-test.c
  (layered_moved_to): Extend.
  (test_funcs): Mark layered_moved_to XFAIL.

Modified:
    subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c

Modified: subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c?rev=1442177&r1=1442176&r2=1442177&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c Mon Feb  4 17:00:16 2013
@@ -6035,40 +6035,52 @@ layered_moved_to(const svn_test_opts_t *
   SVN_ERR(sbox_wc_mkdir(&b, "A"));
   SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
   SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
-  SVN_ERR(sbox_wc_mkdir(&b, "B"));
-  SVN_ERR(sbox_wc_mkdir(&b, "B/C"));
+  SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/D"));
+  SVN_ERR(sbox_wc_mkdir(&b, "A/B/C/D/E"));
+  SVN_ERR(sbox_wc_mkdir(&b, "C"));
+  SVN_ERR(sbox_wc_mkdir(&b, "C/D"));
+  SVN_ERR(sbox_wc_mkdir(&b, "C/D/E"));
   SVN_ERR(sbox_wc_commit(&b, ""));
-  SVN_ERR(sbox_wc_propset(&b, "property", "value", "A/B/C"));
-  SVN_ERR(sbox_wc_propset(&b, "property", "value", "B/C"));
+  SVN_ERR(sbox_wc_propset(&b, "property", "value", "A/B/C/D/E"));
+  SVN_ERR(sbox_wc_propset(&b, "property", "value", "C/D/E"));
   SVN_ERR(sbox_wc_commit(&b, ""));
   SVN_ERR(sbox_wc_update(&b, "", 1));
 
   SVN_ERR(sbox_wc_move(&b, "A", "X"));
-  SVN_ERR(sbox_wc_move(&b, "X/B/C", "C2"));
-  SVN_ERR(sbox_wc_delete(&b, "X/B"));
-  SVN_ERR(sbox_wc_move(&b, "B", "X/B"));
-  SVN_ERR(sbox_wc_move(&b, "X/B/C", "C3"));
+  SVN_ERR(sbox_wc_move(&b, "X/B/C/D/E", "E2"));
+  SVN_ERR(sbox_wc_delete(&b, "X/B/C"));
+  SVN_ERR(sbox_wc_move(&b, "C", "X/B/C"));
+  SVN_ERR(sbox_wc_move(&b, "X/B/C/D/E", "E3"));
   {
     nodes_row_t nodes[] = {
-      {0, "",        "normal",       1, ""},
-      {0, "A",       "normal",       1, "A"},
-      {0, "A/B",     "normal",       1, "A/B"},
-      {0, "A/B/C",   "normal",       1, "A/B/C"},
-      {0, "B",       "normal",       1, "B"},
-      {0, "B/C",     "normal",       1, "B/C"},
-      {1, "A",       "base-deleted", NO_COPY_FROM, "X"},
-      {1, "A/B",     "base-deleted", NO_COPY_FROM},
-      {1, "A/B/C",   "base-deleted", NO_COPY_FROM},
-      {1, "B",       "base-deleted", NO_COPY_FROM, "X/B"},
-      {1, "B/C",     "base-deleted", NO_COPY_FROM},
-      {1, "X",       "normal",       1, "A", MOVED_HERE},
-      {1, "X/B",     "normal",       1, "A/B", MOVED_HERE},
-      {1, "X/B/C",   "normal",       1, "A/B/C", MOVED_HERE},
-      {2, "X/B",     "normal",       1, "B", MOVED_HERE},
-      {2, "X/B/C",   "normal",       1, "B/C", FALSE, "C2", TRUE},
-      {3, "X/B/C",   "base-deleted", NO_COPY_FROM, "C3"},
-      {1, "C2",      "normal",       1, "A/B/C", MOVED_HERE},
-      {1, "C3",      "normal",       1, "B/C", MOVED_HERE},
+      {0, "",            "normal",       1, ""},
+      {0, "A",           "normal",       1, "A"},
+      {0, "A/B",         "normal",       1, "A/B"},
+      {0, "A/B/C",       "normal",       1, "A/B/C"},
+      {0, "A/B/C/D",     "normal",       1, "A/B/C/D"},
+      {0, "A/B/C/D/E",   "normal",       1, "A/B/C/D/E"},
+      {0, "C",           "normal",       1, "C"},
+      {0, "C/D",         "normal",       1, "C/D"},
+      {0, "C/D/E",       "normal",       1, "C/D/E"},
+      {1, "A",           "base-deleted", NO_COPY_FROM, "X"},
+      {1, "A/B",         "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C",       "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C/D",     "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C/D/E",   "base-deleted", NO_COPY_FROM},
+      {1, "C",           "base-deleted", NO_COPY_FROM, "X/B/C"},
+      {1, "C/D",         "base-deleted", NO_COPY_FROM},
+      {1, "C/D/E",       "base-deleted", NO_COPY_FROM},
+      {1, "X",           "normal",       1, "A", MOVED_HERE},
+      {1, "X/B",         "normal",       1, "A/B", MOVED_HERE},
+      {1, "X/B/C",       "normal",       1, "A/B/C", MOVED_HERE},
+      {1, "X/B/C/D",     "normal",       1, "A/B/C/D", MOVED_HERE},
+      {1, "X/B/C/D/E",   "normal",       1, "A/B/C/D/E", MOVED_HERE},
+      {3, "X/B/C",       "normal",       1, "C", MOVED_HERE},
+      {3, "X/B/C/D",     "normal",       1, "C/D", MOVED_HERE},
+      {3, "X/B/C/D/E",   "normal",       1, "C/D/E", FALSE, "E2", TRUE},
+      {5, "X/B/C/D/E",   "base-deleted", NO_COPY_FROM, "E3"},
+      {1, "E2",          "normal",       1, "A/B/C/D/E", MOVED_HERE},
+      {1, "E3",          "normal",       1, "C/D/E", MOVED_HERE},
       {0}
     };
     SVN_ERR(check_db_rows(&b, "", nodes));
@@ -6076,29 +6088,39 @@ layered_moved_to(const svn_test_opts_t *
 
   SVN_ERR(sbox_wc_update(&b, "A", 2));
   SVN_ERR(sbox_wc_resolve(&b, "A", svn_wc_conflict_choose_mine_conflict));
-  SVN_ERR(sbox_wc_resolve(&b, "X/B", svn_wc_conflict_choose_merged));
-  SVN_ERR(sbox_wc_resolve(&b, "X/B/C", svn_wc_conflict_choose_mine_conflict));
+  SVN_ERR(sbox_wc_resolve(&b, "X/B/C", svn_wc_conflict_choose_merged));
+  SVN_ERR(sbox_wc_resolve(&b, "X/B/C/D/E",
+                          svn_wc_conflict_choose_mine_conflict));
   {
     nodes_row_t nodes[] = {
-      {0, "",        "normal",       1, ""},
-      {0, "A",       "normal",       2, "A"},
-      {0, "A/B",     "normal",       2, "A/B"},
-      {0, "A/B/C",   "normal",       2, "A/B/C"},
-      {0, "B",       "normal",       1, "B"},
-      {0, "B/C",     "normal",       1, "B/C"},
-      {1, "A",       "base-deleted", NO_COPY_FROM, "X"},
-      {1, "A/B",     "base-deleted", NO_COPY_FROM},
-      {1, "A/B/C",   "base-deleted", NO_COPY_FROM},
-      {1, "B",       "base-deleted", NO_COPY_FROM, "X/B"},
-      {1, "B/C",     "base-deleted", NO_COPY_FROM},
-      {1, "X",       "normal",       2, "A", MOVED_HERE},
-      {1, "X/B",     "normal",       2, "A/B", MOVED_HERE},
-      {1, "X/B/C",   "normal",       2, "A/B/C", MOVED_HERE},
-      {2, "X/B",     "normal",       1, "B", MOVED_HERE},
-      {2, "X/B/C",   "normal",       1, "B/C", FALSE, "C2", TRUE},
-      {3, "X/B/C",   "base-deleted", NO_COPY_FROM, "C3"},
-      {1, "C2",      "normal",       2, "A/B/C", MOVED_HERE},
-      {1, "C3",      "normal",       1, "B/C", MOVED_HERE},
+      {0, "",            "normal",       1, ""},
+      {0, "A",           "normal",       2, "A"},
+      {0, "A/B",         "normal",       2, "A/B"},
+      {0, "A/B/C",       "normal",       2, "A/B/C"},
+      {0, "A/B/C/D",     "normal",       2, "A/B/C/D"},
+      {0, "A/B/C/D/E",   "normal",       2, "A/B/C/D/E"},
+      {0, "C",           "normal",       1, "C"},
+      {0, "C/D",         "normal",       1, "C/D"},
+      {0, "C/D/E",       "normal",       1, "C/D/E"},
+      {1, "A",           "base-deleted", NO_COPY_FROM, "X"},
+      {1, "A/B",         "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C",       "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C/D",     "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C/D/E",   "base-deleted", NO_COPY_FROM},
+      {1, "C",           "base-deleted", NO_COPY_FROM, "X/B/C"},
+      {1, "C/D",         "base-deleted", NO_COPY_FROM},
+      {1, "C/D/E",       "base-deleted", NO_COPY_FROM},
+      {1, "X",           "normal",       2, "A", MOVED_HERE},
+      {1, "X/B",         "normal",       2, "A/B", MOVED_HERE},
+      {1, "X/B/C",       "normal",       2, "A/B/C", MOVED_HERE},
+      {1, "X/B/C/D",     "normal",       2, "A/B/C/D", MOVED_HERE},
+      {1, "X/B/C/D/E",   "normal",       2, "A/B/C/D/E", MOVED_HERE},
+      {3, "X/B/C",       "normal",       1, "C", MOVED_HERE},
+      {3, "X/B/C/D",     "normal",       1, "C/D", MOVED_HERE},
+      {3, "X/B/C/D/E",   "normal",       1, "C/D/E", FALSE, "E2", TRUE},
+      {5, "X/B/C/D/E",   "base-deleted", NO_COPY_FROM, "E3"},
+      {1, "E2",          "normal",       2, "A/B/C/D/E", MOVED_HERE},
+      {1, "E3",          "normal",       1, "C/D/E", MOVED_HERE},
       {0}
     };
     SVN_ERR(check_db_rows(&b, "", nodes));
@@ -6223,7 +6245,7 @@ struct svn_test_descriptor_t test_funcs[
                        "switch_move"),
     SVN_TEST_OPTS_PASS(move_replace,
                        "move_replace"),
-    SVN_TEST_OPTS_PASS(layered_moved_to,
+    SVN_TEST_OPTS_XFAIL(layered_moved_to,
                        "layered_moved_to"),
     SVN_TEST_NULL
   };



Re: svn commit: r1442177 - /subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c

Posted by Stefan Sperling <st...@elego.de>.
On Mon, Feb 04, 2013 at 05:23:52PM +0000, Philip Martin wrote:
> The test reaches a state with a delete-edit tree-conflict on X/B/C as a
> result of the update following some of the moves.  This conflict has to
> be resolved to state 'working' which will remove the tree-conflict on
> X/B/C and raise a move-edit tree-conflict on X/B/C/D/E.  Resolving that
> new move-edit tree-conflict to state 'mine-conflict' will update E2 and
> allow the test to pass.  However when the resolver is invoked on X/B/C
> it automatically proceeds to resolve the new tree-conflict on X/B/C/D/E
> and that causes the test to fail.
> 
> Having the resolver raise new tree-conflicts is new behaviour.  Having
> the resolver code use the status walker is also new behaviour.  To make
> this work I need the resolver to avoid resolving the newly raised
> tree-conflict but I'm not sure how best to do this.  Sometimes resolving
> newly raised tree-conflicts is helpful to the user.

As far as I can see the only problem here is that you'd like to resolve
the conflict on 'X/B/C' to 'choose merged', but because the test ends
up passing depth infinity to svn_wc__resolve_conflicts() it also
resolves 'X/B/C/D/E' to 'choose_merged', while you want to resolve
that node to 'mine_conflict' instead.

I haven't tried, but you could probably change the test to pass a
depth != infinity to svn_wc__resolve_conflicts() when resolving
on 'X/B/C'. Would that help?

Re: svn commit: r1442177 - /subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c

Posted by Philip Martin <ph...@wandisco.com>.
philip@apache.org writes:

> Author: philip
> Date: Mon Feb  4 17:00:16 2013
> New Revision: 1442177
>
> URL: http://svn.apache.org/viewvc?rev=1442177&view=rev
> Log:
> Layered moved-to doesn't work yet.
>
> * subversion/tests/libsvn_wc/op-depth-test.c
>   (layered_moved_to): Extend.
>   (test_funcs): Mark layered_moved_to XFAIL.

This test starts with A/B/C/D/E, several moves result in E moved to E2
and then a parent of E gets replaced producing a new E that gets moved
to E3.  An update of A then has to follow the moves to update E2.  This
test currently fails due to the way the conflict resolver works.

The test reaches a state with a delete-edit tree-conflict on X/B/C as a
result of the update following some of the moves.  This conflict has to
be resolved to state 'working' which will remove the tree-conflict on
X/B/C and raise a move-edit tree-conflict on X/B/C/D/E.  Resolving that
new move-edit tree-conflict to state 'mine-conflict' will update E2 and
allow the test to pass.  However when the resolver is invoked on X/B/C
it automatically proceeds to resolve the new tree-conflict on X/B/C/D/E
and that causes the test to fail.

Having the resolver raise new tree-conflicts is new behaviour.  Having
the resolver code use the status walker is also new behaviour.  To make
this work I need the resolver to avoid resolving the newly raised
tree-conflict but I'm not sure how best to do this.  Sometimes resolving
newly raised tree-conflicts is helpful to the user.

-- 
Certified & Supported Apache Subversion Downloads:
http://www.wandisco.com/subversion/download