# # # patch "commands.cc" # from [29c43713f565770fd21459ccccfe3144545ff75c] # to [0ecc7f73a96dba3dffa5740d3b9b26999dd907dd] # # patch "revision.cc" # from [666fe7fe312d9c669bf0bff3378fc88b48338d30] # to [bac7ee4484bbf3eb86b449eb029324abedcb245a] # ============================================================ --- commands.cc 29c43713f565770fd21459ccccfe3144545ff75c +++ commands.cc 0ecc7f73a96dba3dffa5740d3b9b26999dd907dd @@ -3552,6 +3552,8 @@ seen.insert(rid); app.db.get_revision(rid, rev); + set next_nodes; + if (!nodes.empty()) { set nodes_changed; @@ -3570,9 +3572,11 @@ break; } } + + next_nodes = nodes; for (set::const_iterator n = nodes_born.begin(); n != nodes_born.end(); ++n) - nodes.erase(*n); + next_nodes.erase(*n); if (any_node_hit) print_this = true; @@ -3659,6 +3663,11 @@ last--; } } + // when we had a restriction and run out of nodes, stop. + if (!nodes.empty() && next_nodes.empty()) + return; + + nodes = next_nodes; } frontier = next_frontier; } ============================================================ --- revision.cc 666fe7fe312d9c669bf0bff3378fc88b48338d30 +++ revision.cc bac7ee4484bbf3eb86b449eb029324abedcb245a @@ -531,8 +531,10 @@ edge_nodes_born); std::copy(edge_nodes_changed.begin(), edge_nodes_changed.end(), inserter(nodes_changed, nodes_changed.begin())); - std::copy(edge_nodes_born.begin(), edge_nodes_born.end(), - inserter(nodes_born, nodes_born.begin())); + // edges don't really get "born" in merges. + if (rev.edges.size() == 1) + std::copy(edge_nodes_born.begin(), edge_nodes_born.end(), + inserter(nodes_born, nodes_born.begin())); } }