# # # patch "rcs_import.cc" # from [80b00310d52b6667c0ceaed5f04d9977d9f78531] # to [bd3bb0a698be48606f0320a268645ef973b00140] # ============================================================ --- rcs_import.cc 80b00310d52b6667c0ceaed5f04d9977d9f78531 +++ rcs_import.cc bd3bb0a698be48606f0320a268645ef973b00140 @@ -3415,19 +3415,12 @@ split_cycle(cvs_history & cvs, vector blob_without_type1_events; - vector splittable_blobs; + map > t2events; + map > t3events; + map > t4events; for (cm_ity cc = cycle_members.begin(); cc != cycle_members.end(); ++cc) { @@ -3437,27 +3430,15 @@ split_cycle(cvs_history & cvs, vector & blob_events = cvs.blobs[*cc].get_events(); - // skip blobs which consist of just one event, those cannot be - // split any further anyway. - if (blob_events.size() < 2) - { - L(FL(" decision: not splitting because of its size")); - continue; - } + vector & type2events = safe_insert(t2events, + make_pair(*cc, vector()))->second; + vector & type3events = safe_insert(t3events, + make_pair(*cc, vector()))->second; + vector & type4events = safe_insert(t4events, + make_pair(*cc, vector()))->second; - bool has_type4events = false; - vector type2events, type3events; - // 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 // is of no interest here. @@ -3498,13 +3479,59 @@ split_cycle(cvs_history & cvs, vector blob_without_type1_events; + vector splittable_blobs; + + + for (cm_ity cc = cycle_members.begin(); cc != cycle_members.end(); ++cc) + { + // We never split branch starts, instead we split the underlying + // symbol. Thus simply skip them here. + if (cvs.blobs[*cc].get_digest().is_branch_start()) + { + L(FL(" decision: not splitting because it's a branch start")); + continue; + } + + vector & blob_events = cvs.blobs[*cc].get_events(); + + // skip blobs which consist of just one event, those cannot be + // split any further anyway. + if (blob_events.size() < 2) + { + L(FL(" decision: not splitting because of its size")); + continue; + } + + + vector & type2events = t2events[*cc]; + vector & type3events = t3events[*cc]; + vector & type4events = t4events[*cc]; + + // skip blobs with type 4 events, splitting them doesn't help or // isn't possible at all. - if (has_type4events) + if (!type4events.empty()) { L(FL(" cannot be split due to type4 events.")); continue;