24
24
os.mkdir("branch1")
25
25
br1 = Branch("branch1", init=True)
26
commit(br1, "Commit one")
27
commit(br1, "Commit two")
28
commit(br1, "Commit three")
27
commit(br1, "Commit one", rev_id="a@u-0-0")
28
commit(br1, "Commit two", rev_id="a@u-0-1")
29
commit(br1, "Commit three", rev_id="a@u-0-2")
30
31
os.mkdir("branch2")
31
32
br2 = Branch("branch2", init=True)
32
33
br2.update_revisions(br1)
33
commit(br2, "Commit four")
34
commit(br2, "Commit five")
34
commit(br2, "Commit four", rev_id="b@u-0-3")
35
commit(br2, "Commit five", rev_id="b@u-0-4")
35
36
revisions_2 = br2.revision_history()
36
37
br1.add_pending_merge(revisions_2[4])
37
commit(br1, "Commit six")
38
commit(br1, "Commit six", rev_id="a@u-0-3")
39
commit(br1, "Commit seven", rev_id="a@u-0-4")
40
commit(br2, "Commit eight", rev_id="b@u-0-5")
41
br1.add_pending_merge(br2.revision_history()[5])
42
commit(br1, "Commit nine", rev_id="a@u-0-5")
43
br2.add_pending_merge(br1.revision_history()[4])
44
commit(br2, "Commit ten", rev_id="b@u-0-6")
41
class TestIsAncestor(InTempDir):
42
"""Test checking whether a revision is an ancestor of another revision"""
48
class TestIsAncestor(TestCaseInTempDir):
49
def test_is_ancestor(self):
50
"""Test checking whether a revision is an ancestor of another revision"""
44
51
from bzrlib.revision import is_ancestor, MultipleRevisionSources
45
52
from bzrlib.errors import NoSuchRevision
46
53
br1, br2 = make_branches()
59
66
assert is_ancestor(revisions[3], revisions_2[3], sources)
60
67
assert not is_ancestor(revisions[3], revisions_2[3], br1)
69
class TestIntermediateRevisions(TestCaseInTempDir):
72
from bzrlib.commit import commit
73
TestCaseInTempDir.setUp(self)
74
self.br1, self.br2 = make_branches()
75
commit(self.br2, "Commit eleven", rev_id="b@u-0-7")
76
commit(self.br2, "Commit twelve", rev_id="b@u-0-8")
77
commit(self.br2, "Commit thirtteen", rev_id="b@u-0-9")
78
self.br1.add_pending_merge(self.br2.revision_history()[6])
79
commit(self.br1, "Commit fourtten", rev_id="a@u-0-6")
80
self.br2.add_pending_merge(self.br1.revision_history()[6])
81
commit(self.br2, "Commit fifteen", rev_id="b@u-0-10")
83
from bzrlib.revision import MultipleRevisionSources
84
self.sources = MultipleRevisionSources(self.br1, self.br2)
86
def intervene(self, ancestor, revision, revision_history=None):
87
from bzrlib.revision import get_intervening_revisions
88
return get_intervening_revisions(ancestor,revision, self.sources,
91
def test_intervene(self):
92
"""Find intermediate revisions, without requiring history"""
93
from bzrlib.errors import NotAncestor, NoSuchRevision
94
assert len(self.intervene('a@u-0-0', 'a@u-0-0')) == 0
95
self.assertEqual(self.intervene('a@u-0-0', 'a@u-0-1'), ['a@u-0-1'])
96
self.assertEqual(self.intervene('a@u-0-0', 'a@u-0-2'),
97
['a@u-0-1', 'a@u-0-2'])
98
self.assertEqual(self.intervene('a@u-0-0', 'b@u-0-3'),
99
['a@u-0-1', 'a@u-0-2', 'b@u-0-3'])
100
self.assertEqual(self.intervene('b@u-0-3', 'a@u-0-3'),
101
['b@u-0-4', 'a@u-0-3'])
102
self.assertEqual(self.intervene('a@u-0-2', 'a@u-0-3',
103
self.br1.revision_history()),
105
self.assertEqual(self.intervene('a@u-0-0', 'a@u-0-5',
106
self.br1.revision_history()),
107
['a@u-0-1', 'a@u-0-2', 'a@u-0-3', 'a@u-0-4',
109
self.assertEqual(self.intervene('a@u-0-0', 'b@u-0-6',
110
self.br1.revision_history()),
111
['a@u-0-1', 'a@u-0-2', 'a@u-0-3', 'a@u-0-4',
113
self.assertEqual(self.intervene('a@u-0-0', 'b@u-0-5'),
114
['a@u-0-1', 'a@u-0-2', 'b@u-0-3', 'b@u-0-4',
116
self.assertEqual(self.intervene('b@u-0-3', 'b@u-0-6',
117
self.br2.revision_history()),
118
['b@u-0-4', 'b@u-0-5', 'b@u-0-6'])
119
self.assertEqual(self.intervene('b@u-0-6', 'b@u-0-10'),
120
['b@u-0-7', 'b@u-0-8', 'b@u-0-9', 'b@u-0-10'])
121
self.assertEqual(self.intervene('b@u-0-6', 'b@u-0-10',
122
self.br2.revision_history()),
123
['b@u-0-7', 'b@u-0-8', 'b@u-0-9', 'b@u-0-10'])
124
self.assertRaises(NotAncestor, self.intervene, 'b@u-0-10', 'b@u-0-6',
125
self.br2.revision_history())
126
self.assertRaises(NoSuchRevision, self.intervene, 'c@u-0-10',
127
'b@u-0-6', self.br2.revision_history())
128
self.assertRaises(NoSuchRevision, self.intervene, 'b@u-0-10',
129
'c@u-0-6', self.br2.revision_history())
132
class TestCommonAncestor(TestCaseInTempDir):
133
"""Test checking whether a revision is an ancestor of another revision"""
135
def test_common_ancestor(self):
136
from bzrlib.revision import find_present_ancestors, common_ancestor
137
from bzrlib.revision import MultipleRevisionSources
138
br1, br2 = make_branches()
139
revisions = br1.revision_history()
140
revisions_2 = br2.revision_history()
141
sources = MultipleRevisionSources(br1, br2)
143
expected_ancestors_list = {revisions[3]:(0, 0),
145
revisions_2[4]:(2, 1),
147
revisions_2[3]:(4, 2),
148
revisions[0]:(5, 3) }
149
ancestors_list = find_present_ancestors(revisions[3], sources)
150
assert len(expected_ancestors_list) == len(ancestors_list)
151
for key, value in expected_ancestors_list.iteritems():
152
self.assertEqual(ancestors_list[key], value,
153
"key %r, %r != %r" % (key, ancestors_list[key],
156
self.assertEqual(common_ancestor(revisions[0], revisions[0], sources),
158
self.assertEqual(common_ancestor(revisions[1], revisions[2], sources),
160
self.assertEqual(common_ancestor(revisions[1], revisions[1], sources),
162
self.assertEqual(common_ancestor(revisions[2], revisions_2[4], sources),
164
self.assertEqual(common_ancestor(revisions[3], revisions_2[4], sources),
166
self.assertEqual(common_ancestor(revisions[4], revisions_2[5], sources),
168
self.assertEqual(common_ancestor(revisions[5], revisions_2[6], sources),
170
self.assertEqual(common_ancestor(revisions_2[6], revisions[5], sources),
173
class TestCreateSignedRevision(TestCaseInTempDir):
175
def test_create_signed_revision(self):
177
# create a revision, sign it, apply to the store.
180
class TestOperators(TestCase):
182
def test___eq__(self):
183
from bzrlib.revision import Revision, RevisionReference
184
revision1 = Revision("invid", "sha", "revid", 100, "boo", "john", [])
185
revision2 = Revision("invid", "sha", "revid", 100, "boo", "john", [])
186
revision3 = Revision("invid", "sha", "rev2id", 100, "bp", "john",
187
[RevisionReference("revid")])
188
self.assertEqual(revision1, revision1)
189
self.assertEqual(revision1, revision2)
190
self.assertNotEqual(revision1, revision3)
191
self.assertEqual(revision2, revision1)
192
self.assertEqual(revision2, revision2)
193
self.assertNotEqual(revision2, revision3)
194
self.assertNotEqual(revision3, revision1)
195
self.assertNotEqual(revision3, revision2)
196
self.assertEqual(revision3, revision3)
198
def test__eq__reference(self):
199
from bzrlib.revision import Revision, RevisionReference
200
ref1 = RevisionReference('revid', '1'*40)
201
ref2 = RevisionReference('revid', '1'*40)
202
ref3 = RevisionReference('revid', '2'*40)
203
ref4 = RevisionReference('revid2', '3'*40)
204
self.assertEqual(ref1, ref1)
205
self.assertEqual(ref1, ref2)
206
self.assertNotEqual(ref1, ref3)
207
self.assertNotEqual(ref1, ref4)
208
self.assertEqual(ref2, ref1)
209
self.assertEqual(ref2, ref2)
210
self.assertNotEqual(ref2, ref3)
211
self.assertNotEqual(ref2, ref4)
212
self.assertNotEqual(ref3, ref1)
213
self.assertNotEqual(ref3, ref2)
214
self.assertEqual(ref3, ref3)
215
self.assertNotEqual(ref3, ref4)
216
self.assertNotEqual(ref4, ref1)
217
self.assertNotEqual(ref4, ref2)
218
self.assertNotEqual(ref4, ref3)
219
self.assertEqual(ref4, ref4)