20
from bzrlib.tests import TestCaseInTempDir
21
20
from bzrlib.branch import Branch
21
from bzrlib.errors import NoSuchRevision
22
22
from bzrlib.commit import commit
23
23
from bzrlib.fetch import fetch
24
24
from bzrlib.revision import (find_present_ancestors, combined_graph,
25
25
is_ancestor, MultipleRevisionSources)
26
from bzrlib.tests import TestCaseWithTransport
26
27
from bzrlib.trace import mutter
27
from bzrlib.errors import NoSuchRevision
28
from bzrlib.workingtree import WorkingTree
29
30
# XXX: Make this a method of a merge base case
30
31
def make_branches(self):
48
49
so A is missing b6 at the start
49
50
and B is missing a3, a4, a5
52
br1 = Branch.initialize("branch1")
52
tree1 = self.make_branch_and_tree("branch1")
54
commit(br1, "Commit one", rev_id="a@u-0-0")
55
commit(br1, "Commit two", rev_id="a@u-0-1")
56
commit(br1, "Commit three", rev_id="a@u-0-2")
55
tree1.commit("Commit one", rev_id="a@u-0-0")
56
tree1.commit("Commit two", rev_id="a@u-0-1")
57
tree1.commit("Commit three", rev_id="a@u-0-2")
59
br2 = Branch.initialize("branch2")
59
tree2 = self.make_branch_and_tree("branch2")
60
61
br2.update_revisions(br1)
61
commit(br2, "Commit four", rev_id="b@u-0-3")
62
commit(br2, "Commit five", rev_id="b@u-0-4")
62
tree2.commit("Commit four", rev_id="b@u-0-3")
63
tree2.commit("Commit five", rev_id="b@u-0-4")
63
64
revisions_2 = br2.revision_history()
65
66
fetch(from_branch=br2, to_branch=br1)
66
br1.working_tree().add_pending_merge(revisions_2[4])
67
tree1.add_pending_merge(revisions_2[4])
67
68
self.assertEquals(revisions_2[4], 'b@u-0-4')
68
commit(br1, "Commit six", rev_id="a@u-0-3")
69
commit(br1, "Commit seven", rev_id="a@u-0-4")
70
commit(br2, "Commit eight", rev_id="b@u-0-5")
69
tree1.commit("Commit six", rev_id="a@u-0-3")
70
tree1.commit("Commit seven", rev_id="a@u-0-4")
71
tree2.commit("Commit eight", rev_id="b@u-0-5")
72
73
fetch(from_branch=br2, to_branch=br1)
73
br1.working_tree().add_pending_merge(br2.revision_history()[5])
74
commit(br1, "Commit nine", rev_id="a@u-0-5")
74
tree1.add_pending_merge(br2.revision_history()[5])
75
tree1.commit("Commit nine", rev_id="a@u-0-5")
75
76
# DO NOT FETCH HERE - we WANT a GHOST.
76
77
#fetch(from_branch=br1, to_branch=br2)
77
br2.working_tree().add_pending_merge(br1.revision_history()[4])
78
commit(br2, "Commit ten - ghost merge", rev_id="b@u-0-6")
78
tree2.add_pending_merge(br1.revision_history()[4])
79
tree2.commit("Commit ten - ghost merge", rev_id="b@u-0-6")
83
class TestIsAncestor(TestCaseInTempDir):
84
class TestIsAncestor(TestCaseWithTransport):
84
86
def test_recorded_ancestry(self):
85
87
"""Test that commit records all ancestors"""
86
88
br1, br2 = make_branches(self)
112
114
if rev_id in br2_only and not branch is br2:
114
116
mutter('ancestry of {%s}: %r',
115
rev_id, branch.get_ancestry(rev_id))
116
self.assertEquals(sorted(branch.get_ancestry(rev_id)),
117
[None] + sorted(anc))
117
rev_id, branch.repository.get_ancestry(rev_id))
118
result = sorted(branch.repository.get_ancestry(rev_id))
119
self.assertEquals(result, [None] + sorted(anc))
120
122
def test_is_ancestor(self):
137
139
## self.assert_(not is_ancestor(revisions[3], revisions_2[3], br1))
140
class TestIntermediateRevisions(TestCaseInTempDir):
142
class TestIntermediateRevisions(TestCaseWithTransport):
143
145
from bzrlib.commit import commit
144
TestCaseInTempDir.setUp(self)
146
TestCaseWithTransport.setUp(self)
145
147
self.br1, self.br2 = make_branches(self)
147
self.br2.working_tree().commit("Commit eleven", rev_id="b@u-0-7")
148
self.br2.working_tree().commit("Commit twelve", rev_id="b@u-0-8")
149
self.br2.working_tree().commit("Commit thirtteen", rev_id="b@u-0-9")
148
wt1 = self.br1.bzrdir.open_workingtree()
149
wt2 = self.br2.bzrdir.open_workingtree()
150
wt2.commit("Commit eleven", rev_id="b@u-0-7")
151
wt2.commit("Commit twelve", rev_id="b@u-0-8")
152
wt2.commit("Commit thirtteen", rev_id="b@u-0-9")
151
154
fetch(from_branch=self.br2, to_branch=self.br1)
152
self.br1.working_tree().add_pending_merge(self.br2.revision_history()[6])
153
self.br1.working_tree().commit("Commit fourtten", rev_id="a@u-0-6")
155
wt1.add_pending_merge(self.br2.revision_history()[6])
156
wt1.commit("Commit fourtten", rev_id="a@u-0-6")
155
158
fetch(from_branch=self.br1, to_branch=self.br2)
156
self.br2.working_tree().add_pending_merge(self.br1.revision_history()[6])
157
self.br2.working_tree().commit("Commit fifteen", rev_id="b@u-0-10")
159
wt2.add_pending_merge(self.br1.revision_history()[6])
160
wt2.commit("Commit fifteen", rev_id="b@u-0-10")
159
162
from bzrlib.revision import MultipleRevisionSources
160
self.sources = MultipleRevisionSources(self.br1, self.br2)
163
self.sources = MultipleRevisionSources(self.br1.repository,
162
166
def intervene(self, ancestor, revision, revision_history=None):
163
167
from bzrlib.revision import get_intervening_revisions
288
292
Ensure it's not order-sensitive
290
294
br1, br2 = make_branches(self)
291
source = MultipleRevisionSources(br1, br2)
295
source = MultipleRevisionSources(br1.repository, br2.repository)
292
296
combined_1 = combined_graph(br1.last_revision(),
293
297
br2.last_revision(), source)
294
298
combined_2 = combined_graph(br2.last_revision(),
297
301
self.assertEquals(combined_1[2], combined_2[2])
298
302
self.assertEquals(combined_1[3], combined_2[3])
299
303
self.assertEquals(combined_1, combined_2)
305
def test_get_history(self):
306
# TODO: test ghosts on the left hand branch's impact
307
# TODO: test ghosts on all parents, we should get some
308
# indicator. i.e. NULL_REVISION
310
tree = self.make_branch_and_tree('.')
311
tree.commit('1', rev_id = '1', allow_pointless=True)
312
tree.commit('2', rev_id = '2', allow_pointless=True)
313
tree.commit('3', rev_id = '3', allow_pointless=True)
314
rev = tree.branch.repository.get_revision('1')
315
history = rev.get_history(tree.branch.repository)
316
self.assertEqual([None, '1'], history)
317
rev = tree.branch.repository.get_revision('2')
318
history = rev.get_history(tree.branch.repository)
319
self.assertEqual([None, '1', '2'], history)
320
rev = tree.branch.repository.get_revision('3')
321
history = rev.get_history(tree.branch.repository)
322
self.assertEqual([None, '1', '2' ,'3'], history)