# # # patch "enumerator.cc" # from [5ca3baa39f04624fd9342bc8f370b8fbc96d82ca] # to [a18e01367c2fd10e20c36995c0afc569feef69ab] # # patch "enumerator.hh" # from [a506623c172113bc4c55cb87097820a789dc24fb] # to [31c35c4a2d1e92eec3bb5f3659706e6bec8649fa] # ============================================================ --- enumerator.cc 5ca3baa39f04624fd9342bc8f370b8fbc96d82ca +++ enumerator.cc a18e01367c2fd10e20c36995c0afc569feef69ab @@ -15,6 +15,8 @@ using std::deque; using std::map; +using std::multimap; +using std::pair; using std::set; using std::vector; @@ -27,6 +29,7 @@ for (set::const_iterator i = initial.begin(); i != initial.end(); ++i) revs.push_back(*i); + app.db.get_revision_ancestry(graph); } revision_enumerator::revision_enumerator(enumerator_callbacks & cb, @@ -35,6 +38,7 @@ { revision_id root; revs.push_back(root); + app.db.get_revision_ancestry(graph); } bool @@ -55,11 +59,13 @@ if (terminal_nodes.find(r) == terminal_nodes.end()) { - set children; - app.db.get_revision_children(r, children); - for (set::const_iterator i = children.begin(); - i != children.end(); ++i) - revs.push_back(*i); + typedef multimap::const_iterator ci; + pair range = graph.equal_range(r); + for (ci i = range.first; i != range.second; ++i) + { + if (i->first == r) + revs.push_back(i->second); + } } if (null_id(r)) ============================================================ --- enumerator.hh a506623c172113bc4c55cb87097820a789dc24fb +++ enumerator.hh 31c35c4a2d1e92eec3bb5f3659706e6bec8649fa @@ -7,6 +7,7 @@ // see the file COPYING for details #include +#include #include #include "app_state.hh" @@ -49,6 +50,7 @@ std::set terminal_nodes; std::deque revs; std::deque items; + std::multimap graph; revision_enumerator(enumerator_callbacks & cb, app_state & app,