let children_revisions (revs : cvs_revision list) rev =
match rev.rev_number with
[] -> []
| _ ->
let subbranch_numbers = subranches_numbers revs rev in
let first_subs = List.fold_left
(fun acc -> fun n ->
match first_subbranch_revision n revs with
None -> acc
| Some r -> r :: acc
)
[]
subbranch_numbers
in
let len = List.length rev.rev_number in
let s = string_of_revision_number rev.rev_number in
let f rev2 =
if rev2.rev_number = [] then
false
else
let len2 = List.length rev2.rev_number in
if len < len2 then
len + 2 = len2 &&
(fst (Ocvs_misc.get_n_first_ele len rev2.rev_number)) = rev.rev_number &&
List.mem rev2 first_subs
else if len = len2 then
try
let (before, after) = Ocvs_misc.get_n_first_ele (len - 1) rev.rev_number in
let (before2, after2) = Ocvs_misc.get_n_first_ele (len - 1) rev2.rev_number in
before = before2 &&
(List.hd after) + 1 = List.hd (after2)
with
Not_found ->
(List.hd (List.rev rev.rev_number)) + 1 = List.hd (List.rev rev2.rev_number)
| Invalid_argument s ->
prerr_endline ("Invalid argument "^s);
false
else
false
in
let res = List.filter f revs in
print_DEBUG (s^" ->");
List.iter (fun r -> print_DEBUG (" "^(string_of_revision_number r.rev_number))) res ;
res