method private select_revision file =
      let f () =
        let revs = self#cvs_revisions_file file in
        match revs with
          [] -> None
        | _ ->
            match Ocamlcvs.Revisions.first_revision revs with
              None -> None
            | Some first_rev ->
                let rec build_tree rev =
                  match Ocamlcvs.Revisions.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 = Ocamlcvs.Revisions.string_of_revision_number rev.Ocvs_types.rev_number in
                let f_string rev = Glib.Convert.locale_to_utf8
                    (Ocamlcvs.Revisions.string_of_revision rev)
                in
                GToolbox.tree_selection_dialog ~title: file
                  ~tree: tree
                  ~label: f_label
                  ~info: f_string
                  ()
      in
      handle_error f () None