Module Smart_git

module type APPEND = sig ... end
module type UID = sig ... end
module type HTTP = sig ... end
module Endpoint : sig ... end

Mimic values.

When the user use an Endpoint.t to Make.fetch or Make.push, we fill the given Mimic's ctx with some available informations such as:

From this informations, the end-user can process them through the Mimic API (with Mimic.fold) and describe how to create needed values to start a protocol from them.

For example, if the user wants to use mirage-tcpip which needs an IP address and a port, he is able to re-use/map/fold git_host and git_port to craft what mirage-tcpip really needs.

Of course, such job is definitely outside the scope of ocaml-git and permits to us to be free about protocol implementations. An example of the plumbing needed is able with git-mirage which re-use these values to be able to start a mirage-tcpip connection, a awa-ssh connection of a cohttp (with or without ocaml-tls) connection.

type handshake = uri0:Uri.t -> uri1:Uri.t -> Mimic.flow -> unit Lwt.t
val git_capabilities : [ `Rd | `Wr ] Mimic.value
val git_scheme : [ `Git | `SSH | `HTTP | `HTTPS | `Scheme of string ] Mimic.value
val git_path : string Mimic.value
val git_hostname : string Mimic.value
val git_ssh_user : string Mimic.value
val git_port : int Mimic.value
val git_http_headers : (string * string) list Mimic.value
val git_transmission : [ `Git | `Exec | `HTTP of Uri.t * handshake ] Mimic.value
val git_uri : Uri.t Mimic.value
module Make (Scheduler : Sigs.SCHED with type +'a s = 'a Lwt.t) (Pack : APPEND with type +'a fiber = 'a Lwt.t) (Index : APPEND with type +'a fiber = 'a Lwt.t) (Uid : UID) (Ref : Sigs.REF) : sig ... end