package mirage

  1. Overview
  2. Docs

Source file git.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
open Functoria.DSL
open Time
open Mclock
open Pclock
open Tcp
open Mimic
open Misc

type git_client = Git_client

let git_client = typ Git_client

let git_merge_clients =
  let packages = [ package "mimic" ] in
  let connect _ _modname = function
    | [ a; b ] -> code ~pos:__POS__ "Lwt.return (Mimic.merge %s %s)" a b
    | _ -> connect_err "git_merge_client" 2
  in
  impl ~packages ~connect "Mimic.Merge"
    (git_client @-> git_client @-> git_client)

let git_tcp =
  let packages =
    [ package "git-mirage" ~sublibs:[ "tcp" ] ~min:"3.10.0" ~max:"3.18.0" ]
  in
  let connect _ modname = function
    | [ _tcpv4v6; ctx ] ->
        code ~pos:__POS__ {ocaml|%s.connect %s|ocaml} modname ctx
    | _ -> connect_err "git_tcp" 2
  in
  impl ~packages ~connect "Git_mirage_tcp.Make"
    (tcpv4v6 @-> mimic @-> git_client)

let git_ssh ?authenticator key password =
  let packages =
    [ package "git-mirage" ~sublibs:[ "ssh" ] ~min:"3.13.0" ~max:"3.18.0" ]
  in
  let err () = connect_err "git_ssh" 4 ~max:7 in
  let connect _ modname = function
    | _mclock :: _tcpv4v6 :: _time :: ctx :: rest ->
        let key, rest = pop ~err (Some key) rest in
        let password, rest = pop ~err (Some password) rest in
        let authenticator = pop_and_check_empty ~err authenticator rest in
        code ~pos:__POS__
          {ocaml|%s.connect %s >>= %s.with_optionnal_key %a %a %a|ocaml} modname
          ctx modname (pp_opt "authenticator") authenticator (pp_label "key")
          key (pp_label "password") password
    | _ -> err ()
  in
  let runtime_args =
    runtime_args_opt [ Some key; Some password; authenticator ]
  in
  impl ~packages ~connect ~runtime_args "Git_mirage_ssh.Make"
    (mclock @-> tcpv4v6 @-> time @-> mimic @-> git_client)

let git_http ?authenticator headers =
  let packages =
    [ package "git-mirage" ~sublibs:[ "http" ] ~min:"3.10.0" ~max:"3.18.0" ]
  in
  let runtime_args = runtime_args_opt [ headers; authenticator ] in
  let err () = connect_err "git_http" 3 ~max:5 in
  let connect _ modname = function
    | _pclock :: _tcpv4v6 :: ctx :: rest ->
        let headers, rest = pop ~err headers rest in
        let authenticator = pop_and_check_empty ~err authenticator rest in
        code ~pos:__POS__
          {ocaml|%s.connect %s >>= fun ctx -> %s.with_optional_tls_config_and_headers%a%a ctx|ocaml}
          modname ctx modname (pp_opt "authenticator") authenticator
          (pp_opt "headers") headers
    | _ -> err ()
  in
  impl ~packages ~connect ~runtime_args "Git_mirage_http.Make"
    (pclock @-> tcpv4v6 @-> mimic @-> git_client)
OCaml

Innovation. Community. Security.