# # # patch "rcs_import.cc" # from [97183045aee1d681b891a0ca33913671059777a7] # to [f5e224d15e203197da9fc5a860feeac65f21acf6] # ============================================================ --- rcs_import.cc 97183045aee1d681b891a0ca33913671059777a7 +++ rcs_import.cc f5e224d15e203197da9fc5a860feeac65f21acf6 @@ -2531,7 +2531,10 @@ split_blob_at(cvs_history & cvs, const c split_blob_at(cvs_history & cvs, const cvs_blob_index blob_to_split, split_decider_func & split_decider); +void +explode_blob(cvs_history & cvs, const cvs_blob_index blob_to_split); + struct branch_sanitizer { protected: @@ -3449,6 +3452,7 @@ split_cycle(cvs_history & cvs, set blob_without_type1_events; vector splittable_blobs; vector > > splittable_symbol_blobs; + vector type4_symbol_blobs; for (cm_ity cc = cycle_members.begin(); cc != cycle_members.end(); ++cc) { @@ -3544,7 +3548,11 @@ split_cycle(cvs_history & cvs, set::const_iterator i = type4_symbol_blobs.begin(); + i != type4_symbol_blobs.end(); ++i) + explode_blob(cvs, *i); + } else { L(FL("Unable to split the following cycle:")); @@ -3761,6 +3776,7 @@ split_cycle(cvs_history & cvs, set type2events, type3events, type4events; + set weak_events; // Loop over every event of every blob again and collect events of // type 2 and 3, but abort as soon as we hit a type 4 one. Type 1 @@ -3769,7 +3785,7 @@ split_cycle(cvs_history & cvs, set::const_iterator mm_ity; pair range = @@ -3792,19 +3808,35 @@ split_cycle(cvs_history & cvs, set 1) + { + set tmp; + tmp.insert(*cvs.blobs[bi].get_events().rbegin()); + split_by_event_set func(tmp); + split_blob_at(cvs, bi, func); + } +} + +void split_blob_at(cvs_history & cvs, const cvs_blob_index blob_to_split, split_decider_func & split_decider) {