def topo_sort(revisions):
"""revisions: dict id -> parents"""
done = set()
remaining = set(revisions)
set_revisions.copy()ns = {
rev: (set(parents), parents)
for rev, parents in revisions.items()
}
while remaining:
for rev, parents in list(remaining.items()): in remaining.copy():
set_parents, parents = set_revisions[rev]
if set(_parents) <= done:
yield (rev, parents)
done.add(rev)
del remaining[rev].remove(rev)