package git-kv

  1. Overview
  2. Docs
A Mirage_kv implementation using git

Install

Dune Dependency

Authors

Maintainers

Sources

git-kv-0.2.0.tbz
sha256=40de3010d82dd8e9229e7df09c0a649e81efd47e991ef6eb31ee0c713dfe400d
sha512=fe70e3d1ad0f2a07dfd594ea87b4a4fcc1fe5633ced537206e61d566a2f97061dd0b348b1e93b8de1196af5878f307b7a3f595b1b51b25da89ee918328b977d9

doc/src/git-kv.sync/capability.ml.html

Source file capability.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
type t =
  [ `Multi_ack
  | `Multi_ack_detailed
  | `No_done
  | `Thin_pack
  | `Side_band
  | `Side_band_64k
  | `Ofs_delta
  | `Agent of string
  | `Shallow
  | `Deepen_since
  | `Deepen_not
  | `No_progress
  | `Include_tag
  | `Report_status
  | `Delete_refs
  | `Quiet
  | `Atomic
  | `Push_options
  | `Allow_tip_sha1_in_want
  | `Allow_reachable_sha1_in_want
  | `Push_cert of string
  | `Symref of string * string
  | `Other of string
  | `Parameter of string * string ]

let to_string = function
  | `Multi_ack -> "multi_ack"
  | `Multi_ack_detailed -> "multi_ack_detailed"
  | `No_done -> "no-done"
  | `Thin_pack -> "thin-pack"
  | `Side_band -> "side-band"
  | `Side_band_64k -> "side-band-64k"
  | `Ofs_delta -> "ofs-delta"
  | `Agent agent -> Fmt.str "agent=%s" agent
  | `Shallow -> "shallow"
  | `Deepen_since -> "deepen-since"
  | `Deepen_not -> "deepen-not"
  | `No_progress -> "no-progress"
  | `Include_tag -> "include-tag"
  | `Report_status -> "report-status"
  | `Delete_refs -> "delete-refs"
  | `Quiet -> "quiet"
  | `Atomic -> "atomic"
  | `Push_options -> "push-options"
  | `Allow_tip_sha1_in_want -> "allow-tip-sha1-in-want"
  | `Allow_reachable_sha1_in_want -> "allow-reachable-sha1-in-want"
  | `Push_cert cert -> Fmt.str "push-cert=%s" cert
  | `Symref (ref0, ref1) -> Fmt.str "symref=%s:%s" ref0 ref1
  | `Other capability -> capability
  | `Parameter (key, value) -> Fmt.str "%s=%s" key value

exception Capability_expect_value of string

