159
159
are considered ghosts should not be present in the map.
160
160
:return: An the iterator from MergeSorter.iter_topo_order()
162
# MergeSorter requires that all nodes be present in the graph, so get rid
163
# of any references pointing outside of this graph.
162
164
parent_graph = {}
163
165
for revision_id in revision_ids:
164
166
if revision_id not in parent_map: # ghost
199
201
rev = branch.repository.get_revisions([merge])[0]
200
202
except errors.NoSuchRevision:
201
203
# If we are missing a revision, just print out the revision id
202
to_file.write(first_prefix + merge + '\n')
204
to_file.write(first_prefix + '(ghost) ' + merge + '\n')
203
205
other_revisions.append(merge)
211
213
# last committed revision.
212
214
merge_extra = graph.find_unique_ancestors(merge, other_revisions)
213
215
other_revisions.append(merge)
214
# Now that we have the revisions, we need to sort them to get a proper
215
# listing. We want to sort in reverse topological order (which
216
# MergeSorter gives us). MergeSorter requires that there are no
217
# dangling references, though, so clean up the graph to point to only
219
216
merge_extra.discard(_mod_revision.NULL_REVISION)
221
218
# Get a handle to all of the revisions we will need
223
220
revisions = dict((rev.revision_id, rev) for rev in
224
221
branch.repository.get_revisions(merge_extra))
225
222
except errors.NoSuchRevision:
226
# If we are missing a revision, just print out the revision id
227
to_file.write(first_prefix + merge + '\n')
229
# Display the revisions brought in by this merge.
230
rev_id_iterator = _get_sorted_revisions(merge, merge_extra,
231
branch.repository.get_parent_map(merge_extra))
232
# Skip the first node
233
num, first, depth, eom = rev_id_iterator.next()
235
raise AssertionError('Somehow we misunderstood how'
236
' iter_topo_order works %s != %s' % (first, merge))
237
for num, sub_merge, depth, eom in rev_id_iterator:
238
if sub_merge in ignore:
240
log_message = log_formatter.log_string(None,
241
revisions[sub_merge],
242
term_width - len(sub_prefix))
243
to_file.write(sub_prefix + log_message + '\n')
223
# One of the sub nodes is a ghost, check each one
225
for revision_id in merge_extra:
227
rev = branch.repository.get_revisions(merge_extra)[0]
228
except errors.NoSuchRevision:
229
revisions[revision_id] = None
231
revisions[revision_id] = rev
233
# Display the revisions brought in by this merge.
234
rev_id_iterator = _get_sorted_revisions(merge, merge_extra,
235
branch.repository.get_parent_map(merge_extra))
236
# Skip the first node
237
num, first, depth, eom = rev_id_iterator.next()
239
raise AssertionError('Somehow we misunderstood how'
240
' iter_topo_order works %s != %s' % (first, merge))
241
for num, sub_merge, depth, eom in rev_id_iterator:
242
if sub_merge in ignore:
244
rev = revisions[sub_merge]
246
to_file.write(sub_prefix + '(ghost) ' + sub_merge + '\n')
248
log_message = log_formatter.log_string(None,
249
revisions[sub_merge],
250
term_width - len(sub_prefix))
251
to_file.write(sub_prefix + log_message + '\n')