# # # patch "enumerator.cc" # from [b8137d798b5bb05cc7f2481756ae96091efec7ba] # to [74107b3a01a0dbdf3d44fad97534c676403f3124] # ============================================================ --- enumerator.cc b8137d798b5bb05cc7f2481756ae96091efec7ba +++ enumerator.cc 74107b3a01a0dbdf3d44fad97534c676403f3124 @@ -84,14 +84,17 @@ { revision_id r = revs.front(); revs.pop_front(); + + // It's possible we've enumerated this node elsewhere since last + // time around. Cull rather than reprocess. + if (enumerated_nodes.find(r) != enumerated_nodes.end()) + continue; if (!all_parents_enumerated(r)) { revs.push_back(r); continue; } - - enumerated_nodes.insert(r); if (terminal_nodes.find(r) == terminal_nodes.end()) { @@ -100,10 +103,13 @@ for (ci i = range.first; i != range.second; ++i) { if (i->first == r) - revs.push_back(i->second); + if (enumerated_nodes.find(i->first) == enumerated_nodes.end()) + revs.push_back(i->second); } } + enumerated_nodes.insert(r); + if (null_id(r)) continue;