# # # patch "revision.cc" # from [3892413bb144d335f6ef06001d7f9a573792392a] # to [ca25b6d7baaae299e272001bc7e4a8ffeb9b946e] # ============================================================ --- revision.cc 3892413bb144d335f6ef06001d7f9a573792392a +++ revision.cc ca25b6d7baaae299e272001bc7e4a8ffeb9b946e @@ -414,12 +414,10 @@ accumulate_strict_ancestors(revision_id static void accumulate_strict_ancestors(revision_id const & start, - set & new_ancestors, set & all_ancestors, multimap const & inverse_graph) { typedef multimap::const_iterator gi; - new_ancestors.clear(); vector frontier; frontier.push_back(start); @@ -433,9 +431,8 @@ accumulate_strict_ancestors(revision_id revision_id const & parent = i->second; if (all_ancestors.find(parent) == all_ancestors.end()) { - new_ancestors.insert(parent); all_ancestors.insert(parent); - frontier.push_back(i->second); + frontier.push_back(parent); } } } @@ -492,16 +489,15 @@ erase_ancestors_and_failures(std::set new_ancestors; - accumulate_strict_ancestors(rid, new_ancestors, all_ancestors, inverse_graph); - I(new_ancestors.find(rid) == new_ancestors.end()); - for (set::const_iterator i = new_ancestors.begin(); - i != new_ancestors.end(); ++i) - candidates.erase(*i); - } + // eliminated + accumulate_strict_ancestors(rid, all_ancestors, inverse_graph); } + + // now go and eliminate the ancestors + for (set::const_iterator i = all_ancestors.begin(); + i != all_ancestors.end(); ++i) + candidates.erase(*i); + L(FL("called predicate %s times") % predicates); }