# # # patch "rcs_import.cc" # from [9d9f0e9d850db32f0c4c13d37c473bd1f12b0b88] # to [a297388d77cdf7ae5e12ae79f47dbd99a1fef3d9] # ============================================================ --- rcs_import.cc 9d9f0e9d850db32f0c4c13d37c473bd1f12b0b88 +++ rcs_import.cc a297388d77cdf7ae5e12ae79f47dbd99a1fef3d9 @@ -1969,6 +1969,7 @@ struct dij_context struct dij_context { int dist; + int age_violations; cvs_blob_index prev; // My STL's map implementation insists on having this constructor, but @@ -1978,8 +1979,9 @@ struct dij_context I(false); }; - dij_context(int d, cvs_blob_index p) + dij_context(int d, int av, cvs_blob_index p) : dist(d), + age_violations(av), prev(p) { }; }; @@ -2013,7 +2015,7 @@ dijkstra_shortest_path(cvs_history &cvs, stack< cvs_blob_index > stack; stack.push(from); - distances.insert(make_pair(from, dij_context(0, invalid_blob))); + distances.insert(make_pair(from, dij_context(0, 0, invalid_blob))); if (break_on_grey) I(follow_grey); @@ -2032,16 +2034,19 @@ dijkstra_shortest_path(cvs_history &cvs, I(distances.count(bi) > 0); int curr_dist = distances[bi].dist; + int curr_age_violations = distances[bi].age_violations; // check the age limit, but abort only after the 10th violation, // just to be extra sure. time_i t(cvs.blobs[bi].get_youngest_event_time()); if (t < age_limit) { - age_limit_violations++; - if (age_limit_violations >= 10) - break; + curr_age_violations++; + if (curr_age_violations >= 10) + continue; } + else + curr_age_violations = 0; for (blob_event_iter i = cvs.blobs[bi].begin(); i != cvs.blobs[bi].end(); ++i) @@ -2055,7 +2060,9 @@ dijkstra_shortest_path(cvs_history &cvs, if (distances.count(dep_bi) == 0 && make_pair(bi, dep_bi) != edge_to_ignore) { - distances.insert(make_pair(dep_bi, dij_context(curr_dist + 1, bi))); + distances.insert(make_pair(dep_bi, dij_context(curr_dist + 1, + curr_age_violations, + bi))); stack.push(dep_bi); } }