228
228
parents.append(parent)
230
230
mutter('found ghost %s', parent)
231
self._rev_graph[rev_id] = parents
231
self._rev_graph[rev_id] = parents
232
232
if self._parents_are_inconsistent(rev_id, parents):
233
233
self.inconsistent_parents += 1
234
234
mutter('Inconsistent inventory parents: id {%s} '
235
235
'inventory claims %r, '
236
236
'available parents are %r, '
237
237
'unavailable parents are %r',
239
set(self.inventory.get_parents(rev_id)),
239
set(self.inventory.get_parent_map([rev_id])[rev_id]),
241
241
set(rev.parent_ids).difference(set(parents)))
249
249
Otherwise only the ghost differences are evaluated.
251
weave_parents = self.inventory.get_parents(rev_id)
251
weave_parents = self.inventory.get_parent_map([rev_id])[rev_id]
252
252
weave_missing_old_ghosts = set(weave_parents) != set(parents)
253
253
first_parent_is_wrong = (
254
254
len(weave_parents) and len(parents) and
334
334
# we have topological order of revisions and non ghost parents ready.
335
335
self._setup_steps(len(self.revisions))
336
for rev_id in TopoSorter(self.revisions.get_graph().items()).iter_topo_order():
337
parents = self.revisions.get_parents(rev_id)
338
# double check this really is in topological order.
339
unavailable = [p for p in parents if p not in new_inventory_vf]
336
graph = self.revisions.get_graph()
337
parent_map = self.revisions.get_parent_map(graph.keys())
338
for rev_id in TopoSorter(graph.items()).iter_topo_order():
339
parents = parent_map[rev_id]
340
# double check this really is in topological order, ignoring existing ghosts.
341
unavailable = [p for p in parents if p not in new_inventory_vf and
340
343
assert len(unavailable) == 0
341
344
# this entry has all the non ghost parents in the inventory
343
346
self._reweave_step('adding inventories')
344
347
# ugly but needed, weaves are just way tooooo slow else.
345
new_inventory_vf.add_lines(rev_id, parents, self.inventory.get_lines(rev_id))
348
new_inventory_vf.add_lines_with_ghosts(rev_id, parents,
349
self.inventory.get_lines(rev_id))
347
351
# if this worked, the set of new_inventory_vf.names should equal
412
416
elif version in versions_with_bad_parents:
413
417
parents = versions_with_bad_parents[version][1]
415
parents = vf.get_parents(version)
419
parents = vf.get_parent_map([version])[version]
416
420
new_parents[version] = parents
417
421
if not len(new_parents):
418
422
# No used versions, remove the VF.