summaryrefslogtreecommitdiff
path: root/tests/test_version_traversal.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_version_traversal.py')
-rw-r--r--tests/test_version_traversal.py181
1 files changed, 167 insertions, 14 deletions
diff --git a/tests/test_version_traversal.py b/tests/test_version_traversal.py
index 8fcf8e9..77aa516 100644
--- a/tests/test_version_traversal.py
+++ b/tests/test_version_traversal.py
@@ -206,11 +206,12 @@ class BranchedPathTest(MigrationTest):
a, b, c1, d1, c2, d2 = (
self.a, self.b, self.c1, self.d1, self.c2, self.d2
)
+ heads = [self.d1.revision, self.c2.revision]
revs = self.env._stamp_revs(
- self.b.revision, [self.d1.revision, self.c2.revision])
+ self.b.revision, heads)
eq_(len(revs), 1)
eq_(
- revs[0].merge_branch_idents,
+ revs[0].merge_branch_idents(heads),
# DELETE d1 revision, UPDATE c2 to b
([self.d1.revision], self.c2.revision, self.b.revision)
)
@@ -229,11 +230,12 @@ class BranchedPathTest(MigrationTest):
a, b, c1, d1, c2, d2 = (
self.a, self.b, self.c1, self.d1, self.c2, self.d2
)
+ heads = [self.d1.revision, self.c2.revision]
revs = self.env._stamp_revs(
- "c2branch@head", [self.d1.revision, self.c2.revision])
+ "c2branch@head", heads)
eq_(len(revs), 1)
eq_(
- revs[0].merge_branch_idents,
+ revs[0].merge_branch_idents(heads),
# the c1branch remains unchanged
([], self.c2.revision, self.d2.revision)
)
@@ -274,6 +276,153 @@ class BranchedPathTest(MigrationTest):
)
+class BranchFromMergepointTest(MigrationTest):
+ """this is a form that will come up frequently in the
+ "many independent roots with cross-dependencies" case.
+
+ """
+
+ @classmethod
+ def setup_class(cls):
+ cls.env = env = staging_env()
+ cls.a1 = env.generate_revision(util.rev_id(), '->a1', refresh=True)
+ cls.b1 = env.generate_revision(util.rev_id(), 'a1->b1', refresh=True)
+ cls.c1 = env.generate_revision(util.rev_id(), 'b1->c1', refresh=True)
+
+ cls.a2 = env.generate_revision(
+ util.rev_id(), '->a2', head=(),
+ refresh=True)
+ cls.b2 = env.generate_revision(
+ util.rev_id(), 'a2->b2', head=cls.a2.revision, refresh=True)
+ cls.c2 = env.generate_revision(
+ util.rev_id(), 'b2->c2', head=cls.b2.revision, refresh=True)
+
+ # mergepoint between c1, c2
+ # d1 dependent on c2
+ cls.d1 = env.generate_revision(
+ util.rev_id(), 'd1', head=(cls.c1.revision, cls.c2.revision),
+ refresh=True)
+
+ # but then c2 keeps going into d2
+ cls.d2 = env.generate_revision(
+ util.rev_id(), 'd2', head=cls.c2.revision,
+ refresh=True, splice=True)
+
+ def test_mergepoint_to_only_one_side_upgrade(self):
+ a1, b1, c1, a2, b2, c2, d1, d2 = (
+ self.a1, self.b1, self.c1, self.a2, self.b2, self.c2,
+ self.d1, self.d2
+ )
+
+ self._assert_upgrade(
+ d1.revision, (d2.revision, b1.revision),
+ [self.up_(c1), self.up_(d1)],
+ set([d2.revision, d1.revision])
+ )
+
+ def test_mergepoint_to_only_one_side_downgrade(self):
+ a1, b1, c1, a2, b2, c2, d1, d2 = (
+ self.a1, self.b1, self.c1, self.a2, self.b2, self.c2,
+ self.d1, self.d2
+ )
+
+ self._assert_downgrade(
+ b1.revision, (d2.revision, d1.revision),
+ [self.down_(d1), self.down_(c1)],
+ set([d2.revision, b1.revision])
+ )
+
+class BranchFrom3WayMergepointTest(MigrationTest):
+ """this is a form that will come up frequently in the
+ "many independent roots with cross-dependencies" case.
+
+ """
+
+ @classmethod
+ def setup_class(cls):
+ cls.env = env = staging_env()
+ cls.a1 = env.generate_revision(util.rev_id(), '->a1', refresh=True)
+ cls.b1 = env.generate_revision(util.rev_id(), 'a1->b1', refresh=True)
+ cls.c1 = env.generate_revision(util.rev_id(), 'b1->c1', refresh=True)
+
+ cls.a2 = env.generate_revision(
+ util.rev_id(), '->a2', head=(),
+ refresh=True)
+ cls.b2 = env.generate_revision(
+ util.rev_id(), 'a2->b2', head=cls.a2.revision, refresh=True)
+ cls.c2 = env.generate_revision(
+ util.rev_id(), 'b2->c2', head=cls.b2.revision, refresh=True)
+
+ cls.a3 = env.generate_revision(
+ util.rev_id(), '->a3', head=(),
+ refresh=True)
+ cls.b3 = env.generate_revision(
+ util.rev_id(), 'a3->b3', head=cls.a3.revision, refresh=True)
+ cls.c3 = env.generate_revision(
+ util.rev_id(), 'b3->c3', head=cls.b3.revision, refresh=True)
+
+ # mergepoint between c1, c2, c3
+ # d1 dependent on c2, c3
+ cls.d1 = env.generate_revision(
+ util.rev_id(), 'd1', head=(
+ cls.c1.revision, cls.c2.revision, cls.c3.revision),
+ refresh=True)
+
+ # but then c2 keeps going into d2
+ cls.d2 = env.generate_revision(
+ util.rev_id(), 'd2', head=cls.c2.revision,
+ refresh=True, splice=True)
+
+ # c3 keeps going into d3
+ cls.d3 = env.generate_revision(
+ util.rev_id(), 'd3', head=cls.c3.revision,
+ refresh=True, splice=True)
+
+ def test_mergepoint_to_only_one_side_upgrade(self):
+ a1, b1, c1, a2, b2, c2, d1, d2, a3, b3, c3, d3 = (
+ self.a1, self.b1, self.c1, self.a2, self.b2, self.c2,
+ self.d1, self.d2, self.a3, self.b3, self.c3, self.d3
+ )
+
+ self._assert_upgrade(
+ d1.revision, (d3.revision, d2.revision, b1.revision),
+ [self.up_(c1), self.up_(d1)],
+ set([d3.revision, d2.revision, d1.revision])
+ )
+
+ def test_mergepoint_to_only_one_side_downgrade(self):
+ a1, b1, c1, a2, b2, c2, d1, d2, a3, b3, c3, d3 = (
+ self.a1, self.b1, self.c1, self.a2, self.b2, self.c2,
+ self.d1, self.d2, self.a3, self.b3, self.c3, self.d3
+ )
+
+ self._assert_downgrade(
+ b1.revision, (d3.revision, d2.revision, d1.revision),
+ [self.down_(d1), self.down_(c1)],
+ set([d3.revision, d2.revision, b1.revision])
+ )
+
+ def test_mergepoint_to_two_sides_upgrade(self):
+ a1, b1, c1, a2, b2, c2, d1, d2, a3, b3, c3, d3 = (
+ self.a1, self.b1, self.c1, self.a2, self.b2, self.c2,
+ self.d1, self.d2, self.a3, self.b3, self.c3, self.d3
+ )
+
+ self._assert_upgrade(
+ d1.revision, (d3.revision, b2.revision, b1.revision),
+ [self.up_(c2), self.up_(c1), self.up_(d1)],
+ # this will merge b2 and b1 into d1
+ set([d3.revision, d1.revision])
+ )
+
+ # but then! b2 will break out again if we keep going with it
+ self._assert_upgrade(
+ d2.revision, (d3.revision, d1.revision),
+ [self.up_(d2)],
+ set([d3.revision, d2.revision, d1.revision])
+ )
+
+
class ForestTest(MigrationTest):
@classmethod
def setup_class(cls):
@@ -334,10 +483,11 @@ class MergedPathTest(MigrationTest):
self.a, self.b, self.c1, self.d1, self.c2, self.d2,
self.e, self.f
)
- revs = self.env._stamp_revs(self.c2.revision, [self.e.revision])
+ heads = [self.e.revision]
+ revs = self.env._stamp_revs(self.c2.revision, heads)
eq_(len(revs), 1)
eq_(
- revs[0].merge_branch_idents,
+ revs[0].merge_branch_idents(heads),
# no deletes, UPDATE e to c2
([], self.e.revision, self.c2.revision)
)
@@ -347,10 +497,11 @@ class MergedPathTest(MigrationTest):
self.a, self.b, self.c1, self.d1, self.c2, self.d2,
self.e, self.f
)
- revs = self.env._stamp_revs(self.a.revision, [self.e.revision])
+ heads = [self.e.revision]
+ revs = self.env._stamp_revs(self.a.revision, heads)
eq_(len(revs), 1)
eq_(
- revs[0].merge_branch_idents,
+ revs[0].merge_branch_idents(heads),
# no deletes, UPDATE e to c2
([], self.e.revision, self.a.revision)
)
@@ -363,7 +514,7 @@ class MergedPathTest(MigrationTest):
revs = self.env._stamp_revs(self.e.revision, [self.c2.revision])
eq_(len(revs), 1)
eq_(
- revs[0].merge_branch_idents,
+ revs[0].merge_branch_idents([self.c2.revision]),
# no deletes, UPDATE e to c2
([], self.c2.revision, self.e.revision)
)
@@ -380,7 +531,7 @@ class MergedPathTest(MigrationTest):
"c2branch@head", [self.d1.revision, self.c2.revision])
eq_(len(revs), 1)
eq_(
- revs[0].merge_branch_idents,
+ revs[0].merge_branch_idents([self.d1.revision, self.c2.revision]),
# DELETE d1 revision, UPDATE c2 to e
([self.d1.revision], self.c2.revision, self.f.revision)
)
@@ -390,11 +541,12 @@ class MergedPathTest(MigrationTest):
self.a, self.b, self.c1, self.d1, self.c2, self.d2,
self.e, self.f
)
+ heads = [self.d1.revision, self.c2.revision]
revs = self.env._stamp_revs(
- self.e.revision, [self.d1.revision, self.c2.revision])
+ self.e.revision, heads)
eq_(len(revs), 1)
eq_(
- revs[0].merge_branch_idents,
+ revs[0].merge_branch_idents(heads),
# DELETE d1 revision, UPDATE c2 to e
([self.d1.revision], self.c2.revision, self.e.revision)
)
@@ -404,10 +556,11 @@ class MergedPathTest(MigrationTest):
self.a, self.b, self.c1, self.d1, self.c2, self.d2,
self.e, self.f
)
- revs = self.env._stamp_revs(self.e.revision, [self.b.revision])
+ heads = [self.b.revision]
+ revs = self.env._stamp_revs(self.e.revision, heads)
eq_(len(revs), 1)
eq_(
- revs[0].merge_branch_idents,
+ revs[0].merge_branch_idents(heads),
# no deletes, UPDATE e to c2
([], self.b.revision, self.e.revision)
)