sig
  module Types :
    sig
      type cvs_status =
          Up_to_date
        | Locally_modified
        | Locally_added
        | Locally_removed
        | Needs_checkout
        | Needs_Patch
        | Needs_Merge
        | Conflicts_on_merge
        | Unknown
      type update_action = U | P | A | R | M | C | QM
      type cvs_info = {
        cvs_file : string;
        cvs_status : Ocamlcvs.Types.cvs_status;
        cvs_work_rev : string;
        cvs_rep_rev : string;
        cvs_date_string : string;
        cvs_date : float;
      }
      type cvs_revision = {
        rev_number : int list;
        rev_author : string;
        rev_date : string;
        rev_comment : string;
      }
      exception CvsFailure of string
      exception CvsPartFailure of string
      val string_of_status : Ocamlcvs.Types.cvs_status -> string
      val status_of_string : string -> Ocamlcvs.Types.cvs_status
      val update_action_of_string : string -> Ocamlcvs.Types.update_action
      val dump_cvs_info : Ocamlcvs.Types.cvs_info -> unit
    end
  module Diff_types : sig type diffs end
  module Commands :
    sig
      val delete_file : string -> unit
      val absolute_name : string -> string
      val input_file_as_string : string -> string
      val status_dir : string -> Ocamlcvs.Types.cvs_info list
      val status_files : string list -> Ocamlcvs.Types.cvs_info list
      val commit_files : ?comment:string -> string list -> unit
      val commit_dir : ?comment:string -> string -> unit
      val update_dir :
        ?recursive:bool ->
        string -> (string * Ocamlcvs.Types.update_action) list
      val add_dir : string -> unit
      val create_and_add_dir : string -> unit
      val add_files :
        ?binary:bool -> string list -> string list * string list
      val remove_files : string list -> string list * string list
      val diff_file :
        ?rev:Ocamlcvs.Types.cvs_revision ->
        ?rev2:Ocamlcvs.Types.cvs_revision ->
        string -> Ocamlcvs.Diff_types.diffs * string
      val rcs_revision : Ocamlcvs.Types.cvs_revision -> string -> string
      val revisions_file : string -> Ocamlcvs.Types.cvs_revision list
      val tags_file : string -> (string * string) list
      val tag_files : (string -> bool) -> string -> string list -> unit
      val tag_dir :
        ?recursive:bool -> (string -> bool) -> string -> string -> unit
      val log : string -> string
    end
  module Behav :
    sig
      type autorization_response = Continue | Skip | Stop
      class type ['a] data =
        object
          method cvs_info_of_t : '-> Ocamlcvs.Types.cvs_info
          method elements : string -> 'a list
          method remove_element : string -> unit
          method t_of_cvs_info : Ocamlcvs.Types.cvs_info -> 'a
          method update_element : '-> unit
        end
      class type ct_cvs =
        object
          method cvs_add_dir : string -> unit
          method cvs_add_files :
            ?binary:bool -> string list -> string list * string list
          method cvs_commit_dir : ?comment:string -> string -> unit
          method cvs_commit_files : ?comment:string -> string list -> unit
          method cvs_create_and_add_dir : string -> unit
          method cvs_diff_file :
            ?rev:Ocamlcvs.Types.cvs_revision ->
            ?rev2:Ocamlcvs.Types.cvs_revision ->
            string -> Ocamlcvs.Diff_types.diffs * string
          method cvs_log_file : string -> string
          method cvs_remove_files : string list -> string list * string list
          method cvs_revisions_file :
            string -> Ocamlcvs.Types.cvs_revision list
          method cvs_status_dir : string -> unit
          method cvs_status_files : string list -> unit
          method cvs_tag_dir :
            ?recursive:bool -> (string -> bool) -> string -> string -> unit
          method cvs_tag_files :
            (string -> bool) -> string -> string list -> unit
          method cvs_tags_file : string -> (string * string) list
          method cvs_update_dir :
            string -> (string * Ocamlcvs.Types.update_action) list
          method rcs_revision :
            Ocamlcvs.Types.cvs_revision -> string -> string
        end
      class type ['a] list_behaviour =
        object
          method after_action : '-> unit
          method autorize_file : '-> Ocamlcvs.Behav.autorization_response
          method comparison_function : int -> '-> '-> int
          method cvs_add_dir : string -> unit
          method cvs_add_files :
            ?binary:bool -> string list -> string list * string list
          method cvs_commit_dir : ?comment:string -> string -> unit
          method cvs_commit_files : ?comment:string -> string list -> unit
          method cvs_create_and_add_dir : string -> unit
          method cvs_diff_file :
            ?rev:Types.cvs_revision ->
            ?rev2:Types.cvs_revision -> string -> Diff_types.diffs * string
          method cvs_info_of_t : '-> Ocamlcvs.Types.cvs_info
          method cvs_log_file : string -> string
          method cvs_remove_files : string list -> string list * string list
          method cvs_revisions_file : string -> Types.cvs_revision list
          method cvs_status_dir : string -> unit
          method cvs_status_files : string list -> unit
          method cvs_tag_dir :
            ?recursive:bool -> (string -> bool) -> string -> string -> unit
          method cvs_tag_files :
            (string -> bool) -> string -> string list -> unit
          method cvs_tags_file : string -> (string * string) list
          method cvs_update_dir :
            string -> (string * Types.update_action) list
          method display_strings : '-> string option * string list
          method double_click : '-> unit
          method elements : string -> 'a list
          method menu_ctx : 'a list -> (string * (unit -> unit)) list
          method needs_cvs_status : bool
          method rcs_revision : Types.cvs_revision -> string -> string
          method remove_element : string -> unit
          method select : '-> unit
          method t_of_cvs_info : Ocamlcvs.Types.cvs_info -> 'a
          method titles : string list
          method unselect : '-> unit
          method update_element : '-> unit
        end
      class type ['a] tree_behaviour =
        object
          method add_expanded_dir : string -> unit
          method cvs_add_dir : string -> unit
          method cvs_add_files :
            ?binary:bool -> string list -> string list * string list
          method cvs_commit_dir : ?comment:string -> string -> unit
          method cvs_commit_files : ?comment:string -> string list -> unit
          method cvs_create_and_add_dir : string -> unit
          method cvs_diff_file :
            ?rev:Types.cvs_revision ->
            ?rev2:Types.cvs_revision -> string -> Diff_types.diffs * string
          method cvs_log_file : string -> string
          method cvs_remove_files : string list -> string list * string list
          method cvs_revisions_file : string -> Types.cvs_revision list
          method cvs_status_dir : string -> unit
          method cvs_status_files : string list -> unit
          method cvs_tag_dir :
            ?recursive:bool -> (string -> bool) -> string -> string -> unit
          method cvs_tag_files :
            (string -> bool) -> string -> string list -> unit
          method cvs_tags_file : string -> (string * string) list
          method cvs_update_dir :
            string -> (string * Types.update_action) list
          method expand_dir : string -> bool
          method menu_ctx : string option -> (string * (unit -> unit)) list
          method rcs_revision : Types.cvs_revision -> string -> string
          method remove_expanded_dir : string -> unit
          method roots : string list
          method select : string -> unit
          method t_of_cvs_info : Ocamlcvs.Types.cvs_info -> 'a
          method unselect : string -> unit
          method update_element : '-> unit
        end
      class ['a] cvs :
        'Ocamlcvs.Behav.data ->
        object
          method cvs_add_dir : string -> unit
          method cvs_add_files :
            ?binary:bool -> string list -> string list * string list
          method cvs_commit_dir : ?comment:string -> string -> unit
          method cvs_commit_files : ?comment:string -> string list -> unit
          method cvs_create_and_add_dir : string -> unit
          method cvs_diff_file :
            ?rev:Ocamlcvs.Types.cvs_revision ->
            ?rev2:Ocamlcvs.Types.cvs_revision ->
            string -> Ocamlcvs.Diff_types.diffs * string
          method cvs_log_file : string -> string
          method cvs_remove_files : string list -> string list * string list
          method cvs_revisions_file :
            string -> Ocamlcvs.Types.cvs_revision list
          method cvs_status_dir : string -> unit
          method cvs_status_files : string list -> unit
          method cvs_tag_dir :
            ?recursive:bool -> (string -> bool) -> string -> string -> unit
          method cvs_tag_files :
            (string -> bool) -> string -> string list -> unit
          method cvs_tags_file : string -> (string * string) list
          method cvs_update_dir :
            string -> (string * Ocamlcvs.Types.update_action) list
          method rcs_revision :
            Ocamlcvs.Types.cvs_revision -> string -> string
        end
    end
  module List :
    sig
      class ['a] box :
        'Ocamlcvs.Behav.list_behaviour ->
        object
          val mutable dir : string option
          val mutable elements : 'a list
          val mutable selection : 'a list
          method box : GPack.box
          method cvs_commit_selected_files : unit
          method cvs_differences_between : unit
          method cvs_differences_with : unit
          method cvs_lastdiff_file : unit
          method cvs_log_file : unit
          method cvs_remove_selected_files : unit
          method cvs_resolve_conflicts : unit
          method cvs_revisions_file : '-> Ocamlcvs.Types.cvs_revision list
          method cvs_select_revision :
            '-> Ocamlcvs.Types.cvs_revision option
          method cvs_tag_selected_files : unit
          method cvs_tags_of_file : unit
          method display_dir : ?force:bool -> string option -> unit
          method selection : 'a list
          method update : bool -> unit
        end
    end
  module Tree :
    sig
      val file_exists : string -> bool
      val is_prefix : string -> string -> bool
      class ['a] box :
        'Ocamlcvs.Behav.tree_behaviour ->
        object
          val mutable selected_node : GTree.tree_item option
          val mutable selection : string option
          method box : GPack.box
          method cvs_add_binary_files : unit
          method cvs_add_dir : unit
          method cvs_add_files : unit
          method cvs_commit_dir : unit
          method cvs_tag_dir : unit
          method cvs_update_dir : unit
          method insert_node : GTree.tree -> string -> string -> unit
          method select_dir : string -> GTree.tree_item -> unit
          method selection : string option
          method unselect_dir : string -> unit
          method update : unit
          method update_selected_dir : unit
        end
    end
end