21
24
from bzrlib.branch import Branch
22
25
from bzrlib.errors import NoSuchRevision
23
from bzrlib.graph import Graph
26
from bzrlib.deprecated_graph import Graph
24
27
from bzrlib.revision import (find_present_ancestors, combined_graph,
26
29
is_ancestor, MultipleRevisionSources,
28
from bzrlib.tests import TestCaseWithTransport
31
from bzrlib.symbol_versioning import zero_ninetythree
32
from bzrlib.tests import TestCase, TestCaseWithTransport
29
33
from bzrlib.trace import mutter
30
34
from bzrlib.workingtree import WorkingTree
67
71
tree2.commit("Commit four", rev_id="b@u-0-3")
68
72
tree2.commit("Commit five", rev_id="b@u-0-4")
69
73
revisions_2 = br2.revision_history()
74
self.assertEquals(revisions_2[-1], 'b@u-0-4')
72
tree1.add_pending_merge(revisions_2[4])
73
self.assertEquals(revisions_2[4], 'b@u-0-4')
76
tree1.merge_from_branch(br2)
74
77
tree1.commit("Commit six", rev_id="a@u-0-3")
75
78
tree1.commit("Commit seven", rev_id="a@u-0-4")
76
79
tree2.commit("Commit eight", rev_id="b@u-0-5")
80
self.assertEquals(br2.revision_history()[-1], 'b@u-0-5')
79
tree1.add_pending_merge(br2.revision_history()[5])
82
tree1.merge_from_branch(br2)
80
83
tree1.commit("Commit nine", rev_id="a@u-0-5")
81
# DO NOT FETCH HERE - we WANT a GHOST.
83
tree2.add_pending_merge(br1.revision_history()[4])
84
# DO NOT MERGE HERE - we WANT a GHOST.
85
tree2.add_parent_tree_id(br1.revision_history()[4])
84
86
tree2.commit("Commit ten - ghost merge", rev_id="b@u-0-6")
131
133
revisions_2 = br2.revision_history()
134
self.assert_(is_ancestor(revisions[0], revisions[0], br1))
135
self.assert_(is_ancestor(revisions[1], revisions[0], sources))
136
self.assert_(not is_ancestor(revisions[0], revisions[1], sources))
137
self.assert_(is_ancestor(revisions_2[3], revisions[0], sources))
137
self.addCleanup(br1.unlock)
139
self.addCleanup(br2.unlock)
141
self.assertTrue(self.applyDeprecated(zero_ninetythree,
142
is_ancestor, revisions[0], revisions[0], br1))
143
self.assertTrue(self.applyDeprecated(zero_ninetythree,
144
is_ancestor, revisions[1], revisions[0], sources))
145
self.assertFalse(self.applyDeprecated(zero_ninetythree,
146
is_ancestor, revisions[0], revisions[1], sources))
147
self.assertTrue(self.applyDeprecated(zero_ninetythree,
148
is_ancestor, revisions_2[3], revisions[0], sources))
138
149
# disabled mbp 20050914, doesn't seem to happen anymore
139
150
## self.assertRaises(NoSuchRevision, is_ancestor, revisions_2[3],
140
151
## revisions[0], br1)
141
self.assert_(is_ancestor(revisions[3], revisions_2[4], sources))
142
self.assert_(is_ancestor(revisions[3], revisions_2[4], br1))
143
self.assert_(is_ancestor(revisions[3], revisions_2[3], sources))
152
self.assertTrue(self.applyDeprecated(zero_ninetythree,
153
is_ancestor, revisions[3], revisions_2[4], sources))
154
self.assertTrue(self.applyDeprecated(zero_ninetythree,
155
is_ancestor, revisions[3], revisions_2[4], br1))
156
self.assertTrue(self.applyDeprecated(zero_ninetythree,
157
is_ancestor, revisions[3], revisions_2[3], sources))
144
158
## self.assert_(not is_ancestor(revisions[3], revisions_2[3], br1))
155
169
wt2.commit("Commit twelve", rev_id="b@u-0-8")
156
170
wt2.commit("Commit thirtteen", rev_id="b@u-0-9")
158
self.br1.fetch(self.br2)
159
wt1.add_pending_merge(self.br2.revision_history()[6])
172
wt1.merge_from_branch(self.br2)
160
173
wt1.commit("Commit fourtten", rev_id="a@u-0-6")
162
self.br2.fetch(self.br1)
163
wt2.add_pending_merge(self.br1.revision_history()[6])
175
wt2.merge_from_branch(self.br1)
164
176
wt2.commit("Commit fifteen", rev_id="b@u-0-10")
166
178
from bzrlib.revision import MultipleRevisionSources
236
248
br1, br2 = make_branches(self)
237
249
source = MultipleRevisionSources(br1.repository, br2.repository)
238
combined_1 = combined_graph(br1.last_revision(),
250
combined_1 = combined_graph(br1.last_revision(),
239
251
br2.last_revision(), source)
240
252
combined_2 = combined_graph(br2.last_revision(),
241
253
br1.last_revision(), source)
288
300
# in repo 2, which has A, the revision_graph()
289
301
# should return A and B both.
290
302
tree_1 = self.make_branch_and_tree('1')
291
tree_1.add_pending_merge('A')
303
tree_1.set_parent_ids(['A'], allow_leftmost_as_ghost=True)
292
304
tree_1.commit('foo', rev_id='B', allow_pointless=True)
293
305
tree_2 = self.make_branch_and_tree('2')
294
306
tree_2.commit('bar', rev_id='A', allow_pointless=True)
299
311
source.get_revision_graph('B'))
301
class TestRevisionAttributes(TestCaseWithTransport):
302
"""Test that revision attributes are correct."""
304
def test_revision_accessors(self):
305
"""Make sure the values that come out of a revision are the same as the ones that go in.
307
tree1 = self.make_branch_and_tree("br1")
310
tree1.commit(message="quux", allow_pointless=True, committer="jaq")
311
assert len(tree1.branch.revision_history()) > 0
312
rev_a = tree1.branch.repository.get_revision(tree1.branch.last_revision())
314
tree2 = self.make_branch_and_tree("br2")
315
tree2.commit(message=rev_a.message,
316
timestamp=rev_a.timestamp,
317
timezone=rev_a.timezone,
318
committer=rev_a.committer,
319
rev_id=rev_a.revision_id,
320
allow_pointless=True, # there's nothing in this commit
323
rev_b = tree2.branch.repository.get_revision(tree2.branch.last_revision())
325
self.assertEqual(rev_a.message, rev_b.message)
326
self.assertEqual(rev_a.timestamp, rev_b.timestamp)
327
self.assertEqual(rev_a.timezone, rev_b.timezone)
328
self.assertEqual(rev_a.committer, rev_b.committer)
329
self.assertEqual(rev_a.revision_id, rev_b.revision_id)
314
class TestReservedId(TestCase):
316
def test_is_reserved_id(self):
317
self.assertEqual(True, revision.is_reserved_id(NULL_REVISION))
318
self.assertEqual(True, revision.is_reserved_id(
319
revision.CURRENT_REVISION))
320
self.assertEqual(True, revision.is_reserved_id('arch:'))
321
self.assertEqual(False, revision.is_reserved_id('null'))
322
self.assertEqual(False, revision.is_reserved_id(
323
'arch:a@example.com/c--b--v--r'))
324
self.assertEqual(False, revision.is_reserved_id(None))
327
class TestRevisionMethods(TestCase):
329
def test_get_summary(self):
330
r = revision.Revision('1')
332
self.assertEqual('a', r.get_summary())
334
self.assertEqual('a', r.get_summary())
336
self.assertEqual('a', r.get_summary())
338
def test_get_apparent_author(self):
339
r = revision.Revision('1')
341
self.assertEqual('A', r.get_apparent_author())
342
r.properties['author'] = 'B'
343
self.assertEqual('B', r.get_apparent_author())