let of_string ?value = function
  | "multi_ack" -> `Multi_ack
  | "multi_ack_detailed" -> `Multi_ack_detailed
  | "no-done" -> `No_done
  | "thin-pack" -> `Thin_pack
  | "side-band" -> `Side_band
  | "side-band-64k" -> `Side_band_64k
  | "ofs-delta" -> `Ofs_delta
  | "shallow" -> `Shallow
  | "deepen-since" -> `Deepen_since
  | "deepen-not" -> `Deepen_not
  | "no-progress" -> `No_progress
  | "include-tag" -> `Include_tag
  | "report-status" -> `Report_status
  | "delete-refs" -> `Delete_refs
  | "quiet" -> `Quiet
  | "atomic" -> `Atomic
  | "push-options" -> `Push_options
  | "allow-tip-sha1-in-want" -> `Allow_tip_sha1_in_want
  | "allow-reachable-sha1-in-want" -> `Allow_reachable_sha1_in_want
  | "push-cert" -> (
    match value with
    | Some value -> `Push_cert value
    | None -> raise (Capability_expect_value "push-cert"))
  | "agent" -> (
    match value with
    | Some value -> `Agent value
    | None -> raise (Capability_expect_value "agent"))
  | "symref" -> (
    match Option.map (String.split_on_char ':') value with
    | Some (ref0 :: ref1) -> `Symref (ref0, String.concat ":" ref1)
    | _ -> raise (Capability_expect_value "symref"))
  | capability -> (
    match value with
    | Some value -> `Parameter (capability, value)
    | None -> (
      match String.split_on_char '=' capability with
      | "push-cert" :: v -> `Push_cert (String.concat "=" v)
      | "agent" :: v -> `Agent (String.concat "=" v)
      | k :: v -> `Parameter (k, String.concat "=" v)
      | [] -> `Other capability))

let pp ppf = function
  | `Multi_ack -> Fmt.pf ppf "Multi-ACK"
  | `Multi_ack_detailed -> Fmt.pf ppf "Multi-ACK-detailed"
  | `No_done -> Fmt.pf ppf "No-done"
  | `Thin_pack -> Fmt.pf ppf "Thin-PACK"
  | `Side_band -> Fmt.pf ppf "Side-Band"
  | `Side_band_64k -> Fmt.pf ppf "Side-Band-64K"
  | `Ofs_delta -> Fmt.pf ppf "Offset-delta"
  | `Agent agent -> Fmt.pf ppf "(Agent %s)" agent
  | `Shallow -> Fmt.pf ppf "Shallow"
  | `Deepen_since -> Fmt.pf ppf "Deepen-Since"
  | `Deepen_not -> Fmt.pf ppf "Deepen-Not"
  | `No_progress -> Fmt.pf ppf "No-Progress"
  | `Include_tag -> Fmt.pf ppf "Include-Tag"
  | `Report_status -> Fmt.pf ppf "Report-Status"
  | `Delete_refs -> Fmt.pf ppf "Delete-Refs"
  | `Quiet -> Fmt.pf ppf "Quiet"
  | `Atomic -> Fmt.pf ppf "Atomic"
  | `Push_options -> Fmt.pf ppf "Push-Options"
  | `Allow_tip_sha1_in_want -> Fmt.pf ppf "Allow-Tip-SHA1-in-Want"
  | `Allow_reachable_sha1_in_want -> Fmt.pf ppf "Allow-Reachable-SHA1-in-Want"
  | `Push_cert cert -> Fmt.pf ppf "(Push Cert %s)" cert
  | `Symref (ref0, ref1) -> Fmt.pf ppf "(Symref (%s, %s))" ref0 ref1
  | `Other capability -> Fmt.pf ppf "(other %s)" capability
  | `Parameter (key, value) -> Fmt.pf ppf "(%s %s)" key value

let compare a b =
  match a, b with
  | `Multi_ack, `Multi_ack
  | `Multi_ack_detailed, `Multi_ack_detailed
  | `No_done, `No_done
  | `Thin_pack, `Thin_pack
  | `Side_band, `Side_band
  | `Side_band_64k, `Side_band_64k
  | `Ofs_delta, `Ofs_delta
  | `Shallow, `Shallow
  | `Deepen_since, `Deepen_since
  | `Deepen_not, `Deepen_not
  | `No_progress, `No_progress
  | `Include_tag, `Include_tag
  | `Report_status, `Report_status
  | `Delete_refs, `Delete_refs
  | `Quiet, `Quiet
  | `Atomic, `Atomic
  | `Push_options, `Push_options
  | `Allow_tip_sha1_in_want, `Allow_tip_sha1_in_want
  | `Allow_reachable_sha1_in_want, `Allow_reachable_sha1_in_want ->
    0
  | `Push_cert a, `Push_cert b | `Agent a, `Agent b | `Other a, `Other b ->
    String.compare a b
  | `Symref (refa0, refa1), `Symref (refb0, refb1) ->
    let res = String.compare refa0 refb0 in
    if res = 0 then String.compare refa1 refb1 else res
  | `Parameter (ka, va), `Parameter (kb, vb) ->
    let res = String.compare ka kb in
    if res = 0 then String.compare va vb else res
  | a, b -> if a > b then 1 else -1

let equal a b = compare a b = 0
OCaml

Innovation. Community. Security.