method cvs_select_revision file =
      try
        let revs = self#cvs_revisions_file file in
        match revs with
          [] -> None
        | _ ->
            let filename = (behav#cvs_info_of_t file).Ocvs_types.cvs_file in
            match Ocvs_revision.first_revision revs with
              None -> None
            | Some first_rev ->
                let rec build_tree rev =
                  match Ocvs_revision.children_revisions revs rev with
                    [] -> `L rev
                  | subs -> `N (rev, List.map build_tree subs)
                in
                let tree = build_tree first_rev in
                let f_label rev = Ocvs_revision.string_of_revision_number rev.Ocvs_types.rev_number in
                let f_string rev = Glib.Convert.locale_to_utf8 (Ocvs_revision.string_of_revision rev) in
                GToolbox.tree_selection_dialog ~title: filename
                  ~tree: tree
                  ~label: f_label
                  ~info: f_string
                  ()
      with
        Failure s ->
          GToolbox.message_box Ocvs_messages.error s ;
          None