# # # patch "rcs_import.cc" # from [39d7f76b7af2d6b7453e3bb7a2affe40bbd76cd3] # to [c1688a22926184be0f607cf7ef2b679c48c96f66] # ============================================================ --- rcs_import.cc 39d7f76b7af2d6b7453e3bb7a2affe40bbd76cd3 +++ rcs_import.cc c1688a22926184be0f607cf7ef2b679c48c96f66 @@ -919,6 +919,7 @@ get_cheapest_violation_to_solve(list > stack; + set< cvs_event_ptr > done; cvs_event_ptr dep = i->first; cvs_event_ptr ev = i->second; @@ -936,13 +937,15 @@ get_cheapest_violation_to_solve(listadj_time <= time_goal) { price++; for (dependency_iter j = e->dependents.begin(); j != e->dependents.end(); ++j) - stack.push(make_pair(*j, time_goal + 1)); + if (done.find(*j) == done.end()) + stack.push(make_pair(*j, time_goal + 1)); } } @@ -956,19 +959,22 @@ get_cheapest_violation_to_solve(listadj_time - 1)); while (!stack.empty()) { cvs_event_ptr e = stack.top().first; time_t time_goal = stack.top().second; stack.pop(); + done.insert(e); if (e->adj_time >= time_goal) { price++; for (dependency_iter j = e->dependencies.begin(); j != e->dependencies.end(); ++j) - stack.push(make_pair(*j, time_goal - 1)); + if (done.find(*j) == done.end()) + stack.push(make_pair(*j, time_goal - 1)); } } @@ -987,6 +993,7 @@ solve_violation(cvs_history & cvs, t_sol solve_violation(cvs_history & cvs, t_solution & solution) { stack< pair< cvs_event_ptr, time_t > > stack; + set< cvs_event_ptr > done; cvs_event_ptr dep = solution.first->first; cvs_event_ptr ev = solution.first->second; int direction = solution.second; @@ -1006,6 +1013,7 @@ solve_violation(cvs_history & cvs, t_sol cvs_event_ptr e = stack.top().first; time_t time_goal = stack.top().second; stack.pop(); + done.insert(e); if (e->adj_time <= time_goal) { @@ -1014,7 +1022,8 @@ solve_violation(cvs_history & cvs, t_sol e->adj_time = time_goal; for (dependency_iter j = e->dependents.begin(); j != e->dependents.end(); ++j) - stack.push(make_pair(*j, time_goal + 1)); + if (done.find(*j) == done.end()) + stack.push(make_pair(*j, time_goal + 1)); } } } @@ -1027,6 +1036,7 @@ solve_violation(cvs_history & cvs, t_sol cvs_event_ptr e = stack.top().first; time_t time_goal = stack.top().second; stack.pop(); + done.insert(e); if (e->adj_time >= time_goal) { @@ -1035,7 +1045,8 @@ solve_violation(cvs_history & cvs, t_sol e->adj_time = time_goal; for (dependency_iter j = e->dependencies.begin(); j != e->dependencies.end(); ++j) - stack.push(make_pair(*j, time_goal - 1)); + if (done.find(*j) == done.end()) + stack.push(make_pair(*j, time_goal - 1)); } } } @@ -1049,6 +1060,7 @@ sanitize_rcs_file_timestamps(cvs_history // we start at the root event for the current file and scan for // timestamp pairs which violate the corresponding dependency. stack< cvs_event_ptr > stack; + set< cvs_event_ptr > done; stack.push(cvs.root_event); list violations; @@ -1057,13 +1069,16 @@ sanitize_rcs_file_timestamps(cvs_history { cvs_event_ptr ev = stack.top(); stack.pop(); + done.insert(ev); for (dependency_iter i = ev->dependents.begin(); i != ev->dependents.end(); ++i) { - stack.push(*i); if (ev->adj_time >= (*i)->adj_time) violations.push_back(make_pair(ev, *i)); + + if (done.find(*i) == done.end()) + stack.push(*i); } }