96
96
'v-1 v-2 v-3'.split())
97
97
self.assertEqualDiff(w1.get_text('v-3'),
99
self.assertEqual(sorted(w1.get_parents('v-3')),
99
self.assertEqual({'v-3':('v-1',)}, w1.get_parent_map(['v-3']))
101
100
ann = list(w1.annotate('v-3'))
102
101
self.assertEqual(len(ann), 1)
103
102
self.assertEqual(ann[0][0], 'v-1')
122
121
def verify_weave1(self, w1):
123
122
self.assertEqual(sorted(w1.versions()), ['v1', 'v2', 'v3'])
124
123
self.assertEqual(w1.get_lines('v1'), ['hello\n'])
125
self.assertEqual([], w1.get_parents('v1'))
124
self.assertEqual({'v1':()}, w1.get_parent_map(['v1']))
126
125
self.assertEqual(w1.get_lines('v2'), ['hello\n', 'world\n'])
127
self.assertEqual(['v1'], w1.get_parents('v2'))
126
self.assertEqual({'v2':('v1',)}, w1.get_parent_map(['v2']))
128
127
self.assertEqual(w1.get_lines('v3'), ['hello\n', 'cruel\n', 'world\n'])
129
self.assertEqual(['v2'], w1.get_parents('v3'))
128
self.assertEqual({'v3':('v2',)}, w1.get_parent_map(['v3']))
131
130
def test_join_source_has_less_parents_preserves_parents(self):
132
131
# when the target has a text with more parent info, join
138
137
t.add_lines('base', [], [])
139
138
t.add_lines('text', ['base'], [])
141
self.assertEqual(['base'], t.get_parents('text'))
140
self.assertEqual({'text':('base',)}, t.get_parent_map(['text']))
143
142
def test_join_with_ghosts(self):
144
143
"""Join that inserts parents of an existing revision.
167
166
self.assertEqual(['v1', 'v2', 'v3', 'x1',], sorted(w1.versions()))
168
167
self.assertEqual('line from x1\n', w1.get_text('x1'))
169
168
self.assertEqual(['hello\n', 'world\n'], w1.get_lines('v2'))
170
self.assertEqual(['v1'], w1.get_parents('v2'))
169
self.assertEqual({'v2':('v1',)}, w1.get_parent_map(['v2']))
172
171
def test_join_with_ignore_missing_versions(self):
173
172
# test that ignore_missing=True makes a listed but absent version id
182
181
eq(sorted(w1.versions()), ['v1', 'v2', 'v3', 'x1'])
183
182
eq(w1.get_text('x1'), 'line from x1\n')
184
183
eq(w1.get_lines('v2'), ['hello\n', 'world\n'])
185
eq(w1.get_parents('v2'), ['v1'])
184
self.assertEqual({'v2':('v1',)}, w1.get_parent_map(['v2']))
187
186
def build_source_weave(self, name, *pattern):
188
187
w = self.get_source(name)
233
232
# try filling target with ghosts and filling in reverse -
234
233
target.add_lines_with_ghosts('notbase', ['base'], [])
236
except errors.RevisionNotPresent:
237
# can't join a ghost containing target onto a non-ghost supporting
239
self.assertFalse(source_ghosts)
242
self.assertTrue(source_ghosts)
236
243
# legacy apis should behave
237
244
self.assertEqual(['notbase'], source.get_ancestry(['notbase']))
238
self.assertEqual([], source.get_parents('notbase'))
239
245
self.assertEqual({'notbase':()}, source.get_graph())
240
246
self.assertFalse(source.has_version('base'))
242
# ghost data should have been preserved
243
self.assertEqual(['base', 'notbase'], source.get_ancestry_with_ghosts(['notbase']))
244
self.assertEqual(['base'], source.get_parents_with_ghosts('notbase'))
245
self.assertEqual({'notbase':['base']}, source.get_graph_with_ghosts())
246
self.assertTrue(source.has_ghost('base'))
247
# ghost data should have been preserved
248
self.assertEqual(['base', 'notbase'], source.get_ancestry_with_ghosts(['notbase']))
249
self.assertEqual(['base'], source.get_parents_with_ghosts('notbase'))
250
self.assertEqual({'notbase':('base',)}, source.get_parent_map(['notbase']))
251
self.assertEqual({'notbase':('base',)}, source.get_graph_with_ghosts())
252
self.assertTrue(source.has_ghost('base'))
248
254
# if we add something that is fills out what is a ghost, then
249
255
# when joining into a ghost aware join it should flesh out the ghosts.
250
256
source.add_lines('base', [], [])
251
257
target.join(source, version_ids=['base'])
252
258
self.assertEqual(['base', 'notbase'], target.get_ancestry(['notbase']))
253
self.assertEqual(['base'], target.get_parents('notbase'))
259
self.assertEqual({'notbase':('base',)}, target.get_parent_map(['notbase']))
254
260
self.assertEqual({'base':(),
255
261
'notbase':('base', ),
259
265
# we have _with_ghost apis to give us ghost information.
260
266
self.assertEqual(['base', 'notbase'], target.get_ancestry_with_ghosts(['notbase']))
261
267
self.assertEqual(['base'], target.get_parents_with_ghosts('notbase'))
262
self.assertEqual({'base':[],
268
self.assertEqual({'base':(),
265
271
target.get_graph_with_ghosts())
266
272
self.assertFalse(target.has_ghost('base'))